From 062e61f1ecc160a1256fcaab7cb4db12288a84d2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2025 13:51:13 -0300 Subject: m --- Makefile | 16 ++-- f | 92 +++++++++++++++++++ src/gistatic.in | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 369 insertions(+), 13 deletions(-) create mode 100644 f diff --git a/Makefile b/Makefile index 3482494..becf326 100644 --- a/Makefile +++ b/Makefile @@ -13,12 +13,12 @@ CONTRIBLANGS = .SUFFIXES: .in .in: - sed \ + @sed \ -e 's:@VERSION@:$(VERSION):g' \ -e 's:@DATE@:$(DATE):g' \ -e 's:@NAME@:$(NAME):g' \ < $< > $@ - if [ -x $< ]; then chmod +x $@; fi + @if [ -x $< ]; then chmod +x $@; fi manpages.en.in = \ @@ -40,16 +40,16 @@ tests/resources/repositories/repo-2/.git: shellcheck: - shellcheck src/gistatic.in + @shellcheck src/gistatic.in emit-index: src/gistatic - rm -rf tmp/index/ - ./src/gistatic -i -o tmp/index/ ~/dev/published/git-permalink/ ../capim/ ../libedn/ ../listatic/ ../lisp-cli/ - ln -rfs tmp/git-permalink tmp/index/git-permalink + @rm -rf tmp/index/ + @./src/gistatic -i -o tmp/index/ ~/dev/published/git-permalink/ ../capim/ ../libedn/ ../listatic/ ../lisp-cli/ + @ln -rfs tmp/git-permalink tmp/index/git-permalink emit-repo: src/gistatic - rm -rf tmp/git-permalink/ - time ./src/gistatic -o tmp/git-permalink/ -u FIXME-url-1 ~/dev/published/git-permalink/ + @rm -rf tmp/git-permalink/ + @time ./src/gistatic -o tmp/git-permalink/ -u FIXME-url-1 ~/dev/published/git-permalink/ run: shellcheck emit-index emit-repo diff --git a/f b/f new file mode 100644 index 0000000..a9029df --- /dev/null +++ b/f @@ -0,0 +1,92 @@ +.POSIX: + +LN = ln + +default: all + +ALWAYS: + + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-dbg-gistatic.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-dbg-gistatic.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-dbg-gistatic.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-dbg-gistatic.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/branch-revisions/dbg-gistatic + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-dbg-gistatic/ -o $@ dbg-gistatic + +/home/andreh/.usr/var/cache/gistatic/git-permalink/branch-revisions/dbg-gistatic: ALWAYS + @git -C "/home/andreh/dev/published/git-permalink" rev-parse dbg-gistatic | ifnew $@ + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-main.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-main.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-main.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-main.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/branch-revisions/main + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-main/ -o $@ main + +/home/andreh/.usr/var/cache/gistatic/git-permalink/branch-revisions/main: ALWAYS + @git -C "/home/andreh/dev/published/git-permalink" rev-parse main | ifnew $@ + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.1.0.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.1.0.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.1.0.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.1.0.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.1.0/ -o $@ v0.1.0 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.0.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.0.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.0.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.0.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.2.0/ -o $@ v0.2.0 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.1.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.1.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.1.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.1.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.2.1/ -o $@ v0.2.1 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.2.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.2.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.2.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.2.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.2.2/ -o $@ v0.2.2 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.3.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.2.3.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.3.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.2.3.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.2.3/ -o $@ v0.2.3 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.3.0.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.3.0.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.3.0.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.3.0.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.3.0/ -o $@ v0.3.0 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.3.1.tar.xz + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/tarballs/git-permalink-v0.3.1.tar.xz: /home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.3.1.tar.xz + $(LN) $? $@ + +/home/andreh/.usr/var/cache/gistatic/git-permalink/tarballs/git-permalink-v0.3.1.tar.xz: + git -C "/home/andreh/dev/published/git-permalink" archive --prefix git-permalink-v0.3.1/ -o $@ v0.3.1 + +all: /home/andreh/dev/libre/gistatic/tmp/git-permalink/refs.html + +/home/andreh/dev/libre/gistatic/tmp/git-permalink/refs.html: ALWAYS + ./src/gistatic -x refs "/home/andreh/dev/published/git-permalink" > $@ + diff --git a/src/gistatic.in b/src/gistatic.in index f3cb2d6..fec517a 100755 --- a/src/gistatic.in +++ b/src/gistatic.in @@ -506,6 +506,42 @@ cached_run() { fi } +# FIXME: get from config? +# exts() { } + +# FIXME: emit signatures code +TAB="$(printf '\t')" +repo_tarballs_write2() { + git branch --format '%(refname:lstrip=2)' | while read -r branch; do + cat <<-EOF + all: $OUTDIR/tarballs/$NAME-$branch.$EXT + + $OUTDIR/tarballs/$NAME-$branch.$EXT: $CACHE_DIR/tarballs/$NAME-$branch.$EXT + ${TAB}\$(LN) \$? \$@ + + $CACHE_DIR/tarballs/$NAME-$branch.$EXT: $CACHE_DIR/branch-revisions/$branch + ${TAB}git -C "$REPO" archive --prefix $NAME-$branch/ -o \$@ $branch + + $CACHE_DIR/branch-revisions/$branch: ALWAYS + ${TAB}@git -C "$REPO" rev-parse $branch | ifnew \$@ + + EOF + done + + git tag | while read -r tag; do + cat <<-EOF + all: $OUTDIR/tarballs/$NAME-$tag.$EXT + + $OUTDIR/tarballs/$NAME-$tag.$EXT: $CACHE_DIR/tarballs/$NAME-$tag.$EXT + ${TAB}\$(LN) \$? \$@ + + $CACHE_DIR/tarballs/$NAME-$tag.$EXT: + ${TAB}git -C "$REPO" archive --prefix $NAME-$tag/ -o \$@ $tag + + EOF + done +} + repo_tarballs_write() { repo="$1" mkdir -p "$OUTDIR/tarballs" "$CACHE_DIR/tarballs" @@ -540,6 +576,189 @@ repo_tarballs_write() { wait } +print_repo_refs2() { + cat <<-EOF + all: $OUTDIR/refs.html + + $OUTDIR/refs.html: ALWAYS + ${TAB}$0 -x refs "$REPO" > \$@ + + EOF +} +exec_refs() { + repo_vars "$1" + cat <<-EOF + + + + + + + + + + + $(escape "$NAME") - $(escape "$MSG_TITLE_REFS") + + +
+
+ + + +
+

