]> arthur.barton.de Git - bup.git/blob - dev/update-doc-branches
226a1526301b2619ae0a017767a12f86754955b2
[bup.git] / dev / update-doc-branches
1 #!/usr/bin/env bash
2
3 # Ensures that the working tree is clean, and Documentation/ is up to
4 # date, and then commits Documentation/*.1 to the man branch, and
5 # Documentation/*.html to the html branch.
6
7 set -uexo pipefail
8
9 test "$#" -eq 2
10
11 # Must be full ref name, i.e. refs/heads/man, etc.
12 man_ref="$1"
13 html_ref="$2"
14
15 git diff-index --quiet HEAD --  # no uncommitted changes
16 git rev-parse --verify "$man_ref"
17 git rev-parse --verify "$html_ref"
18 echo "$man_ref" | grep -qE '^refs/heads'
19 echo "$html_ref" | grep -qE '^refs/heads'
20
21 "${MAKE:-make}"
22
23 tmpdir="$(mktemp -d "t/tmp/update-doc-branches-XXXXXX")"
24 trap "$(printf 'rm -rf %q' "$tmpdir")" EXIT
25 tmpidx="$tmpdir/git-index.tmp"
26
27 for fmt in man html; do
28     rm -f "$tmpidx"
29     for f in $(git ls-files 'Documentation/*.md'); do
30         base="$(basename "$f" .md)"
31         if test "$fmt" = man; then
32             ref="$man_ref"
33             GIT_INDEX_FILE="$tmpidx" git add -f "Documentation/$base.1"
34         else
35             ref="$html_ref"
36             GIT_INDEX_FILE="$tmpidx" git add -f "Documentation/$base.html"
37         fi
38     done
39     msg="Update $fmt pages for $(git describe --always)"
40     tree=$(GIT_INDEX_FILE="$tmpidx" git write-tree --prefix=Documentation)
41     commit=$(echo "$msg" | git commit-tree "$tree" -p refs/heads/"$fmt")
42     git update-ref "$ref" "$commit"
43 done