automake-commit
[Top][All Lists]
Advanced

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

[Automake-commit] [SCM] GNU Automake branch, maint, updated. v1.11-601-g


From: Stefano Lattarini
Subject: [Automake-commit] [SCM] GNU Automake branch, maint, updated. v1.11-601-g77b2c71
Date: Tue, 27 Dec 2011 18:43:26 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Automake".

http://git.sv.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=77b2c71c376f45b51a0e41774ab0e3cdf8d17932

The branch, maint has been updated
       via  77b2c71c376f45b51a0e41774ab0e3cdf8d17932 (commit)
       via  6c9aa32580c5f98ba05eeb95088b98349afa422b (commit)
       via  44da9cbd7dbbdb858d11e8dcdf213c32be7e333c (commit)
      from  b1b43854dfcb2419bfd5c725aebc42b866374b75 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 77b2c71c376f45b51a0e41774ab0e3cdf8d17932
Author: Stefano Lattarini <address@hidden>
Date:   Tue Dec 27 19:31:03 2011 +0100

    tests: drop unnecessary requirement in 'subpkg.test'
    
    * tests/subpkg.test ($required): Drop "bison", it is not required
    anymore since commit `v1.11-502-g7e5ae80'.

commit 6c9aa32580c5f98ba05eeb95088b98349afa422b
Author: Stefano Lattarini <address@hidden>
Date:   Tue Dec 27 19:12:46 2011 +0100

    gitlog-to-changelog: new auxiliary script, synced from gnulib
    
    We have plans to stop maintaining a version-controlled ChangeLog
    file in the Automake repository, and instead begin to generate it
    automatically from the git log messages.  To do so, we will use
    the `gitlog-to-changelog' script from gnulib.
    
    * lib/gitlog-to-changelog: New, synced from gnulib.
    * Makefile.am (fetch): Fetch and sync it.
    * lib/Makefile.am (EXTRA_DIST): Distribute it.

commit 44da9cbd7dbbdb858d11e8dcdf213c32be7e333c
Author: Stefano Lattarini <address@hidden>
Date:   Tue Dec 27 14:55:41 2011 +0100

    docs: "aclocal --install -I /abs/dir" actually copies files
    
    This change is for automake bug#8407.
    
    In the past, there had been some debate and confusion about
    whether "aclocal --install" should copy third-party .m4 files
    in the first directory passed to the `-I' option even when
    such directory was given as an absolute path, or whether it
    was better to do so only for directories specified with a
    relative path.
    
    The rationale for this latter behaviour was that, before the
    existence of the `ACLOCAL_PATH' variable, the only way (a poor
    way, I might add) for a common user to extend the search path
    of a system-wide installation of aclocal was to export something
    like ACLOCAL="aclocal -I /my/extra/macros" in the environment.
    Today, the correct way to proceed is undoubtedly through the
    use of ACLOCAL_PATH, so we can settle the question once and for
    all, and start verifying the correct behaviour of `-I' with a
    new test.
    
    * tests/aclocal-install-absdir.test: New test.
    * tests/Makefile.am (TESTS): Add it.
    * doc/automake.texi (aclocal Options): Be more explicit about
    this part of `--install' semantics.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   47 +++
 Makefile.am                                        |    1 +
 doc/automake.texi                                  |    2 +
 lib/Makefile.am                                    |    2 +-
 lib/gitlog-to-changelog                            |  353 ++++++++++++++++++++
 tests/Makefile.am                                  |    1 +
 ...onexistent.test => aclocal-install-absdir.test} |   21 +-
 tests/subpkg.test                                  |    2 +-
 8 files changed, 416 insertions(+), 13 deletions(-)
 create mode 100755 lib/gitlog-to-changelog
 copy tests/{aclocal-path-nonexistent.test => aclocal-install-absdir.test} (59%)
 mode change 100755 => 100644