+ + $(escape "$NAME") + +

+

+ $(escape "$DESCRIPTION") +

+ + git clone $(escape "$CLONE_URL") + +
+
+ +
+
+
+ + + + + + + + + + + EOF + + for branch in $(git branch --format '%(refname:lstrip=2)'); do + sha="$(git rev-parse "$branch")" + cat < + + + + + +EOF + done + + cat < +
+ $(escape "$MSG_THEAD_BRANCH") + + $(escape "$MSG_THEAD_COMMITMSG") + + $(escape "$MSG_THEAD_AUTHOR") + + $(escape "$MSG_THEAD_DATE") +
+ + $(escape "$branch") + + + + $(escape "$(git log -1 --format=%s "$sha")") + + + $(escape "$(git log -1 --format=%an "$sha")") + + $(escape "$(git log -1 --format=%cd --date='format:%Y-%m:%d %H:%M' "$sha")") +
+EOF + PRINTED_TABLE_OPEN=false + + for tag in $(git tag | tac); do + if [ "$PRINTED_TABLE_OPEN" = false ]; then + PRINTED_TABLE_OPEN=true + cat < + + + + $(escape "$MSG_THEAD_TAG") + + + $(escape "$MSG_THEAD_AUTHOR") + + + $(escape "$MSG_THEAD_DATE") + + + + +EOF + fi + + if [ -e "$CACHE_DIR/tarballs/$repo-$tag.tar.gz.asc" ]; then + tarball_link="(tarball, + sig)" + else + tarball_link="(tarball)" + fi + + cat < + + + $(escape "$tag") + + $tarball_link + + + $(escape "$(git log -1 --format=%an "$tag")") + + + $(escape "$(git log -1 --format=%cd --date='format:%Y-%m:%d %H:%M' "$tag")") + + +EOF + done + + if [ "$PRINTED_TABLE_OPEN" = true ]; then + cat < + +EOF + fi + + cat < + + + +EOF +} + print_repo_refs() { repo="$1" description="$2" @@ -1177,6 +1396,44 @@ repo_trees_write() { echo } +preamble() { + cat <<-EOF + .POSIX: + + LN = $CMD + + default: all + + ALWAYS: + + + EOF +} + +repo_vars() { + EXT=tar.xz + REPO_DIR="${1%/}" + REPO="${1%/}" # FIXME: shesc + NAME="$(basename "$REPO" .git)" + CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/gistatic/$NAME" + GIT_DIR="$REPO/$(git -C "$REPO" rev-parse --git-dir)" + export GIT_DIR + DESCRIPTION="$(cat "$GIT_DIR"/description 2>/dev/null ||:)" +} + +repo_write2() { + repo_vars "$1" + mkdir -p \ + "$OUTDIR"/tarballs \ + "$CACHE_DIR"/tarballs \ + "$CACHE_DIR"/branch-revisions + { + preamble + repo_tarballs_write2 + print_repo_refs2 + } | tee f | make -f- +} + repo_write() { cd "$1" # FIXME: use $REPO and $DESCRIPTION @@ -1184,9 +1441,6 @@ repo_write() { description="$(cat "$1/description" 2>/dev/null ||:)" CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/gistatic/$repo" - print_logo > "$OUTDIR/logo.svg" - print_style > "$OUTDIR/style.css" - repo_tarballs_write "$repo" print_repo_refs "$repo" "$description" > "$OUTDIR/refs.html" repo_commits_write "$repo" "$description" @@ -1229,7 +1483,8 @@ MAIN_BRANCH_SET=false REPO= DESCRIPTION= CMD='ln' -while getopts 'b:o:t:u:j:isqhV' flag; do +EXEC= +while getopts 'b:o:t:u:j:isqx:hV' flag; do case "$flag" in b) MAIN_BRANCH="$OPTARG" @@ -1256,6 +1511,9 @@ while getopts 'b:o:t:u:j:isqhV' flag; do s) CMD='ln -s' ;; + x) + EXEC="$OPTARG" + ;; h) usage help @@ -1280,6 +1538,11 @@ assert_arg() { exit 2 fi } + +if [ -n "$EXEC" ]; then + "exec_$EXEC" "$@" + exit +fi assert_arg "$OUTDIR" '-o DIRECTORY' if [ "$INDEX" = false ]; then @@ -1308,5 +1571,6 @@ mkdir -p "$OUTDIR" if [ "$INDEX" = true ]; then index_write "$@" else - repo_write "$1" + # repo_write "$1" + repo_write2 "$1" fi -- cgit v1.2.3