~nytpu/public-inbox

Make the script POSIX compliant and fix the ':z'-in-updated-tags bug. v1 SUPERSEDED

Lykso: 1
 Make the script POSIX compliant and fix the ':z'-in-updated-tags bug.

 1 files changed, 31 insertions(+), 26 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~nytpu/public-inbox/patches/26693/mbox | git am -3
Learn more about email & git

[PATCH] Make the script POSIX compliant and fix the ':z'-in-updated-tags bug. Export this patch

---
 gemlog.sh | 57 ++++++++++++++++++++++++++++++-------------------------
 1 file changed, 31 insertions(+), 26 deletions(-)

diff --git a/gemlog.sh b/gemlog.sh
index 09aed60..5f31ea7 100755
--- a/gemlog.sh
+++ b/gemlog.sh
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/usr/bin/env sh

# Copyright 2020 nytpu
#
@@ -14,6 +14,7 @@
#
# You should have received a copy of the GNU Affero General Public License
# Header and footer file locations can be relative to directory where gemlog.sh is run, or absolute.

export header_file="_header.gmi"
export footer_file="_footer.gmi"
#export header_file="~/.config/gemlog.sh/header.gmi"
@@ -22,27 +23,27 @@ export footer_file="_footer.gmi"
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

make_globals() {
	if [[ -f "$HOME/.config/gemlog.sh/config.sh" ]]; then
		source "$HOME/.config/gemlog.sh/config.sh"
	elif [[ -f "./config.sh" ]]; then
		source "./config.sh"
	if [ -f "$HOME/.config/gemlog.sh/config.sh" ]; then
		. "$HOME/.config/gemlog.sh/config.sh"
	elif [ -f "./config.sh" ]; then
		. "./config.sh"
	else
		printf "No config file!\n"
		exit
	fi

	if [[ ! -f $header_file ]]; then
		printf "No header file matching config.sh value: $header_file"
	if [ ! -f $header_file ]; then
		printf "No header file matching config.sh value: $header_file\n"
		exit
	elif [[ ! -f $footer_file ]]; then
		printf "No footer file matching config.sh value: $footer_file"
	elif [ ! -f $footer_file ]; then
		printf "No footer file matching config.sh value: $footer_file\n"
		exit
	fi


	date_format_8601="+%Y-%m-%dT%H:%M:%S%:z" # *formal* ISO-8601 format including time zone
	date_format_8601_timeless="+%Y-%m-%dT12:00:00%:z" # *formal* ISO-8601 format with fixed preset time
	monthnames=( "invalid" "January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November" "December" )
	date_format_8601="+%Y-%m-%dT%H:%M:%S%z" # *formal* ISO-8601 format including time zone
	date_format_8601_timeless="+%Y-%m-%dT12:00:00%z" # *formal* ISO-8601 format with fixed preset time
	monthnames="invalid January February March April May June July August September October November December"
}

get_post_title() {
@@ -53,7 +54,7 @@ make_atom() {
	echo "Bulding atom feed..."

	atomfile="$gemlog_feed.$RANDOM"
	while [[ -f $atomfile ]]; do atomfile="$gemlog_feed.$RANDOM"; done
	while [ -f $atomfile ]; do atomfile="$gemlog_feed.$RANDOM"; done

	{
		pubdate=$(date "$date_format_8601")
@@ -75,18 +76,20 @@ make_atom() {
  <rights>© $global_author - $global_license</rights>
EOF
		n=0
		while IFS='' read -r i; do
			((n >= $number_of_feed_articles)) && break
		tz="$(date +%z)"
		find * -type f -name "[[:digit:]]*.gmi" | sort -r \
		| while IFS='' read -r i; do
			expr "$n" '>=' "$number_of_feed_articles" > /dev/null && break
			printf "\n  <entry>\n    <title>"
			get_post_title "$i" | tr -d '\n'
			printf "</title>\n    <id>$global_url${i#'./'}</id>\n"
			printf "    <link rel='alternate' href='$global_url${i#'./'}'/>\n    <updated>"
			echo "$i" | perl -ne '/^(\d{4}-\d{2}-\d{2}).*/; print "$1T12:00:00:z"' | tr -d '\n'
			echo "$i" | perl -ne '/^(\d{4}-\d{2}-\d{2}).*/; print "$1T12:00:00"' | tr -d '\n' | sed "s/\$/$tz/"
			# change or remove the <summary></summary> block if you want a different description or no description at all
			printf "</updated>\n    <summary>You need a gemini client to view this post. $global_url${i#'./'}</summary>\n  </entry>\n"

			n=$(( n + 1 ))
		done < <(find * -type f -name "[[:digit:]]*.gmi" | sort -r)
			n=$(expr "$n" '+' 1)
		done

		printf "</feed>\n"
	} 3>&1 >"$atomfile"
@@ -99,14 +102,15 @@ build_entries() {
	echo "Building index..."

	indexfile="$index.$RANDOM"
	while [[ -f $indexfile ]]; do indexfile="$index.$RANDOM"; done
	while [ -f $indexfile ]; do indexfile="$index.$RANDOM"; done

	{
		# header of the page (above the posts list)
		perl -pe 's/\$(\w+)/$ENV{$1}/g' "$header_file"
		curyear=""
		curmonth=""
		while IFS='' read -r i; do
		find * -type f -name "[[:digit:]]*.gmi" | sort -r \
		| while IFS='' read -r i; do
			post=$(basename $i)
			title=$(get_post_title "$i")
			pubdate=$(echo $i | perl -ne '/^(\d{4}-\d{2}-\d{2}).*/; print $1')
@@ -121,13 +125,13 @@ build_entries() {
				if $use_month_divider_nl; then
					printf "\n"
				elif $use_month_divider_hd; then
					printf "\n### ${monthnames[${newcurmonth#0}]}\n\n"
					printf "\n### $(echo "$monthnames" | cut -d' ' -f${newcurmonth#0})\n\n"
				fi
				curmonth="$newcurmonth"
			fi

			printf "=> $post $pubdate — $title\n"
		done < <(find * -type f -name "[[:digit:]]*.gmi" | sort -r)
		done

		# footer of the page (below the list of posts)
		perl -pe 's/\$(\w+)/$ENV{$1}/g' "$footer_file"
@@ -137,11 +141,12 @@ build_entries() {
	chmod 644 "$index"
}

toot() {
toot_prompt() {
	filename=$(find * -type f -name "[[:digit:]]*.gmi" | sort -r | head -n 1 | xargs basename)
	title=$(get_post_title "$filename")
	read -r -p "do you want to toot the newest post? [y/N] " response
	if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]
	printf "do you want to toot the newest post? [y/N] "
	read response
	if echo "$response" | grep -Eqi '^yes$|^y$'
	then
		echo "tooting..."
		# change this if you want the toot to have different content
@@ -152,6 +157,6 @@ toot() {
make_globals
make_atom
build_entries
toot
toot_prompt

gemget -o - "gemini://warmedal.se/~antenna/submit?gemini%3A%2F%2Fnytpu.com%2Fgemlog%2F"
-- 
2.33.1