diff --git a/ChangeLog b/ChangeLog
index 412d4d6..ab99cd3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+2011-12-27  Stefano Lattarini  <address@hidden>
+
+       tests: drop unnecessary in 'subpkg.test'
+       * tests/subpkg.test ($required): Drop "bison", it is not required
+       anymore since commit `v1.11-502-g7e5ae80'.
+
+2011-12-27  Stefano Lattarini  <address@hidden>
+
+       gitlog-to-changelog: new auxiliary script, synced from gnulib
+
+       We have plans to stop maintaining a version-controlled ChangeLog
+       file in the Automake repository, and instead begin to generate it
+       automatically from the git log messages.  To do so, we will use
+       the `gitlog-to-changelog' script from gnulib.
+
+       * lib/gitlog-to-changelog: New, synced from gnulib.
+       * Makefile.am (fetch): Fetch and sync it.
+       * lib/Makefile.am (EXTRA_DIST): Distribute it.
+
+2011-12-27  Stefano Lattarini  <address@hidden>
+
+       docs: "aclocal --install -I /abs/dir" actually copies files
+
+       This change is for automake bug#8407.
+
+       In the past, there had been some debate and confusion about
+       whether "aclocal --install" should copy third-party .m4 files
+       in the first directory passed to the `-I' option even when
+       such directory was given as an absolute path, or whether it
+       was better to do so only for directories specified with a
+       relative path.
+
+       The rationale for this latter behaviour was that, before the
+       existence of the `ACLOCAL_PATH' variable, the only way (a poor
+       way, I might add) for a common user to extend the search path
+       of a system-wide installation of aclocal was to export something
+       like ACLOCAL="aclocal -I /my/extra/macros" in the environment.
+       Today, the correct way to proceed is undoubtedly through the
+       use of ACLOCAL_PATH, so we can settle the question once and for
+       all, and start verifying the correct behaviour of `-I' with a
+       new test.
+
+       * tests/aclocal-install-absdir.test: New test.
+       * tests/Makefile.am (TESTS): Add it.
+       * doc/automake.texi (aclocal Options): Be more explicit about
+       this part of `--install' semantics.
+
 2011-12-26  Stefano Lattarini  <address@hidden>
 
        docs: fix node names for automake and aclocal invocations
diff --git a/Makefile.am b/Makefile.am
index bb7b322..acb7228 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -704,6 +704,7 @@ fetch:
        $(WGET_SV_GIT_CF)config.sub -O config.sub && \
        $(WGET_SV_CVS)texinfo/texinfo/doc/texinfo.tex -O texinfo.tex && \
        $(WGET_SV_GIT_GL)doc/INSTALL -O INSTALL && \
+       $(WGET_SV_GIT_GL)build-aux/gitlog-to-changelog -O gitlog-to-changelog 
&& \
        $(WGET_GCC)config-ml.in -O config-ml.in && \
        $(WGET_GCC)symlink-tree -O symlink-tree)
 ## Don't exit after test because we want to give as many errors as
diff --git a/doc/automake.texi b/doc/automake.texi
index 3151620..86879d1 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -3224,6 +3224,8 @@ Add the directory @var{dir} to the list of directories 
searched for
 Install system-wide third-party macros into the first directory
 specified with @samp{-I @var{dir}} instead of copying them in the
 output file.
