148 lines
3.1 KiB
Bash
Executable File
148 lines
3.1 KiB
Bash
Executable File
#!/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 ***
|
|
'
|