From: Stefano Lattarini Date: Fri, 9 Dec 2011 17:46:54 +0000 (+0100) Subject: devel: help in comparing Makefile.in from different commits X-Git-Tag: v1.11.2b~18^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f60ca932334699a765d2b51432f9533dcc9e0807;p=thirdparty%2Fautomake.git devel: help in comparing Makefile.in from different commits Now that the generated Makefile.in, configure and aclocal.m4 files are no longer committed in Automake's git repository, a simple "git diff" or "git log" no longer shows if and how a change in Automake results in changes to the Makefile.in files and/or configure script of its own build system. Still, the ability to peek so easily at such differences has proved itself quite useful in the past, often revealing inconsistencies and blunders, and sometimes even bugs; so it would be a pity to lose that altogether. With this change, we add a new maintainer recipe that re-introduces much of that capability, by generating and comparing on the fly the Makefile.in, configure and aclocal.m4 derived from two arbitrary commits of the Automake repository. * Makefile.am (autodiffs, compare-autodiffs): New phony targets. --- diff --git a/ChangeLog b/ChangeLog index 4fbdef125..44c4444a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2011-12-22 Stefano Lattarini + + devel: help in comparing Makefile.in from different commits + Now that the generated Makefile.in, configure and aclocal.m4 files + are no longer committed in Automake's git repository, a simple + "git diff" or "git log" no longer shows if and how a change in + Automake results in changes to the Makefile.in files and/or + configure script of its own build system. Still, the ability to + peek so easily at such differences has proved itself quite useful + in the past, often revealing inconsistencies and blunders, and + sometimes even bugs; so it would be a pity to lose that altogether. + With this change, we add a new maintainer recipe that re-introduces + much of that capability, by generating and comparing on the fly the + Makefile.in, configure and aclocal.m4 derived from two arbitrary + commits of the Automake repository. + * Makefile.am (autodiffs, compare-autodiffs): New phony targets. + 2011-12-22 Stefano Lattarini repo: don't commit generated files in the git repository anymore diff --git a/Makefile.am b/Makefile.am index d0dc846d4..b29092510 100644 --- a/Makefile.am +++ b/Makefile.am @@ -606,6 +606,75 @@ path-check: distdir rm -rf $(distdir); \ exit $$estatus +## Visually comparing differences between the Makefile.in files in +## automake's own build system as generated in two different branches +## might help to catch bugs and blunders. This has already happened a +## few times in the past, when we used to version-control Makefile.in. +autodiffs: + @set -u; \ + NEW_COMMIT=$${NEW_COMMIT-"HEAD"}; \ + OLD_COMMIT=$${OLD_COMMIT-"HEAD~1"}; \ + am_gitdir='$(abs_top_srcdir)/.git'; \ + get_autofiles_from_rev () \ + { \ + rev=$$1 dir=$$2 \ + && echo "$@: will get files from revision $$rev" \ + && git clone -q --depth 1 "$$am_gitdir" tmp \ + && cd tmp \ + && git checkout -q "$$rev" \ + && echo "$@: bootstrapping $$rev" \ + && $(SHELL) ./bootstrap \ + && echo "$@: copying files from $$rev" \ + && makefile_ins=`find . -name Makefile.in` \ + && (tar cf - configure aclocal.m4 $$makefile_ins) | \ + (cd .. && cd "$$dir" && tar xf -) \ + && cd .. \ + && rm -rf tmp; \ + }; \ + outdir=$@.dir \ +## Before proceeding, ensure the specified revisions truly exist. + && git --git-dir="$$am_gitdir" describe $$OLD_COMMIT >/dev/null \ + && git --git-dir="$$am_gitdir" describe $$NEW_COMMIT >/dev/null \ + && rm -rf $$outdir \ + && mkdir $$outdir \ + && cd $$outdir \ + && mkdir new old \ + && get_autofiles_from_rev $$OLD_COMMIT old \ + && get_autofiles_from_rev $$NEW_COMMIT new \ + && exit 0 +## With lots of eye candy; we like our developers pampered and spoiled :-) +compare-autodiffs: autodiffs + @set -u; \ + : $${COLORDIFF=colordiff} $${DIFF=diff}; \ + dir=autodiffs.dir; \ + if test ! -d "$$dir"; then \ + echo "$@: $$dir: Not a directory" >&2; \ + exit 1; \ + fi; \ + mydiff=false mypager=false; \ + if test -t 1; then \ + if ($$COLORDIFF -r . .) /dev/null 2>&1; then \ + mydiff=$$COLORDIFF; \ + mypager="less -R"; \ + else \ + mypager=less; \ + fi; \ + else \ + mypager=cat; \ + fi; \ + if test "$$mydiff" = false; then \ + if ($$DIFF -r -u . .); then \ + mydiff=$$DIFF; \ + else \ + echo "$@: no good-enough diff program specified" >&2; \ + exit 1; \ + fi; \ + fi; \ + st=0; $$mydiff -r -u $$dir/old $$dir/new | $$mypager || st=$$?; \ + rm -rf $$dir; \ + exit $$st +.PHONY: autodiffs compare-autodiffs + ## Program to use to fetch files. WGET = wget WGET_SV_CVS = $(WGET) http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/