address@hidden The following semantics is checked by 
`aclocal-install-absdir.test'.
+Note that this will happen also if @var{dir} is an absolute path.
 
 @cindex serial number and @option{--install}
 When this option is used, and only when this option is used,
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 627368d..4102828 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -30,7 +30,7 @@ dist_script_DATA = config.guess config.sub install-sh 
mdate-sh missing \
   mkinstalldirs elisp-comp ylwrap acinstall depcomp compile py-compile \
   symlink-tree
 
-EXTRA_DIST = gnupload
+EXTRA_DIST = gnupload gitlog-to-changelog
 
 install-data-hook:
        @$(POST_INSTALL)
diff --git a/lib/gitlog-to-changelog b/lib/gitlog-to-changelog
new file mode 100755
index 0000000..ee1ac87
--- /dev/null
+++ b/lib/gitlog-to-changelog
@@ -0,0 +1,353 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2011-12-24 18:51'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2011 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try `$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format.  If present, any ARGS
+are passed to "git log".  To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+   --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+                  makes a change to SHA1's commit log text or metadata.
+   --append-dot append a dot to the first line of each commit message if
+                  there is no other punctuation or blank at the end.
+   --since=DATE convert only the logs since DATE;
+                  the default is to convert all log entries.
+   --format=FMT set format string for commit subject and body;
+                  see 'man git-log' for the list of format metacharacters;
+                  the default is '%s%n%b%n'
+
+   --help       display this help and exit
+   --version    output version information and exit
+
+EXAMPLE:
+
+  $ME --since=2008-01-01 > ChangeLog
+  $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code.  Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul.  Note the escaped "@":
+s,Jim .*>,Paul Eggert <address@hidden>,
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new 
string.
+sub shell_quote($)
+{
+  my ($s) = @_;
+  if ($s =~ m![^\w+/.,-]!)
+    {
+      # Convert each single quote to '\''
+      $s =~ s/\'/\'\\\'\'/g;
+      # Then single quote the string.
+      $s = "'$s'";
+    }
+  return $s;
+}
+
+sub quoted_cmd(@)
+{
+  return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+  my ($f) = @_;
+
+  open F, '<', $f
+    or die "$ME: $f: failed to open for reading: $!\n";
+
+  my $fail;
+  my $h = {};
+  my $in_code = 0;
+  my $sha;
+  while (defined (my $line = <F>))
+    {
+      $line =~ /^\#/
+        and next;
+      chomp $line;
+      $line eq ''
+        and $in_code = 0, next;
+
+      if (!$in_code)
+        {
+          $line =~ /^([0-9a-fA-F]{40})$/
+            or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+              $fail = 1, next;
+          $sha = lc $1;
+          $in_code = 1;
+          exists $h->{$sha}
+            and (warn "$ME: $f:$.: duplicate SHA1\n"),
+              $fail = 1, next;
+        }
+      else
+        {
+          $h->{$sha} ||= '';
+          $h->{$sha} .= "$line\n";
+        }
+    }
+  close F;
+
+  $fail
+    and exit 1;
+
+  return $h;
+}
+
+{
+  my $since_date;
+  my $format_string = '%s%n%b%n';
+  my $amend_file;
+  my $append_dot = 0;
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     'since=s' => \$since_date,
+     'format=s' => \$format_string,
+     'amend=s' => \$amend_file,
+     'append-dot' => \$append_dot,
+    ) or usage 1;
+
+
+  defined $since_date
+    and unshift @ARGV, "--since=$since_date";
+
+  # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+  # that makes a correction in the log or attribution of that commit.
+  my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+  my @cmd = (qw (git log --log-size),
+             '--pretty=format:%H:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
+  open PIPE, '-|', @cmd
+    or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n"
+            . "(Is your Git too old?  Version 1.5.1 or later is required.)\n");
+
+  my $prev_multi_paragraph;
+  my $prev_date_line = '';
+  my @prev_coauthors = ();
+  while (1)
+    {
+      defined (my $in = <PIPE>)
+        or last;
+      $in =~ /^log size (\d+)$/
+        or die "$ME:$.: Invalid line (expected log size):\n$in";
+      my $log_nbytes = $1;
+
+      my $log;
+      my $n_read = read PIPE, $log, $log_nbytes;
+      $n_read == $log_nbytes
+        or die "$ME:$.: unexpected EOF\n";
+
+      # Extract leading hash.
+      my ($sha, $rest) = split ':', $log, 2;
+      defined $sha
+        or die "$ME:$.: malformed log entry\n";
+      $sha =~ /^[0-9a-fA-F]{40}$/
+        or die "$ME:$.: invalid SHA1: $sha\n";
+
+      # If this commit's log requires any transformation, do it now.
+      my $code = $amend_code->{$sha};
+      if (defined $code)
+        {
+          eval 'use Safe';
+          my $s = new Safe;
+          # Put the unpreprocessed entry into "$_".
+          $_ = $rest;
+
+          # Let $code operate on it, safely.
+          my $r = $s->reval("$code")
+            or die "$ME:$.:$sha: failed to eval \"$code\":address@hidden";
+
+          # Note that we've used this entry.
+          delete $amend_code->{$sha};
+
+          # Update $rest upon success.
+          $rest = $_;
+        }
+
+      my @line = split "\n", $rest;
+      my $author_line = shift @line;
+      defined $author_line
+        or die "$ME:$.: unexpected EOF\n";
+      $author_line =~ /^(\d+)  (.*>)$/
+        or die "$ME:$.: Invalid line "
+          . "(expected date/author/email):\n$author_line\n";
+      my $date_line = sprintf "%s  $2\n", strftime ("%F", localtime ($1));
+
+      my @coauthors = grep /^Co-authored-by:.*$/, @line;
+      # Omit "Co-authored-by..." and "Signed-off-by..." lines.
+      @line = grep !/^Signed-off-by: .*>$/, @line;
+      @line = grep !/^Co-authored-by: /, @line;
+
+      # Remove leading and trailing blank lines.
+      if (@line)
+        {
+          while ($line[0] =~ /^\s*$/) { shift @line; }
+          while ($line[$#line] =~ /^\s*$/) { pop @line; }
+        }
+
+      # Record whether there are two or more paragraphs.
+      my $multi_paragraph = grep /^\s*$/, @line;
+
+      # Format 'Co-authored-by: A U Thor <address@hidden>' lines in
+      # standard multi-author ChangeLog format.
+      for (@coauthors)
+        {
+          s/^Co-authored-by:\s*/\t    /;
+          s/\s*</  </;
+
+          /<address@hidden>/
+            or warn "$ME: warning: missing email address for "
+              . substr ($_, 5) . "\n";
+        }
+
+      # If this header would be different from the previous date/name/email/
+      # coauthors header, or if this or the previous entry consists of two
+      # or more paragraphs, then print the header.
+      if ($date_line ne $prev_date_line
+          or "@coauthors" ne "@prev_coauthors"
+          or $multi_paragraph
+          or $prev_multi_paragraph)
+        {
+          $prev_date_line eq ''
+            or print "\n";
+          print $date_line;
+          @coauthors
+            and print join ("\n", @coauthors), "\n";
+        }
+      $prev_date_line = $date_line;
+      @prev_coauthors = @coauthors;
+      $prev_multi_paragraph = $multi_paragraph;
+
+      # If there were any lines
+      if (@line == 0)
+        {
+          warn "$ME: warning: empty commit message:\n  $date_line\n";
+        }
+      else
+        {
+          if ($append_dot)
+            {
+              # If the first line of the message has enough room, then
+              if (length $line[0] < 72)
+                {
+                  # append a dot if there is no other punctuation or blank
+                  # at the end.
+                  $line[0] =~ /[[:punct:]\s]$/
+                    or $line[0] .= '.';
+                }
+            }
+
+          # Prefix each non-empty line with a TAB.
+          @line = map { length $_ ? "\t$_" : '' } @line;
+
+          print "\n", join ("\n", @line), "\n";
+        }
+
+      defined ($in = <PIPE>)
+        or last;
+      $in ne "\n"
+        and die "$ME:$.: unexpected line:\n$in";
+    }
+
+  close PIPE
+    or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+  # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+  # Complain about any unused entry in the --amend=F specified file.
+  my $fail = 0;
+  foreach my $sha (keys %$amend_code)
+    {
+      warn "$ME:$amend_file: unused entry: $sha\n";
+      $fail = 1;
+    }
+
+  exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 5ac0e48..6ce7c53 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -78,6 +78,7 @@ acloca20.test \
 acloca21.test \
 acloca22.test \
 aclocal-acdir.test \
+aclocal-install-absdir.test \
 aclocal-print-acdir.test \
 aclocal-path.test \
 aclocal-path-install.test \
diff --git a/tests/aclocal-path-nonexistent.test 
b/tests/aclocal-install-absdir.test
old mode 100755
new mode 100644
similarity index 59%
copy from tests/aclocal-path-nonexistent.test
copy to tests/aclocal-install-absdir.test
index e1157a1..1a642b5
--- a/tests/aclocal-path-nonexistent.test
+++ b/tests/aclocal-install-absdir.test
@@ -14,23 +14,22 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Non-existent directories in ACLOCAL_PATH are ok.
+# Make sure "aclocal --install" install files also in directories
+# passed to `-I' as absolute paths.  Now that we support the
+# ACLOCAL_PATH variable, it is clear that this is the right thing
+# to do.  See also automake bug#8407.
 
-am_create_testdir=empty
 . ./defs || Exit 1
 
 set -e
 
-cat > configure.in << 'END'
-AC_INIT
-AM_FOO
-END
+mkdir loc sys
 
-mkdir mdir
-echo 'AC_DEFUN([AM_FOO], [am--foo])' > mdir/foo.m4
+echo 'AM_DUMMY_MACRO' >> configure.in
+echo 'AC_DEFUN([AM_DUMMY_MACRO], [:])' >> sys/foo.m4
 
-ACLOCAL_PATH=./nonesuch:./mdir:`pwd`/nonesuch2:nonesuch3 $ACLOCAL
-$AUTOCONF
-$FGREP 'am--foo' configure
+cwd=`pwd` || fatal_ "cannot get current working directory"
+env ACLOCAL_PATH="$cwd/sys" $ACLOCAL --verbose --install -I "$cwd/loc"
+diff sys/foo.m4 loc/foo.m4
 
 :
diff --git a/tests/subpkg.test b/tests/subpkg.test
index f197ad4..579a0a4 100755
--- a/tests/subpkg.test
+++ b/tests/subpkg.test
@@ -16,7 +16,7 @@
 
 # Check subpackage handling.
 
-required='gcc bison'
+required=gcc
 . ./defs || Exit 1
 
 set -e


hooks/post-receive
-- 
GNU Automake



reply via email to

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