+2024-07-03 Collin Funk <collin.funk1@gmail.com>
+
+ gitlog-to-changelog: Add a new --commit-timezone option.
+ * build-aux/gitlog-to-changelog: Use the date given in the commit time
+ zone if --commit-timezone is used.
+ (usage): Mention the new option.
+ * doc/gitlog-to-changelog.texi (gitlog-to-changelog): Mention the
+ --commit-timezone and add an invocation example. Add example of date
+ ordering that may be undesired.
+
2024-07-03 Jim Meyering <meyering@meta.com>
maintainer-makefile: derive VERSION from RELEASE only from command line
eval 'exec perl -wSx "$0" "$@"'
if 0;
-my $VERSION = '2023-06-24 21:59'; # UTC
+my $VERSION = '2024-07-04 04:42'; # 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
--strip-cherry-pick remove data inserted by "git cherry-pick";
this includes the "cherry picked from commit ..." line,
and the possible final "Conflicts:" paragraph.
+ --commit-timezone use dates respecting the timezone commits were made in.
--help display this help and exit
--version output version information and exit
my $ignore_line;
my $strip_tab = 0;
my $strip_cherry_pick = 0;
+ my $commit_timezone = 0;
my $srcdir;
GetOptions
(
'ignore-line=s' => \$ignore_line,
'strip-tab' => \$strip_tab,
'strip-cherry-pick' => \$strip_cherry_pick,
+ 'commit-timezone' => \$commit_timezone,
'srcdir=s' => \$srcdir,
) or usage 1;
# that makes a correction in the log or attribution of that commit.
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+ my $commit_time_format = $commit_timezone ? '%cI' : '%ct';
my @cmd = ('git',
git_dir_option $srcdir,
qw(log --log-size),
- '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
+ ("--pretty=format:%H:$commit_time_format"
+ . ' %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 $author_line = shift @line;
defined $author_line
or die "$ME:$.: unexpected EOF\n";
- $author_line =~ /^(\d+) (.*>)$/
+ $author_line =~ /^(\S+) (.*>)$/
or die "$ME:$.: Invalid line "
. "(expected date/author/email):\n$author_line\n";
+ # Author <email>
+ my $author = $2;
+
+ my $commit_date = $1;
+ if (! $commit_timezone)
+ {
+ # Seconds since the Epoch.
+ $commit_date = strftime "%Y-%m-%d", localtime ($commit_date);
+ }
+ else
+ {
+ # ISO 8601 date.
+ $commit_date =~ s/T.*$//;
+ }
+
# Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
# '(tiny change)' annotation.
my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line)
? ' (tiny change)' : '');
- my $date_line = sprintf "%s %s$tiny\n",
- strftime ("%Y-%m-%d", localtime ($1)), $2;
+ my $date_line = "$commit_date $author$tiny\n";
my @coauthors = grep /^Co-authored-by:.*$/, @line;
# Omit meta-data lines we've already interpreted.
depend on the developer's locale and time zone. Omit this line if you
prefer @file{ChangeLog} files that depend on these developer settings.
+If you wish to output the @file{ChangeLog} with dates respecting the
+time zone each individual commit was made in you can use the
+@option{--commit-timezone} option. For example:
+
+@example
+dist-hook: gen-ChangeLog
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ $(AM_V_GEN)if test -e .git; then \
+ $(top_srcdir)/build-aux/gitlog-to-changelog --commit-timezone \
+ > $(distdir)/ChangeLog.tmp && \
+ mv -f $(distdir)/ChangeLog.tmp $(distdir)/ChangeLog; \
+ fi
+@end example
+
+The use of @option{--commit-timezone} means that @file{ChangeLog} dates
+correctly represent when a committer pushed a change according to their
+time zone. However, as a consequence @file{ChangeLog} dates will no
+longer be monotonically increasing. This behavior may be undesired,
+especially when developers are spread across many different time zones.
+For example, the following three commits were made in a short period of
+time across two different time zones:
+
+@example
+2024-06-19 Bruno Haible <bruno@@clisp.org>
+
+ filemode tests: Tweak.
+ * tests/test-filemode.c: Update comment.
+ * modules/filemode-tests (Depends-on): Add unistd.
+
+2024-06-18 Collin Funk <collin.funk1@@gmail.com>
+
+ filemode: Add tests.
+ * modules/filemode-tests: New file.
+ * tests/test-filemode.c: New file.
+
+2024-06-19 Bruno Haible <bruno@@clisp.org>
+
+ copysignl tests: Avoid failure on Solaris 11.4.
+ * tests/test-copysignl.c: Include <float.h>.
+ (LDBL_BYTES): New macro.
+ (main): Use it instead of sizeof (long double).
+ * modules/copysignl-tests (Depends-on): Add float.
+@end example
+
If you wish to limit the @file{ChangeLog} entries (perhaps for size
issues) to contain only entries since a particular git tag, you can
use a @code{gen-ChangeLog} rule like the following: