aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-01-06 13:51:13 -0300
committerEuAndreh <eu@euandre.org>2025-01-06 13:51:13 -0300
commit062e61f1ecc160a1256fcaab7cb4db12288a84d2 (patch)
treec80ced14149a8d5e94c6e20ecce03438f0b279aa
parentm (diff)
downloadgistatic-062e61f1ecc160a1256fcaab7cb4db12288a84d2.tar.gz
gistatic-062e61f1ecc160a1256fcaab7cb4db12288a84d2.tar.xz
m
-rw-r--r--Makefile16
-rw-r--r--f92
-rwxr-xr-xsrc/gistatic.in274
3 files changed, 369 insertions, 13 deletions
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
+ <!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