#!/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 "$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 *** '