blob: 719203f482e5e04839df2bf84748c5ff771ee383 [file] [log] [blame]
#!/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 ***
'