automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] {maint} repo: don't commit generated files in the git reposi


From: Stefano Lattarini
Subject: Re: [PATCH] {maint} repo: don't commit generated files in the git repository anymore
Date: Fri, 9 Dec 2011 22:11:49 +0100
User-agent: KMail/1.13.7 (Linux/2.6.30-2-686; KDE/4.6.5; i686; ; )

Jim, thanks for the super-quick feedback!

On Friday 09 December 2011, Jim Meyering wrote:
> Stefano Lattarini wrote:
> > I went for a middle-ground solution (sorta), by having the differences
> > generated on-the-fly.  This entails a decise slowdown, which is
> > however absolutely bearable even on my slow desktop.  See the attached
> > patch.
> >
> > The code is a little more complicated than I'd like, but since this
> > is an optional, maintainer-only hack, with no impact on the build
> > system proper, that's not a big deal IMHO.
> 
> Hi Stefano,
> 
> That looks like a fine solution, though I haven't tried it yet.
>
I did for a few simple cases (on Linux), it seems to work fine.  Before
committing I'll try it out on Solaris and a BSD system as well.

> > What I'm not satisfied with is the explanation of the change I've given
> > in the ChangeLog entry, which seems cumbersome and confusing.  But I
> > haven't been able to come up with anything better so far :-(
> >
> > Comments and suggestions would be appreciated.
> ...
> > Subject: [PATCH] devel: help in comparing Makefile.in from different commits
> >

[SNIP] lots of suggestions I've followed.

> And all of that is duplicated in the ChangeLog file diffs below.
> 
> Are you interested in generating ChangeLog from git logs?
>
Absolutely, but that's for a later change.  Also, before going down that
road, I'd like to have a vim syntax file able to highlight GNU-like
ChangeLog syntax in git messages (so, without "date + author" lines and
without leading tabs).  I might hack one up myself as a "last resort",
but I'd rather steal something pre-existing :-)

> > diff --git a/Makefile.am b/Makefile.am
> > index 51eeb23..4e8d13e 100644
> > --- a/Makefile.am
> > +++ b/Makefile.am

[SNIP] more suggestions I've followed.

> > +## times in the past, when we used to keep the generated Makefile.in
> > +## committed into the automake's git repository.
> 
> s/the.*repository/version-control Makefile.in/
>
You mean "version-controlled Makefile.in"?
 
The updated patch is attached; note that I've also added a new small
explicative comment in the recipe of `autodiffs'.

Regards,
  Stefano
From bcfcc8a4589182367b24f40fe14df281807edb1f Mon Sep 17 00:00:00 2001
Message-Id: <address@hidden>
From: Stefano Lattarini <address@hidden>
Date: Fri, 9 Dec 2011 18:46:54 +0100
Subject: [PATCH] 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 had 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.
---
 ChangeLog   |   17 ++++++++++++++
 Makefile.am |   69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5c07354..99b1248 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2011-12-09  Stefano Lattarini  <address@hidden>
 
+       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 had 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-09  Stefano Lattarini  <address@hidden>
+
        repo: don't commit generated files in the git repository anymore
        It has been quite some time since autoconf and libtool have stopped
        committing the generated autotools files in their git repositories,
diff --git a/Makefile.am b/Makefile.am
index 51eeb23..b7fa29a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -604,6 +604,75 @@ path-check: distdir
          rm -rf $(distdir); \
          exit $$estatus
 
+## Visually comparing differences between the Makefile.in files in the
+## 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 keep 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; \
+        }; \
+        address@hidden \
+## 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 out 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 >/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~/
-- 
1.7.2.3


reply via email to

[Prev in Thread] Current Thread [Next in Thread]