Meta/cycle-run: use SANITIZE
[git] / dodoc.sh
1 #!/bin/sh
2
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.
9
10 unset GIT_DIR
11
12 : ${TOP=/srv/project/git}
13
14 MASTERREPO=$TOP/git.git/
15 MANREPO=$TOP/git-manpages.git/
16 HTMLREPO=$TOP/git-htmldocs.git/
17
18 target_repo () {
19         TARGETVAR=$(echo "$1"REPO | tr 'a-z' 'A-Z') &&
20         eval "echo \$$TARGETVAR"
21 }
22
23 DOCREPO=$(pwd) ;# "git-doc"
24 exec >:doc.log 2>&1
25
26 ID=$(cd "$MASTERREPO" && git rev-parse --verify refs/heads/master) || exit $?
27
28 tmp=`pwd`/.doctmp-$$
29 trap 'rm -f "$tmp".*' 0
30
31 (
32         git pull --ff-only "$MASTERREPO" master &&
33         git fetch --tags "$MASTERREPO"
34 ) || exit $?
35
36 test $(git rev-parse --verify refs/heads/master) = "$ID" &&
37 NID=$(git describe --abbrev=4 "$ID") &&
38 test -n "$NID" ||  exit $?
39
40 git reset --hard
41
42 # Set up subrepositories
43 for type in man html
44 do
45         test -d doc-${type}pages && continue
46         (
47                 git init doc-${type}pages &&
48                 cd doc-${type}pages || exit
49                 TARGETREPO=$(target_repo $type) &&
50                 git pull "$TARGETREPO" master
51         ) &&
52         rm -fr doc-$type-inst &&
53         mkdir -p doc-$type-inst &&
54         (
55                 cd doc-${type}pages && git archive HEAD
56         ) |
57         (
58                 cd doc-$type-inst && tar xf -
59         )
60 done
61
62 # The below used to contain this instead...
63 # MAN_BASE_URL="http://www.kernel.org/pub/software/scm/git/docs/"
64 dd='
65         MAN_BASE_URL="git-htmldocs/"
66         BLK_SHA1=YesPlease
67         GNU_ROFF=YesPlease
68         MAN_BOLD_LITERAL=YesPlease
69 '
70
71 if test -z "$DOC_FROM_SCRATCH"
72 then
73         case "$NID" in
74         ?*-g*) ;;
75         ?*) DOC_FROM_SCRATCH=yes ;;
76         esac
77 fi
78 if test -n "$DOC_FROM_SCRATCH"
79 then
80         make clean &&
81         rm -fr doc-html-inst doc-man-inst &&
82         mkdir doc-html-inst doc-man-inst || exit
83 fi
84
85 DIFF=diff
86 export DIFF
87
88 make \
89         -C Documentation -j 2 $dd \
90         WEBDOC_DEST="$DOCREPO/doc-html-inst" install-webdoc || exit
91
92 make \
93         -C Documentation -j 2 $dd \
94         man1="$DOCREPO/doc-man-inst/man1" \
95         man5="$DOCREPO/doc-man-inst/man5" \
96         man7="$DOCREPO/doc-man-inst/man7" \
97         man1dir="$DOCREPO/doc-man-inst/man1" \
98         man5dir="$DOCREPO/doc-man-inst/man5" \
99         man7dir="$DOCREPO/doc-man-inst/man7" install || exit
100
101 for type in html man
102 do
103         find doc-$type-inst -type f |
104         while read path
105         do
106                 it=$(expr "$path" : doc-$type-inst/'\(.*\)') || continue
107                 t="doc-${type}pages/$it"
108                 test -f "$t" && diff -q "$path" "$t" && continue
109                 mkdir -p "$(dirname "$t")" &&
110                 echo ": $t" && rm -f "$t" && ln "$path" "$t" || exit
111                 ( cd doc-${type}pages && git add "$it" )
112         done || exit
113
114         find doc-$type-inst -type f |
115         sed -e 's|^doc-'$type'-inst/||' | sort >"$tmp.1" &&
116         (cd doc-${type}pages && git ls-files | sort) >"$tmp.2" &&
117         comm -13 "$tmp.1" "$tmp.2" |
118         ( cd doc-${type}pages && xargs rm -f -- ) || exit
119
120         (
121                 cd doc-${type}pages
122
123                 case "$type" in
124                 html)
125                         TYPE='HTML docs'
126                         rm -f index.html
127                         ln -sf git.html index.html
128                         git add index.html
129                         ;;
130                 man)
131                         TYPE='manpages'
132                         ;;
133                 esac
134
135                 if git commit -a -m "Autogenerated $TYPE for $NID"
136                 then
137                         TARGETREPO=$(target_repo $type) &&
138                         git push "$TARGETREPO" master:master
139                 else
140                         echo "* No changes in $type docs"
141                 fi
142         ) || exit
143 done
144
145 echo '
146
147 *** ALL DONE ***
148 '