@@ -12,16 +12,26 @@ OPTIONS_SPEC="\
12
12
doc-diff [options] <from> <to> [-- <diff-options>]
13
13
doc-diff (-c|--clean)
14
14
--
15
- j=n parallel argument to pass to make
16
- f force rebuild; do not rely on cached results
17
- c,clean cleanup temporary working files
15
+ j=n parallel argument to pass to make
16
+ f force rebuild; do not rely on cached results
17
+ c,clean cleanup temporary working files
18
+ from-asciidoc use asciidoc with the 'from'-commit
19
+ from-asciidoctor use asciidoctor with the 'from'-commit
20
+ asciidoc use asciidoc with both commits
21
+ to-asciidoc use asciidoc with the 'to'-commit
22
+ to-asciidoctor use asciidoctor with the 'to'-commit
23
+ asciidoctor use asciidoctor with both commits
24
+ cut-header-footer cut away header and footer
18
25
"
19
26
SUBDIRECTORY_OK=1
20
27
. " $( git --exec-path) /git-sh-setup"
21
28
22
29
parallel=
23
30
force=
24
31
clean=
32
+ from_program=
33
+ to_program=
34
+ cut_header_footer=
25
35
while test $# -gt 0
26
36
do
27
37
case " $1 " in
31
41
clean=t ;;
32
42
-f)
33
43
force=t ;;
44
+ --from-asciidoctor)
45
+ from_program=-asciidoctor ;;
46
+ --to-asciidoctor)
47
+ to_program=-asciidoctor ;;
48
+ --asciidoctor)
49
+ from_program=-asciidoctor
50
+ to_program=-asciidoctor ;;
51
+ --from-asciidoc)
52
+ from_program=-asciidoc ;;
53
+ --to-asciidoc)
54
+ to_program=-asciidoc ;;
55
+ --asciidoc)
56
+ from_program=-asciidoc
57
+ to_program=-asciidoc ;;
58
+ --cut-header-footer)
59
+ cut_header_footer=-cut-header-footer ;;
34
60
--)
35
61
shift ; break ;;
36
62
* )
79
105
ln -s " $dots /config.mak" " $tmp /worktree/config.mak"
80
106
fi
81
107
108
+ construct_makemanflags () {
109
+ if test " $1 " = " -asciidoc"
110
+ then
111
+ echo USE_ASCIIDOCTOR=
112
+ elif test " $1 " = " -asciidoctor"
113
+ then
114
+ echo USE_ASCIIDOCTOR=YesPlease
115
+ fi
116
+ }
117
+
118
+ from_makemanflags=$( construct_makemanflags " $from_program " ) &&
119
+ to_makemanflags=$( construct_makemanflags " $to_program " ) &&
120
+
121
+ from_dir=$from_oid$from_program$cut_header_footer &&
122
+ to_dir=$to_oid$to_program$cut_header_footer &&
123
+
82
124
# generate_render_makefile <srcdir> <dstdir>
83
125
generate_render_makefile () {
84
126
find " $1 " -type f |
@@ -94,36 +136,52 @@ generate_render_makefile () {
94
136
done
95
137
}
96
138
97
- # render_tree <committish_oid>
139
+ # render_tree <committish_oid> <directory_name> <makemanflags>
98
140
render_tree () {
99
141
# Skip install-man entirely if we already have an installed directory.
100
142
# We can't rely on make here, since "install-man" unconditionally
101
143
# copies the files (spending effort, but also updating timestamps that
102
144
# we then can't rely on during the render step). We use "mv" to make
103
145
# sure we don't get confused by a previous run that failed partway
104
146
# through.
105
- if ! test -d " $tmp /installed/$1 "
147
+ oid=$1 &&
148
+ dname=$2 &&
149
+ makemanflags=$3 &&
150
+ if ! test -d " $tmp /installed/$dname "
106
151
then
107
- git -C " $tmp /worktree" checkout --detach " $1 " &&
152
+ git -C " $tmp /worktree" checkout --detach " $oid " &&
108
153
make -j$parallel -C " $tmp /worktree" \
154
+ $makemanflags \
109
155
GIT_VERSION=omitted \
110
156
SOURCE_DATE_EPOCH=0 \
111
- DESTDIR=" $tmp /installed/$1 +" \
157
+ DESTDIR=" $tmp /installed/$dname +" \
112
158
install-man &&
113
- mv " $tmp /installed/$1 +" " $tmp /installed/$1 "
159
+ mv " $tmp /installed/$dname +" " $tmp /installed/$dname "
114
160
fi &&
115
161
116
162
# As with "installed" above, we skip the render if it's already been
117
163
# done. So using make here is primarily just about running in
118
164
# parallel.
119
- if ! test -d " $tmp /rendered/$1 "
165
+ if ! test -d " $tmp /rendered/$dname "
120
166
then
121
- generate_render_makefile " $tmp /installed/$1 " " $tmp /rendered/$1 +" |
167
+ generate_render_makefile " $tmp /installed/$dname " \
168
+ " $tmp /rendered/$dname +" |
122
169
make -j$parallel -f - &&
123
- mv " $tmp /rendered/$1 +" " $tmp /rendered/$1 "
170
+ mv " $tmp /rendered/$dname +" " $tmp /rendered/$dname "
171
+
172
+ if test " $cut_header_footer " = " -cut-header-footer"
173
+ then
174
+ for f in $( find " $tmp /rendered/$dname " -type f)
175
+ do
176
+ tail -n +3 " $f " | head -n -2 |
177
+ sed -e ' 1{/^$/d}' -e ' ${/^$/d}' > " $f +" &&
178
+ mv " $f +" " $f " ||
179
+ return 1
180
+ done
181
+ fi
124
182
fi
125
183
}
126
184
127
- render_tree $from_oid &&
128
- render_tree $to_oid &&
129
- git -C $tmp /rendered diff --no-index " $@ " $from_oid $to_oid
185
+ render_tree $from_oid $from_dir $from_makemanflags &&
186
+ render_tree $to_oid $to_dir $to_makemanflags &&
187
+ git -C $tmp /rendered diff --no-index " $@ " $from_dir $to_dir
0 commit comments