summaryrefslogtreecommitdiff
path: root/build-aux/gitlog-to-changelog
diff options
context:
space:
mode:
authorAkim Demaille <akim@lrde.epita.fr>2012-07-29 08:46:55 +0200
committerAkim Demaille <akim@lrde.epita.fr>2012-07-29 13:21:03 +0200
commite91cb2e5c0d63e19918b18e1624afd9420dccc27 (patch)
treec689e0d500d422050d61fd32d6feb13925f5bdbe /build-aux/gitlog-to-changelog
parentf5599c804c70b18a1fa717b3c42a520a6649dbf2 (diff)
downloadgnulib-e91cb2e5c0d63e19918b18e1624afd9420dccc27.tar.gz
gitlog-to-changelog: don't expect .git to be in $srcdir
Reported by Bruno Haible. <http://lists.gnu.org/archive/html/bug-gnulib/2012-07/msg00265.html> * build-aux/gitlog-to-changelog (&git_dir_option): New. Use it.
Diffstat (limited to 'build-aux/gitlog-to-changelog')
-rwxr-xr-xbuild-aux/gitlog-to-changelog31
1 files changed, 28 insertions, 3 deletions
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index d79e7aa94d..60e1c39e17 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
if 0;
# Convert git log output to ChangeLog format.
-my $VERSION = '2012-07-16 18:34'; # UTC
+my $VERSION = '2012-07-29 06:11'; # 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
@@ -68,7 +68,8 @@ OPTIONS:
header; the default is to cluster adjacent commit messages
if their headers are the same and neither commit message
contains multiple paragraphs.
- --srcdir=DIR the root of the source tree, containing the '.git' directory.
+ --srcdir=DIR the root of the source tree, from which the .git/
+ directory can be derived.
--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;
@@ -193,6 +194,30 @@ sub parse_amend_file($)
return $h;
}
+# git_dir_option $SRCDIR
+#
+# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
+# is undef). Return as a list (0 or 1 element).
+sub git_dir_option($)
+{
+ my ($srcdir) = @_;
+ my @res = ();
+ if (defined $srcdir)
+ {
+ my $qdir = shell_quote $srcdir;
+ my $cmd = "cd $qdir && git rev-parse --show-toplevel";
+ my $qcmd = shell_quote $cmd;
+ my $git_dir = qx($cmd);
+ defined $git_dir
+ or die "$ME: cannot run $qcmd: $!\n";
+ $? != 0
+ or die "$ME: $qcmd had unexpected exit code or signal ($?)\n"
+ chomp $git_dir;
+ push @res, "--git-dir=$git_dir/.git";
+ }
+ @res;
+}
+
{
my $since_date;
my $format_string = '%s%n%b%n';
@@ -224,7 +249,7 @@ sub parse_amend_file($)
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
my @cmd = ('git',
- defined $srcdir ? ("--git-dir=$srcdir/.git") : (),
+ git_dir_option $srcdir,
qw(log --log-size),
'--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
open PIPE, '-|', @cmd