annotate lib-src/grep-changelog @ 112119:48f5ac42611a

Reconcile with changes in line movement behavior for long text lines that cross more than a single physical window line, ie when truncate-lines is nil. (allout-next-visible-heading): Provide for change in line-move behavior on long lines when truncate-lines is nil. In that case, line-move can wind up on the same textual line when it moves to the next window line, and moving to the bullet position after the move yields zero advancement. Add logic to detect and compensate for the lack of progress. (allout-current-topic-collapsed-p): move-end-of-line respect for field boundaries is different when operating with body lines shorter than window width versus ones greater than window width, which can yield false negatives in this function. Avoid difference by applying move-end-of-line while field-text-motion is inhibited.
author Ken Manheimer <ken.manheimer@gmail.com>
date Tue, 04 Jan 2011 14:44:10 -0500
parents 1d1d5d9bd884
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28823
72c6f8275e0b *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 25216
diff changeset
1 #! /usr/bin/perl
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
64769
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64083
diff changeset
3 # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 100958
diff changeset
4 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 #
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 # This file is part of GNU Emacs.
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
7
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
8 # GNU Emacs is free software: you can redistribute it and/or modify
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 # it under the terms of the GNU General Public License as published by
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
11 # (at your option) any later version.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
12
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 # GNU Emacs is distributed in the hope that it will be useful,
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 # GNU General Public License for more details.
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
17
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 # You should have received a copy of the GNU General Public License
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
19 # along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22 # Extract entries from ChangeLogs matching specified criteria.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 # Optionally format the resulting output to a form suitable for RCS
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 # logs, like they are used in Emacs, for example. In this format,
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
25 # author lines, leading spaces, and file names are removed.
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
26
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 require 5;
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
28 use strict;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
29
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 # Parse command line options.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
32 use vars qw($author $regexp $exclude $from_date $to_date
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
33 $rcs_log $with_date $version $help $reverse
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
34 @entries);
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
35
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
36 use Getopt::Long;
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
37
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
38 my $result;
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
39
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
40 if (@ARGV == 0) {
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
41
100397
07fabb2ead9b Fix comment typo.
Glenn Morris <rgm@gnu.org>
parents: 94828
diff changeset
42 # No arguments cannot possibly mean "show everything"!!
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
43 $result = 0;
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
44
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
45 } else {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
47 $result = GetOptions ("author=s" => \$author,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
48 "text=s" => \$regexp,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
49 "exclude=s" => \$exclude,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
50 "from-date=s" => \$from_date,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
51 "to-date=s" => \$to_date,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
52 "rcs-log" => \$rcs_log,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
53 "with-date" => \$with_date,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
54 "reverse!" => \$reverse,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
55 "version" => \$version,
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
56 "help" => \$help);
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
58 # If date options are specified, check that they have the format
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
59 # YYYY-MM-DD.
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
60
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
61 $result = 0 if $from_date && $from_date !~ /^\d\d\d\d-\d\d-\d\d$/;
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
62 $result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/;
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
63 }
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 # Print usage information and exit when necessary.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 if ($result == 0 || $help) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 print <<USAGE;
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
69
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 Usage: $0 [options] [CHANGELOG...]
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
72 Print entries in ChangeLogs matching various criteria.
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
73 Valid options are:
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
74
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
75 --author=AUTHOR Match entries whose author line matches
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 regular expression AUTHOR
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
77 --text=TEXT Match entries whose text matches regular
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
78 expression TEXT
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
79 --exclude=TEXT Exclude entries matching TEXT
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
80 --from-date=YYYY-MM-DD Match entries not older than given date
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
81 --to-date=YYYY-MM-DD Match entries not younger than given date
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
82 --rcs-log Format output suitable for RCS log entries
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
83 --with-date Print short date line in RCS log
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
84 --reverse Show entries in reverse (chronological) order
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
85 --version Print version info
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
86 --help Print this help
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 If no CHANGELOG is specified scan the files "ChangeLog" and
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
89 "ChangeLog.N+" in the current directory. Old-style dates in ChangeLogs
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 are not recognized.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 USAGE
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
92 exit !$help;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 # Print version info and exit if `--version' was specified.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 if ($version) {
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
98 print "0.3\n";
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 exit 0;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 # Value is non-zero if HEADER matches according to command line
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 # options specified, i.e. it matches $author, and its date is in
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 # the range $from_date <= date <= $to_date.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
107 sub header_match_p {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 my $header = shift;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109
38502
180f542bf5b4 (entry_match_p, header_match_p): Fix handling of null or empty
Gerd Moellmann <gerd@gnu.org>
parents: 38500
diff changeset
110 return 0 unless $header;
180f542bf5b4 (entry_match_p, header_match_p): Fix handling of null or empty
Gerd Moellmann <gerd@gnu.org>
parents: 38500
diff changeset
111
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 # No match if AUTHOR-regexp specified and doesn't match.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 return 0 if $author && $header !~ /$author/;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 # Check that the date of the entry matches if date options
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116 # `--from-date' and/or `--to-date' were specified . Old-style
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 # dates in ChangeLogs are not recognized, and never match.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 if ($from_date || $to_date) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 if ($header =~ /^(\d\d\d\d-\d\d-\d\d)/) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 my $date = $1;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 return 0 if $from_date && $date lt $from_date;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 return 0 if $to_date && $date gt $to_date;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 } else {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 # Don't bother recognizing old-style dates.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 return 0;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 return 1;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
133 # Value is non-zero if ENTRY matches the criteria specified on the
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 # command line, i.e. it matches $regexp, and it doesn't match
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 # $exclude.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
137 sub entry_match_p {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 my $entry = shift;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139
38502
180f542bf5b4 (entry_match_p, header_match_p): Fix handling of null or empty
Gerd Moellmann <gerd@gnu.org>
parents: 38500
diff changeset
140 return 0 unless $entry;
180f542bf5b4 (entry_match_p, header_match_p): Fix handling of null or empty
Gerd Moellmann <gerd@gnu.org>
parents: 38500
diff changeset
141
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 if ($regexp) {
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
143 return 1 if ($entry =~ /$regexp/
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144 && (!$exclude || $entry !~ $exclude));
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 } else {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 return 1 if !$exclude || $entry !~ $exclude;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149 return 0;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 # Print HEADER and/or ENTRY in a format suitable for what was
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154 # specified on the command line. If $rcs_log is specified, author
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155 # lines are not printed, and leading spaces and file names are removed
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 # from ChangeLog entries.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
158 sub print_log {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 my ($header, $entry) = @_;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
160 my $output = '';
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 if ($rcs_log) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163 # Remove leading whitespace from entry.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164 $entry =~ s/^\s+//mg;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 # Remove file name parts.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166 $entry =~ s/^\*.*\(/(/mg;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 # Remove file name parts, 2.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 $entry =~ s/^\*.*://mg;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169 if ($with_date) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 $header =~ /(\d\d\d\d-\d\d-\d\d)/;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
171 $output = "!changelog-date $1\n";
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 }
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
173 $output .= $entry;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 } else {
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
175 $output .= $header . $entry;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
176 }
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
177
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
178 if ($reverse) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
179 push @entries, $output;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
180 } else {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
181 print $output;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185 # Scan LOG for matching entries, and print them to standard output.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
187 sub parse_changelog {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 my $log = shift;
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
189 my $entry = undef;
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
190 my $header = undef;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
191
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
192 @entries = () if $reverse;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 # Open the ChangeLog.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 open (IN, "< $log") || die "Cannot open $log: $!";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
197 while (defined(my $line = <IN>)) {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 if ($line =~ /^\S/) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 # Line is an author-line. Print previous entry if
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 # it matches.
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
201 print_log ($header, $entry)
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202 if header_match_p ($header) && entry_match_p ($entry);
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 $entry = "";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 $header = $line;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 # Add empty lines below the header.
38500
3db3b0888252 (parse_changelog): Add test for defined value to
Gerd Moellmann <gerd@gnu.org>
parents: 29638
diff changeset
208 while (defined($line = <IN>) && $line =~ /^\s*$/) {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 $header = "$header$line";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 }
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
211 }
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212
38504
1d53627a58ae (parse_changelog): Add another test for defined value to
Gerd Moellmann <gerd@gnu.org>
parents: 38502
diff changeset
213 last unless defined $line;
1d53627a58ae (parse_changelog): Add another test for defined value to
Gerd Moellmann <gerd@gnu.org>
parents: 38502
diff changeset
214
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 if ($line =~ /^\s*\*/) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216 # LINE is the first line of a ChangeLog entry. Print
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 # previous entry if it matches.
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
218 print_log ($header, $entry)
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 if header_match_p ($header) && entry_match_p ($entry);
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 $entry = $line;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 } else {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 # Add LINE to the current entry.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 $entry = "$entry$line";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227 # Print last entry if it matches.
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
228 print_log ($header, $entry)
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 if header_match_p ($header) && entry_match_p ($entry);
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 close IN;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
232
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
233 if ($reverse) {
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
234 for (my $entry = @entries; $entry; $entry--) {
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
235 print $entries[$entry-1];
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
236 }
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
237 }
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 # Main program. Process ChangeLogs.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
243 # If files were specified on the command line, parse those files in the
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
244 # order supplied by the user; otherwise parse default files ChangeLog and
73621
3e566ec9ef5d When called with no arguments (not even a filter), show help instead of
Juanma Barranquero <lekktu@gmail.com>
parents: 68647
diff changeset
245 # ChangeLog.NNN according to $reverse.
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
246 unless (@ARGV > 0) {
54324
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
247 @ARGV = ("ChangeLog");
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
248
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
249 push @ARGV,
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
250 map {"ChangeLog.$_"}
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
251 sort {$b <=> $a}
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
252 map {/\.(\d+)$/; $1}
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
253 do {
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
254 opendir D, '.';
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
255 grep /^ChangeLog\.\d+$/, readdir D;
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
256 };
bdf4aa3226e7 Changes to support ChangeLog.10+.
Juanma Barranquero <lekktu@gmail.com>
parents: 52401
diff changeset
257
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
258 @ARGV = reverse @ARGV if $reverse;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
259 }
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
260
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
261 while (defined (my $log = shift @ARGV)) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
262 parse_changelog ($log) if -f $log;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 38551
diff changeset
266 # arch-tag: 9e4f6749-e053-4bb7-b3ad-11947318418e
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
267 # grep-changelog ends here.