From: Paul Eggert <eggert@cs.ucla.edu>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 19113@debbugs.gnu.org
Subject: bug#19113: Generate a ChangeLog file from commit logs
Date: Tue, 25 Nov 2014 21:38:28 -0800 [thread overview]
Message-ID: <54756754.5090103@cs.ucla.edu> (raw)
In-Reply-To: <546E2899.4050702@cs.ucla.edu>
[-- Attachment #1: Type: text/plain, Size: 633 bytes --]
Paul Eggert wrote:
> combine the existing ChangeLogs (there is
> about 24 MB worth) into a single ChangeLog.1 file at the top level.
I implemented this, along with some other fixes (notably, getting a proper
copyright notice into the generated ChangeLog file), and am attaching the
corresponding patches. I would like to install this into the emacs-24 branch
and then merge that into the master.
There are three patches. Patches 1 and 3 are so large that I'm just attaching
summaries here. (Patch 1 is essentially the same as before.) You can get the
full patches temporarily from here:
http://cs.ucla.edu/~eggert/emacs/
[-- Attachment #2: 0001-Rename-old-ChangeLog-files-to-prepare-for-gitlog-to-.patch --]
[-- Type: text/x-diff, Size: 4876 bytes --]
From 000e1d91eebfae0049fc621cdea82650d9eb041e Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 18 Nov 2014 20:27:43 -0800
Subject: [PATCH 1/3] Rename old ChangeLog files to prepare for
gitlog-to-changelog.
---
ChangeLog | 13680 ------------------
ChangeLog.1 | 13680 ++++++++++++++++++
admin/ChangeLog | 2267 ---
admin/ChangeLog.1 | 2267 +++
doc/emacs/ChangeLog | 10750 ---------------
doc/emacs/ChangeLog.1 | 10750 +++++++++++++++
doc/lispintro/ChangeLog | 763 --
doc/lispintro/ChangeLog.1 | 763 ++
doc/lispref/ChangeLog | 13400 ------------------
doc/lispref/ChangeLog.1 | 13400 ++++++++++++++++++
doc/man/ChangeLog | 183 -
doc/man/ChangeLog.1 | 183 +
doc/misc/ChangeLog | 11781 ----------------
doc/misc/ChangeLog.1 | 11781 ++++++++++++++++
etc/ChangeLog | 6547 ---------
etc/ChangeLog.1 | 6547 +++++++++
leim/ChangeLog | 2557 ----
leim/ChangeLog.1 | 2557 ++++
lib-src/ChangeLog | 8258 -----------
lib-src/ChangeLog.1 | 8258 +++++++++++
lisp/ChangeLog | 16597 ----------------------
lisp/ChangeLog.17 | 16597 ++++++++++++++++++++++
lisp/cedet/ChangeLog | 3088 -----
lisp/cedet/ChangeLog.1 | 3088 +++++
lisp/erc/ChangeLog | 720 -
lisp/erc/ChangeLog.09 | 720 +
lisp/gnus/ChangeLog | 25527 ----------------------------------
lisp/gnus/ChangeLog.3 | 25527 ++++++++++++++++++++++++++++++++++
lisp/mh-e/ChangeLog | 3692 -----
lisp/mh-e/ChangeLog.2 | 3692 +++++
lisp/org/ChangeLog | 32802 --------------------------------------------
lisp/org/ChangeLog.1 | 32802 ++++++++++++++++++++++++++++++++++++++++++++
lisp/url/ChangeLog | 2970 ----
lisp/url/ChangeLog.1 | 2970 ++++
lwlib/ChangeLog | 1878 ---
lwlib/ChangeLog.1 | 1878 +++
msdos/ChangeLog | 1553 ---
msdos/ChangeLog.1 | 1553 +++
nextstep/ChangeLog | 299 -
nextstep/ChangeLog.1 | 299 +
nt/ChangeLog | 3443 -----
nt/ChangeLog.1 | 3443 +++++
oldXMenu/ChangeLog | 684 -
oldXMenu/ChangeLog.1 | 684 +
src/ChangeLog | 11241 ---------------
src/ChangeLog.13 | 11241 +++++++++++++++
test/ChangeLog | 1983 ---
test/ChangeLog.1 | 1983 +++
48 files changed, 176663 insertions(+), 176663 deletions(-)
delete mode 100644 ChangeLog
create mode 100644 ChangeLog.1
delete mode 100644 admin/ChangeLog
create mode 100644 admin/ChangeLog.1
delete mode 100644 doc/emacs/ChangeLog
create mode 100644 doc/emacs/ChangeLog.1
delete mode 100644 doc/lispintro/ChangeLog
create mode 100644 doc/lispintro/ChangeLog.1
delete mode 100644 doc/lispref/ChangeLog
create mode 100644 doc/lispref/ChangeLog.1
delete mode 100644 doc/man/ChangeLog
create mode 100644 doc/man/ChangeLog.1
delete mode 100644 doc/misc/ChangeLog
create mode 100644 doc/misc/ChangeLog.1
delete mode 100644 etc/ChangeLog
create mode 100644 etc/ChangeLog.1
delete mode 100644 leim/ChangeLog
create mode 100644 leim/ChangeLog.1
delete mode 100644 lib-src/ChangeLog
create mode 100644 lib-src/ChangeLog.1
delete mode 100644 lisp/ChangeLog
create mode 100644 lisp/ChangeLog.17
delete mode 100644 lisp/cedet/ChangeLog
create mode 100644 lisp/cedet/ChangeLog.1
delete mode 100644 lisp/erc/ChangeLog
create mode 100644 lisp/erc/ChangeLog.09
delete mode 100644 lisp/gnus/ChangeLog
create mode 100644 lisp/gnus/ChangeLog.3
delete mode 100644 lisp/mh-e/ChangeLog
create mode 100644 lisp/mh-e/ChangeLog.2
delete mode 100644 lisp/org/ChangeLog
create mode 100644 lisp/org/ChangeLog.1
delete mode 100644 lisp/url/ChangeLog
create mode 100644 lisp/url/ChangeLog.1
delete mode 100644 lwlib/ChangeLog
create mode 100644 lwlib/ChangeLog.1
delete mode 100644 msdos/ChangeLog
create mode 100644 msdos/ChangeLog.1
delete mode 100644 nextstep/ChangeLog
create mode 100644 nextstep/ChangeLog.1
delete mode 100644 nt/ChangeLog
create mode 100644 nt/ChangeLog.1
delete mode 100644 oldXMenu/ChangeLog
create mode 100644 oldXMenu/ChangeLog.1
delete mode 100644 src/ChangeLog
create mode 100644 src/ChangeLog.13
delete mode 100644 test/ChangeLog
create mode 100644 test/ChangeLog.1
[The actual patch is about 12 MB and is elided here.
The following shell commands implement the patch:
find * -name ChangeLog |
sed 's,.*,git mv & &.1,
s, lisp/ChangeLog\.1$, lisp/ChangeLog.17,
s, lisp/erc/ChangeLog\.1$, lisp/erc/ChangeLog.09,
s, lisp/gnus/ChangeLog\.1$, lisp/gnus/ChangeLog.3,
s, lisp/mh-e/ChangeLog\.1$, lisp/mh-e/ChangeLog.2,
s, src/ChangeLog\.1$, src/ChangeLog.13,' |
sh
git commit -am'Rename old ChangeLog files to prepare for gitlog-to-changelog.'
]
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-Generate-a-ChangeLog-file-from-commit-logs.patch --]
[-- Type: text/x-diff; name="0002-Generate-a-ChangeLog-file-from-commit-logs.patch", Size: 30747 bytes --]
From 26c6884d2ea40d4c04ceaeb4cf3462e73bb96f5c Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 19 Nov 2014 14:41:42 -0800
Subject: [PATCH 2/3] Generate a ChangeLog file from commit logs.
Instead of having a ChangeLog file or files in the repository,
generate the ChangeLog file automatically from the git commit
logs, as part of the process of making a distribution.
The new procedure has been tested with vc-dwim, and this
commit was generated by vc-dwim. Also, 'make dist woriks'.
However, I haven't tested other ways to create change log entries
nor have I tested the entire release process, and no doubt further
work is needed.
* .gitignore: Add ChangeLog.
* Makefile.in (gen_origin): New macro.
(gen-ChangeLog): New rule.
* admin/admin.el (make-manuals-dist--1):
Don't treat ChangeLog specially.
* admin/merge-gnulib (GNULIB_MODULES): Add gitlog-to-changelog.
* admin/notes/repo: Add note about vc-dwim.
* admin/admin.el (add-release-logs, make-manuals-dist--1):
* admin/make-tarball.txt, admin/notes/bugtracker:
* lisp/emacs-lisp/authors.el:
Add a FIXME comment.
* build-aux/gitlog-to-changelog: New file, from Gnulib.
* build-aux/gitlog-to-emacslog: New file.
* lisp/calendar/icalendar.el, lisp/gnus/deuglify.el:
* lisp/emacs-lisp/gulp.el, lwlib/README, make-dist:
Adjust to renamed old ChangeLog files.
* make-dist: Use 'make gen-ChangeLog' to build top-level
ChangeLog in the distribution.
---
.gitignore | 1 +
Makefile.in | 8 +
admin/admin.el | 9 +-
admin/make-tarball.txt | 4 +
admin/merge-gnulib | 2 +-
admin/notes/bugtracker | 3 +-
admin/notes/repo | 13 +-
build-aux/gitlog-to-changelog | 432 ++++++++++++++++++++++++++++++++++++++++++
build-aux/gitlog-to-emacslog | 48 +++++
lisp/calendar/icalendar.el | 4 +-
lisp/emacs-lisp/authors.el | 5 +-
lisp/emacs-lisp/gulp.el | 2 +-
lisp/gnus/deuglify.el | 2 +-
lwlib/README | 2 +-
make-dist | 26 ++-
15 files changed, 538 insertions(+), 23 deletions(-)
create mode 100755 build-aux/gitlog-to-changelog
create mode 100755 build-aux/gitlog-to-emacslog
diff --git a/.gitignore b/.gitignore
index 989bbb0..27f3e03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -230,6 +230,7 @@ info/dir
*.rej
*~
.#*
+ChangeLog
[0-9]*.patch
# Built by 'make install'.
diff --git a/Makefile.in b/Makefile.in
index 4391c2c..50477c8 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1100,6 +1100,14 @@ bootstrap: bootstrap-clean FRC
$(MAKE) $(MFLAGS) MAKEFILE_NAME=force-Makefile force-Makefile
$(MAKE) $(MFLAGS) info all
+# The first revision to appear in the generated ChangeLog.
+gen_origin = 000e1d91eebfae0049fc621cdea82650d9eb041e
+# Convert git commit log to ChangeLog file. make-dist uses this.
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ $(AM_V_GEN)distprefix=$(distprefix) srcprefix=$(srcdir)/ \
+ $(srcdir)/build-aux/gitlog-to-emacslog $(gen_origin)
+
.PHONY: check-declare
check-declare:
diff --git a/admin/admin.el b/admin/admin.el
index 48e083d..d3aa583 100644
--- a/admin/admin.el
+++ b/admin/admin.el
@@ -28,10 +28,9 @@
(defvar add-log-time-format) ; in add-log
-;; Does this information need to be in every ChangeLog, as opposed to
-;; just the top-level one? Only if you allow changes the same
-;; day as the release.
-;; http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00161.html
+;; FIXME: Update this in the light of the fact that there's only
+;; one ChangeLog file now, at the top level, and it's generated from
+;; commit logs by 'make-dist'.
(defun add-release-logs (root version &optional date)
"Add \"Version VERSION released.\" change log entries in ROOT.
Root must be the root of an Emacs source tree.
@@ -650,7 +649,7 @@ style=\"text-align:left\">")
(copy-file "../doc/misc/texinfo.tex" stem)
(or (equal type "emacs") (copy-file "../doc/emacs/emacsver.texi" stem))
(dolist (file (directory-files (format "../doc/%s" type) t))
- (if (or (string-match-p "\\(\\.texi\\'\\|/ChangeLog\\|/README\\'\\)" file)
+ (if (or (string-match-p "\\(\\.texi\\'\\|/README\\'\\)" file)
(and (equal type "lispintro")
(string-match-p "\\.\\(eps\\|pdf\\)\\'" file)))
(copy-file file stem)))
diff --git a/admin/make-tarball.txt b/admin/make-tarball.txt
index 9603c61..c080014 100644
--- a/admin/make-tarball.txt
+++ b/admin/make-tarball.txt
@@ -2,6 +2,10 @@ Instructions to create pretest or release tarballs. -*- coding: utf-8 -*-
-- originally written by Gerd Moellmann, amended by Francesco Potortì
with the initial help of Eli Zaretskii
+FIXME: There is now just one ChangeLog file, at the top level,
+generated automatically from commit logs by 'make-dist'. The
+procedure below needs to be updated accordingly.
+
Steps to take before starting on the first pretest in any release sequence:
diff --git a/admin/merge-gnulib b/admin/merge-gnulib
index 6c0dffb..dc33349 100755
--- a/admin/merge-gnulib
+++ b/admin/merge-gnulib
@@ -31,7 +31,7 @@ GNULIB_MODULES='
crypto/md5 crypto/sha1 crypto/sha256 crypto/sha512
dtoastr dtotimespec dup2 environ execinfo faccessat
fcntl fcntl-h fdatasync fdopendir filemode fstatat fsync
- getloadavg getopt-gnu gettime gettimeofday
+ getloadavg getopt-gnu gettime gettimeofday gitlog-to-changelog
intprops largefile lstat
manywarnings memrchr mkostemp mktime
pipe2 pselect pthread_sigmask putenv qacl readlink readlinkat
diff --git a/admin/notes/bugtracker b/admin/notes/bugtracker
index fd7bd08..9d03798 100644
--- a/admin/notes/bugtracker
+++ b/admin/notes/bugtracker
@@ -481,7 +481,8 @@ can see exactly what the fix was.
*** bug-reference-mode
Activate `bug-reference-mode' in ChangeLogs to get clickable links to
-the bug web-pages.
+the bug web-pages. FIXME: This may need to be updated in the light of
+the new policy of just one ChangeLog, at the top level.
*** Debian stuff
diff --git a/admin/notes/repo b/admin/notes/repo
index 46a9e08..d077896 100644
--- a/admin/notes/repo
+++ b/admin/notes/repo
@@ -37,6 +37,16 @@ NEWS, MAINTAINERS, and FOR-RELEASE, or to indicate regeneration of
files such as 'configure'. "There is no need" means you don't have
to, but you can if you want to.
+** Using vc-dwim to maintain commit messages
+
+You can use vc-dwim to maintain commit messages in ChangeLog format.
+When you create a source directory FOO, run the shell command 'cd FOO;
+git-changelog-symlink-init' to create a symbolic link from ChangeLog
+to .git/c/ChangeLog. Edit this ChangeLog via its symlink with Emacs
+commands like add-change-log-entry-other-window, and commit the change
+using the shell command 'cd FOO; vc-dwim'. Type 'vc-dwim --help' for
+more info.
+
* Commit to the right branch
Development normally takes places on the trunk.
@@ -132,7 +142,8 @@ http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00262.html
* How to merge changes from emacs-24 to trunk
-[The section on git merge procedure has not yet been written]
+[The section on git merge procedure has not yet been written.
+Among other things, the ChangeLog file is now automatically generated.]
Inspect the change log entries (e.g. in case too many entries have been
included or whitespace between entries needs fixing). If someone made
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
new file mode 100755
index 0000000..78afff4
--- /dev/null
+++ b/build-aux/gitlog-to-changelog
@@ -0,0 +1,432 @@
+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 = '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
+# do its job. Otherwise, update this string manually.
+
+# Copyright (C) 2008-2014 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.
+ --no-cluster never cluster commit messages under the same date/author
+ 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, 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;
+ see 'man git-log' for the list of format metacharacters;
+ the default is '%s%n%b%n'
+ --strip-tab remove one additional leading TAB from commit message lines.
+ --strip-cherry-pick remove data inserted by "git cherry-pick";
+ this includes the "cherry picked from commit ..." line,
+ and the possible final "Conflicts:" paragraph.
+ --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
+
+SPECIAL SYNTAX:
+
+The following types of strings are interpreted specially when they appear
+at the beginning of a log message line. They are not copied to the output.
+
+ Copyright-paperwork-exempt: Yes
+ Append the "(tiny change)" notation to the usual "date name email"
+ ChangeLog header to mark a change that does not require a copyright
+ assignment.
+ Co-authored-by: Joe User <user\@example.com>
+ List the specified name and email address on a second
+ ChangeLog header, denoting a co-author.
+ Signed-off-by: Joe User <user\@example.com>
+ These lines are simply elided.
+
+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 <eggert\\\@cs.ucla.edu>,
+
+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;
+}
+
+# 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';
+ my $amend_file;
+ my $append_dot = 0;
+ my $cluster = 1;
+ my $strip_tab = 0;
+ my $strip_cherry_pick = 0;
+ my $srcdir;
+ 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,
+ 'cluster!' => \$cluster,
+ 'strip-tab' => \$strip_tab,
+ 'strip-cherry-pick' => \$strip_cherry_pick,
+ 'srcdir=s' => \$srcdir,
+ ) 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 = ('git',
+ git_dir_option $srcdir,
+ qw(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\":\n$@\n";
+
+ # Note that we've used this entry.
+ delete $amend_code->{$sha};
+
+ # Update $rest upon success.
+ $rest = $_;
+ }
+
+ # Remove lines inserted by "git cherry-pick".
+ if ($strip_cherry_pick)
+ {
+ $rest =~ s/^\s*Conflicts:\n.*//sm;
+ $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
+ }
+
+ 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";
+
+ # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
+ # `(tiny change)' annotation.
+ my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
+ ? ' (tiny change)' : '');
+
+ my $date_line = sprintf "%s %s$tiny\n",
+ strftime ("%F", localtime ($1)), $2;
+
+ my @coauthors = grep /^Co-authored-by:.*$/, @line;
+ # Omit meta-data lines we've already interpreted.
+ @line = grep !/^(?:Signed-off-by:[ ].*>$
+ |Co-authored-by:[ ]
+ |Copyright-paperwork-exempt:[ ]
+ )/x, @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 <email@example.com>' lines in
+ # standard multi-author ChangeLog format.
+ for (@coauthors)
+ {
+ s/^Co-authored-by:\s*/\t /;
+ s/\s*</ </;
+
+ /<.*?@.*\..*>/
+ or warn "$ME: warning: missing email address for "
+ . substr ($_, 5) . "\n";
+ }
+
+ # If clustering of commit messages has been disabled, 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 ( ! $cluster
+ || $date_line ne $prev_date_line
+ || "@coauthors" ne "@prev_coauthors"
+ || $multi_paragraph
+ || $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] .= '.';
+ }
+ }
+
+ # Remove one additional leading TAB from each line.
+ $strip_tab
+ and map { s/^\t// } @line;
+
+ # 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/build-aux/gitlog-to-emacslog b/build-aux/gitlog-to-emacslog
new file mode 100755
index 0000000..cc0f409
--- /dev/null
+++ b/build-aux/gitlog-to-emacslog
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# Convert git log output to ChangeLog format for GNU Emacs.
+
+# Copyright (C) 2014 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/>.
+
+LC_ALL=C
+export LC_ALL
+
+gen_origin=${1?}
+
+if test -d ${srcprefix}.git; then
+ gen_origin_date=`git log --pretty=format:%ci "$gen_origin"^! ` || exit
+ gen_start_year=`expr "$gen_origin_date" : '\([^-]*\)'` || exit
+ log_fix="${srcprefix}build-aux/git-log-fix"
+ test -e "$log_fix" && set -- "$@" --amend="$log_fix"
+
+ ${srcprefix}build-aux/gitlog-to-changelog $gen_origin^.. \
+ > ${distprefix}cl-t || exit
+
+ gen_end_year=`sed 's/-.*//; q' ${distprefix}cl-t`
+ if test "$gen_start_year" = "$gen_end_year"; then
+ year_range=$gen_start_year
+ else
+ year_range=$gen_start_year-$gen_end_year
+ fi
+
+ sed "1d
+ s/Copyright (C) [0-9]*-[0-9]*/Copyright (C) $year_range/
+ s/^# //
+ /http:/q
+ " Makefile.in >>${distprefix}cl-t &&
+ rm -f ${distprefix}ChangeLog &&
+ mv ${distprefix}cl-t ${distprefix}ChangeLog
+fi
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el
index 4ba4869..18aeb61 100644
--- a/lisp/calendar/icalendar.el
+++ b/lisp/calendar/icalendar.el
@@ -39,7 +39,7 @@
;;; History:
-;; 0.07 onwards: see lisp/ChangeLog
+;; 0.07 onwards: see commit logs and ../ChangeLog*.
;; 0.06: (2004-10-06)
;; - Bugfixes regarding icalendar-import-format-*.
@@ -1047,7 +1047,7 @@ FExport diary data into iCalendar file: ")
(setq header (concat "\nBEGIN:VEVENT\nUID:"
(or uid
- (icalendar--create-uid entry-full
+ (icalendar--create-uid entry-full
contents)))))
(setq result (concat result header contents "\nEND:VEVENT")))
;; handle errors
diff --git a/lisp/emacs-lisp/authors.el b/lisp/emacs-lisp/authors.el
index 51bd415..c53feee 100644
--- a/lisp/emacs-lisp/authors.el
+++ b/lisp/emacs-lisp/authors.el
@@ -27,6 +27,9 @@
;; Use M-x authors RET to create an *Authors* buffer that can used as
;; or merged with Emacs's AUTHORS file.
+;; FIXME: This needs to modernized in the light of current practice,
+;; which generates a single top-level ChangeLog file from commit logs.
+
;;; Code:
(defvar authors-coding-system 'utf-8
@@ -75,7 +78,7 @@ files.")
("Gerd Möllmann" "Gerd Moellmann")
("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth")
("Hrvoje Nikšić" "Hrvoje Niksic")
- ;; lisp/org/ChangeLog 2010-11-11.
+ ;; lisp/org/ChangeLog.1 2010-11-11.
(nil "aaa bbb")
(nil "Code Extracted") ; lisp/newcomment.el's "Author:" header
("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn")
diff --git a/lisp/emacs-lisp/gulp.el b/lisp/emacs-lisp/gulp.el
index d0a89b3..2d0314b 100644
--- a/lisp/emacs-lisp/gulp.el
+++ b/lisp/emacs-lisp/gulp.el
@@ -69,7 +69,7 @@ please send them to me ASAP.
Please don't send the whole file. Instead, please send a patch made with
`diff -c' that shows precisely the changes you would like me to install.
Also please include itemized change log entries for your changes;
-please use lisp/ChangeLog as a guide for the style and for what kinds
+please use lisp/ChangeLog* as a guide for the style and for what kinds
of information to include.
Thanks.")
diff --git a/lisp/gnus/deuglify.el b/lisp/gnus/deuglify.el
index 7a0f613..a28a255 100644
--- a/lisp/gnus/deuglify.el
+++ b/lisp/gnus/deuglify.el
@@ -188,7 +188,7 @@
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
-;; See ChangeLog for other changes.
+;; See commit log or ChangeLog* for other changes.
;;
;; Revision 1.5 2002/01/27 14:39:17 rscholz
;; * New variable `gnus-outlook-deuglify-no-wrap-chars' to inhibit
diff --git a/lwlib/README b/lwlib/README
index 25c72eb..ed7583d 100644
--- a/lwlib/README
+++ b/lwlib/README
@@ -4,4 +4,4 @@ library was written by Lucid, Inc and released under the terms of the
GPL version 1 (or later). It is not considered part of GNU Emacs.
This version of the library differs from the original as described in
-the ChangeLog file.
+the ChangeLog.1 file.
diff --git a/make-dist b/make-dist
index aed5b17..30dacda 100755
--- a/make-dist
+++ b/make-dist
@@ -278,13 +278,20 @@ fi
echo "Creating top directory: \`${tempdir}'"
mkdir ${tempdir}
+if test -d .git; then
+ echo "Making top-level ChangeLog"
+ make distprefix=${tempdir}/ gen-ChangeLog
+else
+ echo "No repository, so omitting top-level ChangeLog"
+fi
+
### We copy in the top-level files before creating the subdirectories in
### hopes that this will make the top-level files appear first in the
### tar file; this means that people can start reading the INSTALL and
### README while the rest of the tar file is still unpacking. Whoopee.
echo "Making links to top-level files"
ln INSTALL README BUGS ${tempdir}
-ln ChangeLog Makefile.in autogen.sh configure configure.ac ${tempdir}
+ln ChangeLog.*[0-9] Makefile.in autogen.sh configure configure.ac ${tempdir}
ln config.bat make-dist .dir-locals.el ${tempdir}
ln aclocal.m4 ${tempdir}
@@ -334,7 +341,7 @@ done
echo "Making links to \`leim' and its subdirectories"
(cd leim
ln makefile.w32-in ../${tempdir}/leim
- ln ChangeLog README ../${tempdir}/leim
+ ln ChangeLog.*[0-9] README ../${tempdir}/leim
ln CXTERM-DIC/README CXTERM-DIC/*.tit ../${tempdir}/leim/CXTERM-DIC
ln SKK-DIC/README SKK-DIC/SKK-JISYO.L ../${tempdir}/leim/SKK-DIC
ln MISC-DIC/README MISC-DIC/*.* ../${tempdir}/leim/MISC-DIC
@@ -345,6 +352,7 @@ echo "Making links to \`leim' and its subdirectories"
echo "Making links to \`build-aux'"
(cd build-aux
ln compile config.guess config.sub depcomp msys-to-w32 ../${tempdir}/build-aux
+ ln gitlog-to-changelog ../${tempdir}/build-aux
ln install-sh missing move-if-change ../${tempdir}/build-aux
ln update-copyright update-subdirs ../${tempdir}/build-aux
ln dir_top make-info-dir ../${tempdir}/build-aux)
@@ -361,7 +369,7 @@ echo "Making links to \`src'"
ln [a-zA-Z]*.[chm] ../${tempdir}/src
ln [a-zA-Z]*.in ../${tempdir}/src
ln [a-zA-Z]*.mk ../${tempdir}/src
- ln README ChangeLog ChangeLog.*[0-9] ../${tempdir}/src
+ ln README ChangeLog.*[0-9] ../${tempdir}/src
ln makefile.w32-in ../${tempdir}/src
ln .gdbinit .dbxinit ../${tempdir}/src
cd ../${tempdir}/src
@@ -383,7 +391,7 @@ echo "Making links to \`lib'"
echo "Making links to \`lib-src'"
(cd lib-src
ln [a-zA-Z]*.[ch] ../${tempdir}/lib-src
- ln ChangeLog Makefile.in README testfile ../${tempdir}/lib-src
+ ln ChangeLog.*[0-9] Makefile.in README testfile ../${tempdir}/lib-src
ln grep-changelog rcs2log ../${tempdir}/lib-src
ln makefile.w32-in ../${tempdir}/lib-src
ln update-game-score.exe.manifest ../${tempdir}/lib-src)
@@ -399,7 +407,7 @@ echo "Making links to \`nt'"
ln nmake.defs gmake.defs subdirs.el [a-z]*.bat [a-z]*.[ch] ../${tempdir}/nt
ln Makefile.in gnulib.mk ../${tempdir}/nt
ln mingw-cfg.site epaths.nt INSTALL.OLD ../${tempdir}/nt
- ln ChangeLog INSTALL README README.W32 makefile.w32-in ../${tempdir}/nt)
+ ln ChangeLog.*[0-9] INSTALL README README.W32 makefile.w32-in ../${tempdir}/nt)
echo "Making links to \`nt/inc' and its subdirectories"
for f in `find nt/inc -type f -name '[a-z]*.h'`; do
@@ -413,13 +421,13 @@ echo "Making links to \`nt/icons'"
echo "Making links to \`msdos'"
(cd msdos
- ln ChangeLog INSTALL README emacs.ico emacs.pif ../${tempdir}/msdos
+ ln ChangeLog.*[0-9] INSTALL README emacs.ico emacs.pif ../${tempdir}/msdos
ln depfiles.bat inttypes.h ../${tempdir}/msdos
ln is_exec.c sigaction.c mainmake.v2 sed*.inp ../${tempdir}/msdos)
echo "Making links to \`nextstep'"
(cd nextstep
- ln ChangeLog README INSTALL Makefile.in ../${tempdir}/nextstep)
+ ln ChangeLog.*[0-9] README INSTALL Makefile.in ../${tempdir}/nextstep)
echo "Making links to \`nextstep/templates'"
(cd nextstep/templates
@@ -440,12 +448,12 @@ echo "Making links to \`nextstep/GNUstep/Emacs.base/Resources'"
echo "Making links to \`oldXMenu'"
(cd oldXMenu
ln *.[ch] *.in ../${tempdir}/oldXMenu
- ln README ChangeLog ../${tempdir}/oldXMenu)
+ ln README ChangeLog.*[0-9] ../${tempdir}/oldXMenu)
echo "Making links to \`lwlib'"
(cd lwlib
ln *.[ch] *.in ../${tempdir}/lwlib
- ln README ChangeLog ../${tempdir}/lwlib)
+ ln README ChangeLog.*[0-9] ../${tempdir}/lwlib)
## It is important to distribute admin/ because it contains sources
## for generated lisp/international/uni-*.el files.
--
1.9.3
[-- Attachment #4: 0003-Combine-all-historical-ChangeLogs-into-ChangeLog.1.patch --]
[-- Type: text/x-diff, Size: 7205 bytes --]
From 51bae646c79a78d4fb0cfa8e4851ecd32e543012 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 25 Nov 2014 12:47:44 -0800
Subject: [PATCH 3/3] Combine all historical ChangeLogs into ChangeLog.1.
---
ChangeLog.1 | 645849 ++++++++++++++++++++++++++++++++++++++++++-
admin/ChangeLog.1 | 2267 -
doc/emacs/ChangeLog.1 | 10750 -
doc/lispintro/ChangeLog.1 | 763 -
doc/lispref/ChangeLog.1 | 13400 -
doc/man/ChangeLog.1 | 183 -
doc/misc/ChangeLog.1 | 11781 -
etc/ChangeLog.1 | 6547 -
leim/ChangeLog.1 | 2557 -
lib-src/ChangeLog.1 | 8258 -
lisp/ChangeLog.1 | 3262 -
lisp/ChangeLog.10 | 23559 --
lisp/ChangeLog.11 | 14339 -
lisp/ChangeLog.12 | 33352 ---
lisp/ChangeLog.13 | 16715 --
lisp/ChangeLog.14 | 20565 --
lisp/ChangeLog.15 | 22820 --
lisp/ChangeLog.16 | 25242 --
lisp/ChangeLog.17 | 16597 --
lisp/ChangeLog.2 | 4010 -
lisp/ChangeLog.3 | 12451 -
lisp/ChangeLog.4 | 8952 -
lisp/ChangeLog.5 | 9286 -
lisp/ChangeLog.6 | 8039 -
lisp/ChangeLog.7 | 23128 --
lisp/ChangeLog.8 | 10010 -
lisp/ChangeLog.9 | 20703 --
lisp/cedet/ChangeLog.1 | 3088 -
lisp/erc/ChangeLog.01 | 1056 -
lisp/erc/ChangeLog.02 | 2620 -
lisp/erc/ChangeLog.03 | 2163 -
lisp/erc/ChangeLog.04 | 2094 -
lisp/erc/ChangeLog.05 | 1240 -
lisp/erc/ChangeLog.06 | 1454 -
lisp/erc/ChangeLog.07 | 836 -
lisp/erc/ChangeLog.08 | 429 -
lisp/erc/ChangeLog.09 | 720 -
lisp/gnus/ChangeLog.1 | 3724 -
lisp/gnus/ChangeLog.2 | 18569 --
lisp/gnus/ChangeLog.3 | 25527 --
lisp/mh-e/ChangeLog.1 | 11441 -
lisp/mh-e/ChangeLog.2 | 3692 -
lisp/org/ChangeLog.1 | 32802 ---
lisp/url/ChangeLog.1 | 2970 -
lwlib/ChangeLog.1 | 1878 -
msdos/ChangeLog.1 | 1553 -
nextstep/ChangeLog.1 | 299 -
nt/ChangeLog.1 | 3443 -
oldXMenu/ChangeLog.1 | 684 -
src/ChangeLog.1 | 3539 -
src/ChangeLog.10 | 27930 --
src/ChangeLog.11 | 31403 ---
src/ChangeLog.12 | 22954 --
src/ChangeLog.13 | 11241 -
src/ChangeLog.2 | 4789 -
src/ChangeLog.3 | 16521 --
src/ChangeLog.4 | 6924 -
src/ChangeLog.5 | 7166 -
src/ChangeLog.6 | 5376 -
src/ChangeLog.7 | 11109 -
src/ChangeLog.8 | 13997 -
src/ChangeLog.9 | 13312 -
test/ChangeLog.1 | 1983 -
63 files changed, 637286 insertions(+), 638625 deletions(-)
delete mode 100644 admin/ChangeLog.1
delete mode 100644 doc/emacs/ChangeLog.1
delete mode 100644 doc/lispintro/ChangeLog.1
delete mode 100644 doc/lispref/ChangeLog.1
delete mode 100644 doc/man/ChangeLog.1
delete mode 100644 doc/misc/ChangeLog.1
delete mode 100644 etc/ChangeLog.1
delete mode 100644 leim/ChangeLog.1
delete mode 100644 lib-src/ChangeLog.1
delete mode 100644 lisp/ChangeLog.1
delete mode 100644 lisp/ChangeLog.10
delete mode 100644 lisp/ChangeLog.11
delete mode 100644 lisp/ChangeLog.12
delete mode 100644 lisp/ChangeLog.13
delete mode 100644 lisp/ChangeLog.14
delete mode 100644 lisp/ChangeLog.15
delete mode 100644 lisp/ChangeLog.16
delete mode 100644 lisp/ChangeLog.17
delete mode 100644 lisp/ChangeLog.2
delete mode 100644 lisp/ChangeLog.3
delete mode 100644 lisp/ChangeLog.4
delete mode 100644 lisp/ChangeLog.5
delete mode 100644 lisp/ChangeLog.6
delete mode 100644 lisp/ChangeLog.7
delete mode 100644 lisp/ChangeLog.8
delete mode 100644 lisp/ChangeLog.9
delete mode 100644 lisp/cedet/ChangeLog.1
delete mode 100644 lisp/erc/ChangeLog.01
delete mode 100644 lisp/erc/ChangeLog.02
delete mode 100644 lisp/erc/ChangeLog.03
delete mode 100644 lisp/erc/ChangeLog.04
delete mode 100644 lisp/erc/ChangeLog.05
delete mode 100644 lisp/erc/ChangeLog.06
delete mode 100644 lisp/erc/ChangeLog.07
delete mode 100644 lisp/erc/ChangeLog.08
delete mode 100644 lisp/erc/ChangeLog.09
delete mode 100644 lisp/gnus/ChangeLog.1
delete mode 100644 lisp/gnus/ChangeLog.2
delete mode 100644 lisp/gnus/ChangeLog.3
delete mode 100644 lisp/mh-e/ChangeLog.1
delete mode 100644 lisp/mh-e/ChangeLog.2
delete mode 100644 lisp/org/ChangeLog.1
delete mode 100644 lisp/url/ChangeLog.1
delete mode 100644 lwlib/ChangeLog.1
delete mode 100644 msdos/ChangeLog.1
delete mode 100644 nextstep/ChangeLog.1
delete mode 100644 nt/ChangeLog.1
delete mode 100644 oldXMenu/ChangeLog.1
delete mode 100644 src/ChangeLog.1
delete mode 100644 src/ChangeLog.10
delete mode 100644 src/ChangeLog.11
delete mode 100644 src/ChangeLog.12
delete mode 100644 src/ChangeLog.13
delete mode 100644 src/ChangeLog.2
delete mode 100644 src/ChangeLog.3
delete mode 100644 src/ChangeLog.4
delete mode 100644 src/ChangeLog.5
delete mode 100644 src/ChangeLog.6
delete mode 100644 src/ChangeLog.7
delete mode 100644 src/ChangeLog.8
delete mode 100644 src/ChangeLog.9
delete mode 100644 test/ChangeLog.1
[The actual patch is about 48 MB and is elided here.
The following shell script implements the patch:]
#!/bin/sh
export LC_ALL=C
logs=$(find * -name 'ChangeLog.*' | sort -t. -k1,1 -k2n)
gawk '
BEGINFILE {
prefix = FILENAME
sub(/[^/]*$/, "", prefix)
}
!/^[^\t0-9]/ {
if (/^\tCopyright [(]/) { next }
if (/^\tInc\./) { next }
line = $0
if (/^\t\* / && $0 !~ ("^\\t\\* " prefix)) {
line_end = substr(line, 1, 3) prefix substr(line, 4)
line = ""
while (match(line_end, /^[^(:,]*, /)) {
pos = RLENGTH
line = line substr(line_end, 1, pos) prefix
line_end = substr(line_end, pos + 1)
}
line = line line_end
}
if (/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][[:space:]]/) {
if (accum)
print accum
accum = FILENAME " " line
} else if (line || prevline) {
accum = accum "\1" line
}
prevline = $0
}
END {
print accum
}
' $logs |
sort -s -k2,2r -k1 |
sed 's/^[^ ]* //' |
tr '\1' '\n' |
sed 's/[[:space:]]*$//' >ChangeLog.new
cat >>ChangeLog.new <<'EOF'
;; Local Variables:
;; coding: utf-8
;; End:
Copyright (C) 1985-2014 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs 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.
GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
EOF
for log in $logs; do
test "$log" = ChangeLog.1 && continue
git rm $log
done
cp ChangeLog.new ChangeLog.1
git add ChangeLog.1
git commit -m'Combine all historical ChangeLogs into ChangeLog.1.'
next prev parent reply other threads:[~2014-11-26 5:38 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-19 23:57 bug#19113: Generate a ChangeLog file from commit logs Paul Eggert
2014-11-20 15:51 ` Eli Zaretskii
2014-11-20 17:43 ` Paul Eggert
2014-11-20 17:44 ` Paul Eggert
2014-11-26 5:38 ` Paul Eggert [this message]
2014-11-26 6:21 ` Jan D.
2014-11-26 7:50 ` Paul Eggert
2014-11-26 15:12 ` Stefan Monnier
2014-11-26 19:16 ` Paul Eggert
2014-11-26 22:15 ` Stefan Monnier
2014-12-05 8:07 ` Glenn Morris
2014-12-05 8:38 ` Eli Zaretskii
2014-12-05 14:33 ` Ted Zlatanov
2014-12-05 18:49 ` Stefan Monnier
2014-12-05 20:08 ` Ted Zlatanov
2014-12-06 4:59 ` Stefan Monnier
2014-12-06 13:17 ` Ted Zlatanov
2014-12-06 2:27 ` Dmitry Gutov
2014-12-06 5:06 ` Stefan Monnier
2014-12-06 7:26 ` Eli Zaretskii
2014-12-09 13:46 ` Dmitry Gutov
2014-12-06 10:08 ` Patch queue management systems Eli Zaretskii
2014-12-06 13:12 ` Ted Zlatanov
2014-12-08 21:49 ` Thomas Koch
2014-12-08 23:10 ` Lars Magne Ingebrigtsen
2014-12-09 0:00 ` Lars Magne Ingebrigtsen
2014-12-09 0:32 ` Lars Magne Ingebrigtsen
2014-12-09 2:57 ` Stefan Monnier
2014-12-09 3:16 ` Lars Magne Ingebrigtsen
2014-12-09 12:37 ` Dmitry Gutov
2014-12-09 17:20 ` Lars Magne Ingebrigtsen
2014-12-09 20:40 ` Dmitry Gutov
2014-12-09 20:44 ` Lars Magne Ingebrigtsen
2014-12-09 21:32 ` Dmitry Gutov
2014-12-09 21:58 ` Lars Magne Ingebrigtsen
2014-12-09 21:57 ` Lars Magne Ingebrigtsen
2014-12-10 14:35 ` Ted Zlatanov
2014-12-08 22:24 ` Lars Magne Ingebrigtsen
2014-12-08 22:54 ` joakim
2014-12-09 5:31 ` Ivan Andrus
2014-12-09 0:06 ` Thien-Thi Nguyen
2014-12-09 2:54 ` Stefan Monnier
2014-12-09 3:15 ` Lars Magne Ingebrigtsen
2014-12-09 8:13 ` Stephen Leake
2014-12-09 13:03 ` Dmitry Gutov
2014-12-09 17:09 ` Eli Zaretskii
2014-12-09 17:17 ` Dmitry Gutov
2014-12-09 17:36 ` Eli Zaretskii
2014-12-09 19:31 ` Dmitry Gutov
2014-12-10 14:39 ` Ted Zlatanov
2014-12-11 8:59 ` Steinar Bang
2014-12-11 11:52 ` Ted Zlatanov
2014-12-11 12:38 ` Steinar Bang
2014-12-11 14:31 ` Ted Zlatanov
2014-12-11 14:39 ` David Kastrup
2014-12-11 14:50 ` Ted Zlatanov
2014-12-11 14:55 ` Andreas Schwab
2014-12-11 15:00 ` Ted Zlatanov
2014-12-11 15:26 ` David Kastrup
2014-12-11 15:33 ` Ted Zlatanov
2014-12-11 15:49 ` David Kastrup
2014-12-11 15:19 ` David Kastrup
2014-12-11 18:43 ` Achim Gratz
2014-12-05 15:38 ` bug#19113: Generate a ChangeLog file from commit logs Stefan Monnier
2014-12-06 4:42 ` Paul Eggert
2014-12-06 7:40 ` Eli Zaretskii
2014-12-09 5:14 ` Glenn Morris
2014-12-09 6:42 ` Paul Eggert
2015-01-03 1:37 ` Glenn Morris
2014-11-20 18:00 ` Achim Gratz
2014-11-20 17:25 ` Pádraig Brady
2015-01-12 7:38 ` Paul Eggert
2015-01-15 14:58 ` Stefan Monnier
2015-01-15 21:46 ` Glenn Morris
2015-01-16 1:27 ` Paul Eggert
2015-01-30 16:34 ` Stefan Monnier
2015-01-30 20:14 ` Paul Eggert
2015-01-31 6:33 ` Stefan Monnier
2015-01-31 8:18 ` Paul Eggert
2015-01-31 9:06 ` Andreas Schwab
2015-03-21 2:37 ` Paul Eggert
2015-03-21 8:33 ` Eli Zaretskii
2015-03-21 14:38 ` Stefan Monnier
2015-03-22 23:53 ` Glenn Morris
2015-04-07 7:06 ` Paul Eggert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54756754.5090103@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=19113@debbugs.gnu.org \
--cc=eliz@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.