| #!/bin/sh | |
| # "git-doc" is a clone of the git.git repository and has the master | |
| # branch checked out. We update the working tree and prepare | |
| # preformatted documentation pages, and install them in doc-htmlpages | |
| # and doc-manapges subdirectories. When they are updated, they are | |
| # pushed back into their own repositories next to the git.git | |
| # repository. | |
| unset GIT_DIR | |
| : ${TOP=/srv/project/git} | |
| MASTERREPO=$TOP/git.git/ | |
| MANREPO=$TOP/git-manpages.git/ | |
| HTMLREPO=$TOP/git-htmldocs.git/ | |
| target_repo () { | |
| TARGETVAR=$(echo "$1"REPO | tr 'a-z' 'A-Z') && | |
| eval "echo \$$TARGETVAR" | |
| } | |
| DOCREPO=$(pwd) ;# "git-doc" | |
| exec >:doc.log 2>&1 | |
| ID=$(cd "$MASTERREPO" && git rev-parse --verify refs/heads/master) || exit $? | |
| tmp=`pwd`/.doctmp-$$ | |
| trap 'rm -f "$tmp".*' 0 | |
| ( | |
| git pull --ff-only "$MASTERREPO" master && | |
| git fetch --tags --force "$MASTERREPO" | |
| ) || exit $? | |
| test $(git rev-parse --verify refs/heads/master) = "$ID" && | |
| NID=$(git describe --abbrev=4 "$ID") && | |
| test -n "$NID" || exit $? | |
| git reset --hard | |
| # Set up subrepositories | |
| for type in man html | |
| do | |
| test -d doc-${type}pages && continue | |
| ( | |
| git init doc-${type}pages && | |
| cd doc-${type}pages || exit | |
| TARGETREPO=$(target_repo $type) && | |
| git pull "$TARGETREPO" master | |
| ) && | |
| rm -fr doc-$type-inst && | |
| mkdir -p doc-$type-inst && | |
| ( | |
| cd doc-${type}pages && git archive HEAD | |
| ) | | |
| ( | |
| cd doc-$type-inst && tar xf - | |
| ) | |
| done | |
| # The below used to contain this instead... | |
| # MAN_BASE_URL="http://www.kernel.org/pub/software/scm/git/docs/" | |
| dd=' | |
| MAN_BASE_URL="git-htmldocs/" | |
| BLK_SHA1=YesPlease | |
| USE_ASCIIDOCTOR=YesPlease | |
| ' | |
| if test -z "$DOC_FROM_SCRATCH" | |
| then | |
| case "$NID" in | |
| ?*-g*) ;; | |
| ?*) DOC_FROM_SCRATCH=yes ;; | |
| esac | |
| fi | |
| if test -n "$DOC_FROM_SCRATCH" | |
| then | |
| make clean && | |
| rm -fr doc-html-inst doc-man-inst && | |
| mkdir doc-html-inst doc-man-inst || exit | |
| fi | |
| DIFF=diff | |
| export DIFF | |
| make \ | |
| -C Documentation -j 2 $dd \ | |
| WEBDOC_DEST="$DOCREPO/doc-html-inst" install-webdoc || exit | |
| make \ | |
| -C Documentation -j 2 $dd \ | |
| man1="$DOCREPO/doc-man-inst/man1" \ | |
| man5="$DOCREPO/doc-man-inst/man5" \ | |
| man7="$DOCREPO/doc-man-inst/man7" \ | |
| man1dir="$DOCREPO/doc-man-inst/man1" \ | |
| man5dir="$DOCREPO/doc-man-inst/man5" \ | |
| man7dir="$DOCREPO/doc-man-inst/man7" install || exit | |
| for type in html man | |
| do | |
| find doc-$type-inst -type f | | |
| while read path | |
| do | |
| it=$(expr "$path" : doc-$type-inst/'\(.*\)') || continue | |
| t="doc-${type}pages/$it" | |
| test -f "$t" && diff -q "$path" "$t" && continue | |
| mkdir -p "$(dirname "$t")" && | |
| echo ": $t" && rm -f "$t" && ln "$path" "$t" || exit | |
| ( cd doc-${type}pages && git add "$it" ) | |
| done || exit | |
| find doc-$type-inst -type f | | |
| sed -e 's|^doc-'$type'-inst/||' | sort >"$tmp.1" && | |
| (cd doc-${type}pages && git ls-files | sort) >"$tmp.2" && | |
| comm -13 "$tmp.1" "$tmp.2" | | |
| ( cd doc-${type}pages && xargs rm -f -- ) || exit | |
| ( | |
| cd doc-${type}pages | |
| case "$type" in | |
| html) | |
| TYPE='HTML docs' | |
| rm -f index.html | |
| ln -sf git.html index.html | |
| git add index.html | |
| ;; | |
| man) | |
| TYPE='manpages' | |
| ;; | |
| esac | |
| if git commit -a -m "Autogenerated $TYPE for $NID" | |
| then | |
| TARGETREPO=$(target_repo $type) && | |
| git push "$TARGETREPO" master:master | |
| else | |
| echo "* No changes in $type docs" | |
| fi | |
| ) || exit | |
| done | |
| echo ' | |
| *** ALL DONE *** | |
| ' |