Post 1.6.3 MaintNotes updates
[git] / dodoc.sh
1 #!/bin/sh
2 #
3 # This script is called from the post-update hook, and when
4 # the master branch is updated, run in $HOME/git-doc, like
5 # this:
6 : <<\END_OF_COMMENTARY
7
8 $ cat >hooks/post-update
9 #!/bin/sh
10 case " $* " in
11 *' refs/heads/master '*)
12         echo $HOME/git-doc/dodoc.sh | at now
13         ;;
14 esac
15 exec git update-server-info
16 $ chmod +x hooks/post-update
17
18 END_OF_COMMENTARY
19
20 # $HOME/git-doc is a clone of the git.git repository and
21 # has the master branch checkd out.  We update the working
22 # tree and build pre-formatted documentation pages, install
23 # in doc-htmlpages and doc-manapges subdirectory here.
24 # These two are their own git repository, and when they are
25 # updated the updates are pushed back into their own branches
26 # in git.git repository.
27
28 ID=`git rev-parse --verify refs/heads/master` || exit $?
29
30 unset GIT_DIR
31
32 : ${PUBLIC=/pub/software/scm/git/docs} &&
33 : ${MASTERREPO=`pwd`} &&
34 : ${DOCREPO=`dirname "$0"`} &&
35 test "$DOCREPO" != "" &&
36 cd "$DOCREPO" || exit $?
37
38 DOCREPO=`pwd`
39
40 tmp=`pwd`/.doctmp-$$
41 trap 'rm -f "$tmp".*' 0
42
43 (
44         git pull "$MASTERREPO" master &&
45         git fetch --tags "$MASTERREPO" 
46 ) >/dev/null 2>/dev/null || exit $?
47 test $(git rev-parse --verify refs/heads/master) == "$ID" &&
48 NID=$(git describe --abbrev=4 "$ID") &&
49 test '' != "$NID" ||  exit $?
50
51 # Set up subrepositories
52 for type in man html
53 do
54         test -d doc-${type}pages || (
55                 mkdir doc-${type}pages &&
56                 cd doc-${type}pages &&
57                 git init-db || exit $?
58
59                 git fetch-pack "$MASTERREPO" ${type} |
60                 while read sha1 name
61                 do
62                         case "$name" in
63                         refs/heads/${type})
64                                 git update-ref HEAD $sha1 &&
65                                 git checkout || exit $?
66                                 break
67                                 ;;
68                         esac
69                 done || exit $?
70         ) || exit
71         rm -fr doc-$type-inst
72 done
73
74 case "$(asciidoc --version 2>&1)" in
75 asciidoc' 8'.*)
76         ASCIIDOC8=YesPlease
77         export ASCIIDOC8 ;;
78 esac
79
80 make >./:html.log 2>&1 \
81         -C Documentation -j 2 \
82         WEBDOC_DEST="$DOCREPO/doc-html-inst" install-webdoc || exit
83
84 make >./:man.log 2>&1 \
85         -C Documentation -j 2 \
86         man1="$DOCREPO/doc-man-inst/man1" \
87         man5="$DOCREPO/doc-man-inst/man5" \
88         man7="$DOCREPO/doc-man-inst/man7" \
89         man1dir="$DOCREPO/doc-man-inst/man1" \
90         man5dir="$DOCREPO/doc-man-inst/man5" \
91         man7dir="$DOCREPO/doc-man-inst/man7" install || exit
92
93 for type in html man
94 do
95         find doc-$type-inst -type f |
96         while read path
97         do
98                 it=$(expr "$path" : doc-$type-inst/'\(.*\)') || continue
99                 t="doc-${type}pages/$it"
100                 test -f "$t" && diff -q "$path" "$t" && continue
101                 mkdir -p "$(dirname "$t")" &&
102                 echo ": $t" && rm -f "$t" && ln "$path" "$t" || exit
103                 ( cd doc-${type}pages && git add "$it" )
104         done || exit
105
106         find doc-$type-inst -type f |
107         sed -e 's|^doc-'$type'-inst/||' | sort >"$tmp.1" &&
108         (cd doc-${type}pages && git ls-files | sort) >"$tmp.2" &&
109         comm -13 "$tmp.1" "$tmp.2" |
110         ( cd doc-${type}pages && xargs rm -f -- ) || exit
111
112         (
113                 cd doc-${type}pages
114
115                 case "$type" in
116                 html)
117                         TYPE='HTML docs'
118                         rm -f index.html
119                         ln -sf git.html index.html
120                         git add index.html
121                         ;;
122                 man)
123                         TYPE='manpages'
124                         ;;
125                 esac
126
127                 if git commit -a -m "Autogenerated $TYPE for $NID"
128                 then
129                         git send-pack "$MASTERREPO" master:refs/heads/$type \
130                         >/dev/null 2>&1
131                 else
132                         echo "* No changes in $type docs"
133                 fi
134         ) || exit
135 done
136
137 if test -d $PUBLIC
138 then
139         # This is iffy...
140         mv Documentation/git.html Documentation/saved-git-html
141         make >>./:html.log 2>&1 \
142                 -C Documentation \
143                 WEBDOC_DEST="$PUBLIC" ASCIIDOC_EXTRA='-a stalenotes' \
144                 install-webdoc &&
145         mv Documentation/saved-git-html Documentation/git.html
146 else
147         echo "* No public html at $PUBLIC"
148 fi || exit $?
149
150 echo '
151
152 *** ALL DONE ***
153 ' >>./:html.log