Staging
v0.5.1
https://github.com/git/git
Revision 181785487ecd48c7a3760ca31a6a245aabb2cbc8 authored by Junio C Hamano on 22 January 2022, 03:05:07 UTC, committed by Junio C Hamano on 22 January 2022, 03:05:07 UTC
1 parent 089b1a8
Raw File
Tip revision: 181785487ecd48c7a3760ca31a6a245aabb2cbc8 authored by Junio C Hamano on 22 January 2022, 03:05:07 UTC
What's cooking (2022/01 #06)
Tip revision: 1817854
dodoc.sh
#!/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 ***
'
back to top