annotate lib-src/grep-changelog @ 43968:7ec801358b7e

(Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily) (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery,QCstop) (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature): New variables. (NETCONN1_P): New macro. (DATAGRAM_SOCKETS): New conditional symbol. (datagram_address): New array. (DATAGRAM_CONN_P, DATAGRAM_CHAN_P): New macros. (status_message): Use concat3. (Fprocess_status): Add `listen' status to doc string. Return `stop' for a stopped network process. (Fset_process_buffer): Update contact plist for network process. (Fset_process_filter): Ditto. Don't enable input for stopped network processes. Server must listen, even if filter is t. (Fset_process_query_on_exit_flag, Fprocess_query_on_exit_flag): New functions. (Fprocess_kill_without_query): Removed. Now defined in simple.el. (Fprocess_contact): Added KEY argument. Handle datagrams. (list_processes_1): Optionally show only processes with the query on exit flag set. Dynamically adjust column widths. Omit tty column if not needed. Report stopped network processes. Identify server and datagram network processes. (Flist_processes): New optional arg `query-only'. (conv_sockaddr_to_lisp, get_lisp_to_sockaddr_size) (conv_lisp_to_sockaddr, set_socket_options) (network_process_featurep, unwind_request_sigio): New helper functions. (Fprocess_datagram_address, Fset_process_datagram_address): (Fset_network_process_options): New lisp functions. (Fopen_network_stream): Removed. Now defined in simple.el. (Fmake_network_process): New lisp function. Code is based on previous Fopen_network_stream, but heavily reworked with new property list based argument list, support for datagrams, server processes, and local sockets in addition to old client-only functionality. (server_accept_connection): New function. (wait_reading_process_input): Use it to handle incoming connects. Do not enable input on a new connection if process is stopped. (read_process_output): Handle datagram sockets. Use 2k buffer for them. (send_process): Handle datagram sockets. (Fstop_process, Fcontinue_process): Apply to network processes. A stopped network process is indicated by setting command field to t . (Fprocess_send_eof): No-op if datagram connection. (Fstatus_notify): Don't read input for a stream server socket or a stopped network process. (init_process): Initialize datagram_address array. (syms_of_process): Intern and staticpro new variables, defsubr new functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 17 Mar 2002 20:20:33 +0000
parents 6bd3c93022e7
children 695cf19ef79e d7ddb3e565de
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
38500
3db3b0888252 (parse_changelog): Add test for defined value to
Gerd Moellmann <gerd@gnu.org>
parents: 29638
diff changeset
3 # Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
4 #
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
5 # This file is part of GNU Emacs.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
6 #
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
7 # GNU Emacs is free software; you can redistribute it and/or modify
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
8 # it under the terms of the GNU General Public License as published by
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
9 # the Free Software Foundation; either version 2, or (at your option)
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
10 # any later version.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
11 #
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
12 # GNU Emacs is distributed in the hope that it will be useful,
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
15 # GNU General Public License for more details.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
16 #
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
17 # You should have received a copy of the GNU General Public License
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
18 # along with GNU Emacs; see the file COPYING. If not, write to the
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
19 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
20 # Boston, MA 02111-1307, USA.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
21
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
23 # Extract entries from ChangeLogs matching specified criteria.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
24 # Optionally format the resulting output to a form suitable for RCS
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
25 # 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
26 # author lines, leading spaces, and file names are removed.
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
28 require 5;
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
29 use strict;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
31 # Parse command line options.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
32
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
33 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
34 $rcs_log $with_date $version $help $reverse
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
35 @entries);
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
36
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 use Getopt::Long;
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
38 my $result = GetOptions ("author=s" => \$author,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
39 "text=s" => \$regexp,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
40 "exclude=s" => \$exclude,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
41 "from-date=s" => \$from_date,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
42 "to-date=s" => \$to_date,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
43 "rcs-log" => \$rcs_log,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
44 "with-date" => \$with_date,
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
45 "reverse!" => \$reverse,
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
46 "version" => \$version,
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
47 "help" => \$help);
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 # If date options are specified, check that they have the format
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 # YYYY-MM-DD.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 $result = 0 if $from_date && $from_date !~ /^\d\d\d\d-\d\d-\d\d$/;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53 $result = 0 if $to_date && $to_date !~ /^\d\d\d\d-\d\d-\d\d$/;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55 # Print usage information and exit when necessary.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57 if ($result == 0 || $help) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 print <<USAGE;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59 Usage: $0 [options] [CHANGELOG...]
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 Print entries in ChangeLogs matching various criteria. Valid options
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61 are
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
63 --author=AUTHOR match entries whose author line matches
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64 regular expression AUTHOR
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 --text=TEXT match entries whose text matches regular
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66 expression TEXT.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 --exclude=TEXT exclude entries matching TEXT.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68 --from-date=YYYY-MM-DD match entries not older than given date
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 --to-date=YYYY-MM-DD match entries not younger than given date
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70 --rcs-log format output suitable for RCS log entries.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
71 --with-date print short date line in RCS log
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
72 --reverse show entries in reverse (chronological) order
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
73 --version print version info
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
74 --help print this help
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
75
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
76 If no CHANGELOG is specified scan the files "ChangeLog" and
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
77 "ChangeLog.[9-1]" in the current directory. Old-style dates in ChangeLogs
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
78 are not recognized.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 USAGE
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
80 exit $help ? 0 : 1;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
81 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
82
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 # Print version info and exit if `--version' was specified.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
85 if ($version) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86 print "0.1\n";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 exit 0;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91 # Value is non-zero if HEADER matches according to command line
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 # options specified, i.e. it matches $author, and its date is in
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 # the range $from_date <= date <= $to_date.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95 sub header_match_p ($) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 my $header = shift;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97
38502
180f542bf5b4 (entry_match_p, header_match_p): Fix handling of null or empty
Gerd Moellmann <gerd@gnu.org>
parents: 38500
diff changeset
98 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
99
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 # No match if AUTHOR-regexp specified and doesn't match.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101 return 0 if $author && $header !~ /$author/;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 # Check that the date of the entry matches if date options
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104 # `--from-date' and/or `--to-date' were specified . Old-style
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 # dates in ChangeLogs are not recognized, and never match.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106 if ($from_date || $to_date) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 if ($header =~ /^(\d\d\d\d-\d\d-\d\d)/) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108 my $date = $1;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 return 0 if $from_date && $date lt $from_date;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 return 0 if $to_date && $date gt $to_date;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 } else {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 # Don't bother recognizing old-style dates.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 return 0;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 return 1;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
121 # Value is non-zero if ENTRY matches the criteria specified on the
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 # command line, i.e. it matches $regexp, and it doesn't match
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 # $exclude.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 sub entry_match_p ($) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 my $entry = shift;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127
38502
180f542bf5b4 (entry_match_p, header_match_p): Fix handling of null or empty
Gerd Moellmann <gerd@gnu.org>
parents: 38500
diff changeset
128 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
129
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 if ($regexp) {
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
131 return 1 if ($entry =~ /$regexp/
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132 && (!$exclude || $entry !~ $exclude));
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 } else {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 return 1 if !$exclude || $entry !~ $exclude;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137 return 0;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
140
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141 # Print HEADER and/or ENTRY in a format suitable for what was
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 # specified on the command line. If $rcs_log is specified, author
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143 # lines are not printed, and leading spaces and file names are removed
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144 # from ChangeLog entries.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 sub print_log ($$) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 my ($header, $entry) = @_;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
148 my $output = '';
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 if ($rcs_log) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 # Remove leading whitespace from entry.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 $entry =~ s/^\s+//mg;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 # Remove file name parts.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154 $entry =~ s/^\*.*\(/(/mg;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155 # Remove file name parts, 2.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 $entry =~ s/^\*.*://mg;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 if ($with_date) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 $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
159 $output = "!changelog-date $1\n";
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160 }
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
161 $output .= $entry;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 } else {
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
163 $output .= $header . $entry;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
164 }
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
165
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
166 if ($reverse) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
167 push @entries, $output;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
168 } else {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
169 print $output;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 # Scan LOG for matching entries, and print them to standard output.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 sub parse_changelog ($) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 my $log = shift;
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
177 my $entry = undef;
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
178 my $header = undef;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
179
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
180 @entries = () if $reverse;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 # Open the ChangeLog.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 open (IN, "< $log") || die "Cannot open $log: $!";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184
38509
59acf1c91dd2 (main, parse_changelog): Make "use strict"-clean.
Gerd Moellmann <gerd@gnu.org>
parents: 38504
diff changeset
185 while (defined(my $line = <IN>)) {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 if ($line =~ /^\S/) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187 # Line is an author-line. Print previous entry if
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 # it matches.
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
189 print_log ($header, $entry)
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 if header_match_p ($header) && entry_match_p ($entry);
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 $entry = "";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 $header = $line;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 # 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
196 while (defined($line = <IN>) && $line =~ /^\s*$/) {
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 $header = "$header$line";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 }
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
199 }
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200
38504
1d53627a58ae (parse_changelog): Add another test for defined value to
Gerd Moellmann <gerd@gnu.org>
parents: 38502
diff changeset
201 last unless defined $line;
1d53627a58ae (parse_changelog): Add another test for defined value to
Gerd Moellmann <gerd@gnu.org>
parents: 38502
diff changeset
202
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 if ($line =~ /^\s*\*/) {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 # LINE is the first line of a ChangeLog entry. Print
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 # previous entry if it matches.
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
206 print_log ($header, $entry)
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 if header_match_p ($header) && entry_match_p ($entry);
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 $entry = $line;
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 } else {
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 # Add LINE to the current entry.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 $entry = "$entry$line";
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 # Print last entry if it matches.
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
216 print_log ($header, $entry)
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 if header_match_p ($header) && entry_match_p ($entry);
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 close IN;
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
220
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
221 if ($reverse) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
222 while (defined (my $entry = pop @entries)) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
223 print $entry;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
224 }
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
225 }
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 # Main program. Process ChangeLogs.
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230
38551
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
231 # 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
232 # order supplied by the user; otherwise parse default files ChangeLog and
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
233 # ChangeLog.9...ChangeLog.1 according to $reverse.
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
234 unless (@ARGV > 0) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
235 @ARGV = ("ChangeLog", map {"ChangeLog.$_"} reverse 1..9);
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
236 @ARGV = reverse @ARGV if $reverse;
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
237 }
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
238
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
239 while (defined (my $log = shift @ARGV)) {
6bd3c93022e7 (parse_changelog): Remove unused local variable.
Gerd Moellmann <gerd@gnu.org>
parents: 38510
diff changeset
240 parse_changelog ($log) if -f $log;
25216
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 }
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242
40dc181e545b Initial revision
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243
29638
f6a97d806845 Fix typos in comments. Remove trailing blanks.
Jim Meyering <jim@meyering.net>
parents: 28823
diff changeset
244 # grep-changelog ends here.