Meta/cook -w: catch a bit more standard judgement phrases
[alt-git.git] / dodoc.sh
blob75da9b70c164510943d730aba56781fd243baf1e
1 #!/bin/sh
3 # "git-doc" is a clone of the git.git repository and has the master
4 # branch checked out. We update the working tree and prepare
5 # preformatted documentation pages, and install them in doc-htmlpages
6 # and doc-manapges subdirectories. When they are updated, they are
7 # pushed back into their own repositories next to the git.git
8 # repository.
10 unset GIT_DIR
12 MASTERREPO=/srv/project/git/git.git/
13 DOCREFHIER=refs/docs
14 MANREPO=/srv/project/git/git-manpages.git/
15 HTMLREPO=/srv/project/git/git-htmldocs.git/
17 target_repo () {
18 TARGETVAR=$(echo "$1"REPO | tr 'a-z' 'A-Z') &&
19 eval "echo \$$TARGETVAR"
22 DOCREPO=$(pwd) ;# "git-doc"
23 exec >:doc.log 2>&1
25 ID=$(cd "$MASTERREPO" && git rev-parse --verify refs/heads/master) || exit $?
27 tmp=`pwd`/.doctmp-$$
28 trap 'rm -f "$tmp".*' 0
31 git pull --ff-only "$MASTERREPO" master &&
32 git fetch --tags "$MASTERREPO"
33 ) || exit $?
35 test $(git rev-parse --verify refs/heads/master) = "$ID" &&
36 NID=$(git describe --abbrev=4 "$ID") &&
37 test -n "$NID" || exit $?
39 git reset --hard
41 # Set up subrepositories
42 for type in man html
44 test -d doc-${type}pages && continue
46 git init doc-${type}pages &&
47 cd doc-${type}pages || exit
48 TARGETREPO=$(target_repo $type) &&
49 git pull "$TARGETREPO" master
50 ) &&
51 rm -fr doc-$type-inst &&
52 mkdir -p doc-$type-inst &&
54 cd doc-${type}pages && git archive HEAD
55 ) |
57 cd doc-$type-inst && tar xf -
59 done
61 dd='
62 ASCIIDOC_NO_ROFF=YesPlease
63 ASCIIDOC8=YesPlease
64 MAN_BASE_URL="http://www.kernel.org/pub/software/scm/git/docs/"
65 BLK_SHA1=YesPlease
66 GNU_ROFF=YesPlease
69 case "$NID" in
70 ?*-?*) ;;
71 ?*)
72 make clean &&
73 rm -fr doc-html-inst doc-man-inst &&
74 mkdir doc-html-inst doc-man-inst || exit
76 esac
78 DIFF=diff
79 export DIFF
81 make \
82 -C Documentation -j 2 $dd \
83 WEBDOC_DEST="$DOCREPO/doc-html-inst" install-webdoc || exit
85 make \
86 -C Documentation -j 2 $dd \
87 man1="$DOCREPO/doc-man-inst/man1" \
88 man5="$DOCREPO/doc-man-inst/man5" \
89 man7="$DOCREPO/doc-man-inst/man7" \
90 man1dir="$DOCREPO/doc-man-inst/man1" \
91 man5dir="$DOCREPO/doc-man-inst/man5" \
92 man7dir="$DOCREPO/doc-man-inst/man7" install || exit
94 for type in html man
96 find doc-$type-inst -type f |
97 while read path
99 it=$(expr "$path" : doc-$type-inst/'\(.*\)') || continue
100 t="doc-${type}pages/$it"
101 test -f "$t" && diff -q "$path" "$t" && continue
102 mkdir -p "$(dirname "$t")" &&
103 echo ": $t" && rm -f "$t" && ln "$path" "$t" || exit
104 ( cd doc-${type}pages && git add "$it" )
105 done || exit
107 find doc-$type-inst -type f |
108 sed -e 's|^doc-'$type'-inst/||' | sort >"$tmp.1" &&
109 (cd doc-${type}pages && git ls-files | sort) >"$tmp.2" &&
110 comm -13 "$tmp.1" "$tmp.2" |
111 ( cd doc-${type}pages && xargs rm -f -- ) || exit
114 cd doc-${type}pages
116 case "$type" in
117 html)
118 TYPE='HTML docs'
119 rm -f index.html
120 ln -sf git.html index.html
121 git add index.html
123 man)
124 TYPE='manpages'
126 esac
128 if git commit -a -m "Autogenerated $TYPE for $NID"
129 then
130 TARGETREPO=$(target_repo $type) &&
131 git push "$TARGETREPO" master:master
132 else
133 echo "* No changes in $type docs"
135 ) || exit
136 done
138 echo '
140 *** ALL DONE ***