]> code.delx.au - gnu-emacs/commitdiff
Changes to support ChangeLog.10+.
authorJuanma Barranquero <lekktu@gmail.com>
Tue, 9 Mar 2004 22:47:27 +0000 (22:47 +0000)
committerJuanma Barranquero <lekktu@gmail.com>
Tue, 9 Mar 2004 22:47:27 +0000 (22:47 +0000)
(main): Tidy up usage string.  Fix "Use of uninitialized value" warning.
Set version to 0.2.  Parse the directory listing to get any ChangeLog.n
file, not just 1..9.
(header_match_p, entry_match_p, print_log, parse_changelog): Remove Perl
prototypes (their purpose is to help the parser, which isn't needed here,
not declare arguments).
(parse_changelog): Make --reverse faster on big batches by not modifying
the entries list.

lib-src/ChangeLog
lib-src/grep-changelog

index 9876b0b041a43693e4ed50c7f8adf1a547c9bac8..4e995ff185a0006df60b5828765b5406ca69d5b9 100644 (file)
@@ -1,3 +1,15 @@
+2004-03-09  Juanma Barranquero  <lektu@terra.es>
+
+       * grep-changelog: Changes to support ChangeLog.10+.
+       (main): Tidy up usage string.  Fix "Use of uninitialized value"
+       warning.  Set version to 0.2.  Parse the directory listing to get
+       any ChangeLog.n file, not just 1..9.
+       (header_match_p, entry_match_p, print_log, parse_changelog):
+       Remove Perl prototypes (their purpose is to help the parser, which
+       isn't needed here, not declare arguments).
+       (parse_changelog): Make --reverse faster on big batches by not
+       modifying the entries list.
+
 2004-03-01  Juanma Barranquero  <lektu@terra.es>
 
        * makefile.w32-in (obj): Add fringe.c.
index 9baf0213db7eada0cbb86510191d197a80431552..38fce879c7a321994feb59656628b299ea8cec59 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl
 
-# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
 #
 # This file is part of GNU Emacs.
 #
@@ -56,34 +56,36 @@ $result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/;
 
 if ($result == 0 || $help) {
     print <<USAGE;
+
 Usage: $0 [options] [CHANGELOG...]
-Print entries in ChangeLogs matching various criteria.  Valid options
-are
 
-  --author=AUTHOR         match entries whose author line matches
+Print entries in ChangeLogs matching various criteria.
+Valid options are:
+
+  --author=AUTHOR         Match entries whose author line matches
                          regular expression AUTHOR
-  --text=TEXT             match entries whose text matches regular
-                         expression TEXT.
-  --exclude=TEXT         exclude entries matching TEXT.
-  --from-date=YYYY-MM-DD  match entries not older than given date
-  --to-date=YYYY-MM-DD    match entries not younger than given date
-  --rcs-log              format output suitable for RCS log entries.
-  --with-date            print short date line in RCS log
-  --reverse               show entries in reverse (chronological) order
-  --version              print version info
-  --help                 print this help
+  --text=TEXT             Match entries whose text matches regular
+                         expression TEXT
+  --exclude=TEXT         Exclude entries matching TEXT
+  --from-date=YYYY-MM-DD  Match entries not older than given date
+  --to-date=YYYY-MM-DD    Match entries not younger than given date
+  --rcs-log              Format output suitable for RCS log entries
+  --with-date            Print short date line in RCS log
+  --reverse               Show entries in reverse (chronological) order
+  --version              Print version info
+  --help                 Print this help
 
 If no CHANGELOG is specified scan the files "ChangeLog" and
-"ChangeLog.[9-1]" in the current directory.  Old-style dates in ChangeLogs
+"ChangeLog.1+" in the current directory.  Old-style dates in ChangeLogs
 are not recognized.
 USAGE
-    exit $help ? 0 : 1;
+    exit !$help;
 }
 
 # Print version info and exit if `--version' was specified.
 
 if ($version) {
-    print "0.1\n";
+    print "0.2\n";
     exit 0;
 }
 
@@ -92,7 +94,7 @@ if ($version) {
 # options specified, i.e. it matches $author, and its date is in
 # the range $from_date <= date <= $to_date.
 
-sub header_match_p ($) {
+sub header_match_p {
     my $header = shift;
 
     return 0 unless $header;
@@ -122,7 +124,7 @@ sub header_match_p ($) {
 # command line, i.e. it matches $regexp, and it doesn't match
 # $exclude.
 
-sub entry_match_p ($) {
+sub entry_match_p {
     my $entry = shift;
 
     return 0 unless $entry;
@@ -143,7 +145,7 @@ sub entry_match_p ($) {
 # lines are not printed, and leading spaces and file names are removed
 # from ChangeLog entries.
 
-sub print_log ($$) {
+sub print_log {
     my ($header, $entry) = @_;
     my $output = '';
 
@@ -172,7 +174,7 @@ sub print_log ($$) {
 
 # Scan LOG for matching entries, and print them to standard output.
 
-sub parse_changelog ($) {
+sub parse_changelog {
     my $log = shift;
     my $entry = undef;
     my $header = undef;
@@ -219,8 +221,8 @@ sub parse_changelog ($) {
     close IN;
 
     if ($reverse) {
-        while (defined (my $entry = pop @entries)) {
-            print $entry;
+        for (my $entry = @entries; $entry; $entry--) {
+            print $entries[$entry-1];
         }
     }
 }
@@ -230,9 +232,19 @@ sub parse_changelog ($) {
 
 # If files were specified on the command line, parse those files in the
 # order supplied by the user; otherwise parse default files ChangeLog and
-# ChangeLog.9...ChangeLog.1 according to $reverse.
+# ChangeLog.1+ according to $reverse.
 unless (@ARGV > 0) {
-    @ARGV = ("ChangeLog", map {"ChangeLog.$_"} reverse 1..9);
+    @ARGV = ("ChangeLog");
+
+    push @ARGV,
+      map {"ChangeLog.$_"}
+        sort {$b <=> $a}
+          map {/\.(\d+)$/; $1}
+            do {
+                opendir D, '.';
+                grep /^ChangeLog\.\d+$/, readdir D;
+            };
+
     @ARGV = reverse @ARGV if $reverse;
 }