diff options
author | EuAndreh <eu@euandre.org> | 2025-01-06 13:51:13 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-01-06 13:51:13 -0300 |
commit | 062e61f1ecc160a1256fcaab7cb4db12288a84d2 (patch) | |
tree | c80ced14149a8d5e94c6e20ecce03438f0b279aa | |
parent | m (diff) | |
download | gistatic-062e61f1ecc160a1256fcaab7cb4db12288a84d2.tar.gz gistatic-062e61f1ecc160a1256fcaab7cb4db12288a84d2.tar.xz |
m
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | f | 92 | ||||
-rwxr-xr-x | src/gistatic.in | 274 |
3 files changed, 369 insertions, 13 deletions
@@ -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 @@ -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 + <!DOCTYPE html> + <html lang="$(escape "$MSG_LANGNAME")"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="description" content="$(escape "$DESCRIPTION")" /> + <link rel="icon" type="image/svg+xml" href="logo.svg" /> + <link rel="stylesheet" type="text/css" href="style.css" /> + <link rel="alternate" type="application/atom+xml" href="commits.xml" title="$(escape "$NAME") - $(escape "$MSG_COMMIT_FEED")" hreflang="$(escape "$MSG_LANGNAME")" /> + <link rel="alternate" type="application/atom+xml" href="tags.xml" title="$(escape "$NAME") - $(escape "$MSG_TAGS_FEED")" hreflang="$(escape "$MSG_LANGNAME")" /> + <title>$(escape "$NAME") - $(escape "$MSG_TITLE_REFS")</title> + </head> + <body> + <header> + <div class="header-horizontal-grouping"> + <a href="../"> + <img alt="$(escape "$MSG_LOGO_ALT_INDEX")" class="logo" src="logo.svg" /> + </a> + <div class="header-description"> + <h1> + <a href="./"> + $(escape "$NAME") + </a> + </h1> + <h2> + $(escape "$DESCRIPTION") + </h2> + <code> + git clone $(escape "$CLONE_URL") + </code> + </div> + </div> + <nav> + <ul> + <li> + <a href="./"> + $(escape "$MSG_NAV_FILES") + </a> + </li> + <li> + <a href="log/$(escape "$MAIN_BRANCH").html"> + $(escape "$MSG_NAV_LOG") + </a> + </li> + <li class="selected-nav-item"> + <a href="refs.html"> + $(escape "$MSG_NAV_REFS") + </a> + </li> + </ul> + </nav> + <hr /> + </header> + <main> + <table> + <thead> + <tr> + <th> + $(escape "$MSG_THEAD_BRANCH") + </th> + <th> + $(escape "$MSG_THEAD_COMMITMSG") + </th> + <th> + $(escape "$MSG_THEAD_AUTHOR") + </th> + <th> + $(escape "$MSG_THEAD_DATE") + </th> + </tr> + </thead> + <tbody> + EOF + + for branch in $(git branch --format '%(refname:lstrip=2)'); do + sha="$(git rev-parse "$branch")" + cat <<EOF + <tr> + <td> + <a href="log/$(escape "$branch").html"> + $(escape "$branch") + </a> + </td> + <td> + <a href="commit/$(escape "$sha").html"> + $(escape "$(git log -1 --format=%s "$sha")") + </a> + </td> + <td> + $(escape "$(git log -1 --format=%an "$sha")") + </td> + <td> + $(escape "$(git log -1 --format=%cd --date='format:%Y-%m:%d %H:%M' "$sha")") + </td> + </tr> +EOF + done + + cat <<EOF + </tbody> + </table> +EOF + PRINTED_TABLE_OPEN=false + + for tag in $(git tag | tac); do + if [ "$PRINTED_TABLE_OPEN" = false ]; then + PRINTED_TABLE_OPEN=true + cat <<EOF + <table> + <thead> + <tr> + <th> + $(escape "$MSG_THEAD_TAG") + </th> + <th> + $(escape "$MSG_THEAD_AUTHOR") + </th> + <th> + $(escape "$MSG_THEAD_DATE") + </th> + </tr> + </thead> + <tbody> +EOF + fi + + if [ -e "$CACHE_DIR/tarballs/$repo-$tag.tar.gz.asc" ]; then + tarball_link="(<a href=\"tarballs/$(escape "$repo")-$(escape "$tag").tar.gz\">tarball</a>, + <a href=\"tarballs/$(escape "$repo")-$(escape "$tag").tar.gz.asc\">sig</a>)" + else + tarball_link="(<a href=\"tarballs/$(escape "$repo")-$(escape "$tag").tar.gz\">tarball</a>)" + fi + + cat <<EOF + <tr> + <td> + <a href="tag/$(escape "$tag").html"> + $(escape "$tag") + </a> + $tarball_link + </td> + <td> + $(escape "$(git log -1 --format=%an "$tag")") + </td> + <td> + $(escape "$(git log -1 --format=%cd --date='format:%Y-%m:%d %H:%M' "$tag")") + </td> + </tr> +EOF + done + + if [ "$PRINTED_TABLE_OPEN" = true ]; then + cat <<EOF + </tbody> + </table> +EOF + fi + + cat <<EOF + </main> + <footer> + <hr /> + <p> + $MSG_ESCAPED_FOOTER_TEMPLATE + </p> + </footer> + </body> +</html> +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 |