summaryrefslogtreecommitdiff
path: root/dodoc.sh
blob: 719203f482e5e04839df2bf84748c5ff771ee383 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/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 ***
'