| #!/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 |
| GNU_ROFF=YesPlease |
| MAN_BOLD_LITERAL=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 *** |
| ' |