@@ -12,16 +12,26 @@ OPTIONS_SPEC="\
1212doc-diff [options] <from> <to> [-- <diff-options>]
1313doc-diff (-c|--clean)
1414--
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
1825"
1926SUBDIRECTORY_OK=1
2027. " $( git --exec-path) /git-sh-setup"
2128
2229parallel=
2330force=
2431clean=
32+ from_program=
33+ to_program=
34+ cut_header_footer=
2535while test $# -gt 0
2636do
2737 case " $1 " in
3141 clean=t ;;
3242 -f)
3343 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 ;;
3460 --)
3561 shift ; break ;;
3662 * )
79105 ln -s " $dots /config.mak" " $tmp /worktree/config.mak"
80106fi
81107
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+
82124# generate_render_makefile <srcdir> <dstdir>
83125generate_render_makefile () {
84126 find " $1 " -type f |
@@ -94,36 +136,52 @@ generate_render_makefile () {
94136 done
95137}
96138
97- # render_tree <committish_oid>
139+ # render_tree <committish_oid> <directory_name> <makemanflags>
98140render_tree () {
99141 # Skip install-man entirely if we already have an installed directory.
100142 # We can't rely on make here, since "install-man" unconditionally
101143 # copies the files (spending effort, but also updating timestamps that
102144 # we then can't rely on during the render step). We use "mv" to make
103145 # sure we don't get confused by a previous run that failed partway
104146 # through.
105- if ! test -d " $tmp /installed/$1 "
147+ oid=$1 &&
148+ dname=$2 &&
149+ makemanflags=$3 &&
150+ if ! test -d " $tmp /installed/$dname "
106151 then
107- git -C " $tmp /worktree" checkout --detach " $1 " &&
152+ git -C " $tmp /worktree" checkout --detach " $oid " &&
108153 make -j$parallel -C " $tmp /worktree" \
154+ $makemanflags \
109155 GIT_VERSION=omitted \
110156 SOURCE_DATE_EPOCH=0 \
111- DESTDIR=" $tmp /installed/$1 +" \
157+ DESTDIR=" $tmp /installed/$dname +" \
112158 install-man &&
113- mv " $tmp /installed/$1 +" " $tmp /installed/$1 "
159+ mv " $tmp /installed/$dname +" " $tmp /installed/$dname "
114160 fi &&
115161
116162 # As with "installed" above, we skip the render if it's already been
117163 # done. So using make here is primarily just about running in
118164 # parallel.
119- if ! test -d " $tmp /rendered/$1 "
165+ if ! test -d " $tmp /rendered/$dname "
120166 then
121- generate_render_makefile " $tmp /installed/$1 " " $tmp /rendered/$1 +" |
167+ generate_render_makefile " $tmp /installed/$dname " \
168+ " $tmp /rendered/$dname +" |
122169 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
124182 fi
125183}
126184
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