annotate lib-src/rcs2log @ 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 794f724ca655
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12507
da322c027bf0 Replace `#!/bin/sh' with `#! /bin/sh', for benefit of systems
Paul Eggert <eggert@twinsun.com>
parents: 12408
diff changeset
1 #! /bin/sh
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
2
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
3 # RCS to ChangeLog generator
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
4
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
5 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002, 2003,
112094
794f724ca655 Set short copyright year to 2011.
Glenn Morris <rgm@gnu.org>
parents: 106790
diff changeset
6 # 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
794f724ca655 Set short copyright year to 2011.
Glenn Morris <rgm@gnu.org>
parents: 106790
diff changeset
7 # Free Software Foundation, Inc.
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
8
101095
68e6b02ce6b6 Comment (add Author: header).
Glenn Morris <rgm@gnu.org>
parents: 100898
diff changeset
9 # Author: Paul Eggert <eggert@twinsun.com>
68e6b02ce6b6 Comment (add Author: header).
Glenn Morris <rgm@gnu.org>
parents: 100898
diff changeset
10
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
11 # This program is free software: you can redistribute it and/or modify
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
12 # it under the terms of the GNU General Public License as published by
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
13 # 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
14 # (at your option) any later version.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
15
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
16 # This program is distributed in the hope that it will be useful,
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
19 # GNU General Public License for more details.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
20
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
21 # You should have received a copy of the GNU General Public License
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
22 # along with this program. If not, see <http://www.gnu.org/licenses/>.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
23
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
24
112094
794f724ca655 Set short copyright year to 2011.
Glenn Morris <rgm@gnu.org>
parents: 106790
diff changeset
25 Copyright='Copyright (C) 2011 Free Software Foundation, Inc.
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
26 This program comes with NO WARRANTY, to the extent permitted by law.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
27 You may redistribute copies of this program
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
28 under the terms of the GNU General Public License.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
29 For more information about these matters, see the files named COPYING.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
30 Author: Paul Eggert <eggert@twinsun.com>'
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 79748
diff changeset
31
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
32 Help='
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
33 Generate ChangeLog entries from RCS files (perhaps in a CVS repository)
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
34 and the ChangeLog file (if any). An RCS file typically has a name
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
35 ending in ",v", and represents the entire history of a file that is
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
36 under revision control. The ChangeLog file logs entries for changes,
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
37 in reverse chronological order.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
38
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
39 Generate entries for changes entered into RCS (or CVS) more recently
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
40 than the newest existing entry in the ChangeLog file. You can then
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
41 edit these entries by hand, and prepend them to the ChangeLog file.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
42
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
43 Output the resulting ChangeLog entries to standard output.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
44 Each entry looks something like this:
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
45
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
46 2004-04-17 Paul Eggert <eggert@gnu.org>
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
47
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
48 * rcs2log (Help): Clarify wording of the usage message.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
49 Problem reported by Alan Mackenzie in
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
50 <http://mail.gnu.org/archive/html/bug-gnu-emacs/2004-04/msg00188.html>.
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
51
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
52 ChangeLog entries contain the current date, full name, email address
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
53 including hostname, the name of the affected file, and commentary.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
54 RCS and CVS logs lack full names and email addresses, so they are
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
55 inferred from login names using a heuristic that can be overridden
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
56 via the -u option.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
57
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
58 Ignore log entries that start with "#".
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
59 Clump together log entries that start with "{topic} ",
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
60 where "topic" contains neither white space nor "}".
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
61
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
62 If no FILE is specified, use all files under the working directory
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
63 that are maintained under version control.
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
64
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
65 Options:
1800
05cb79ebdb23 Add copyright and authorship notices.
Paul Eggert <eggert@twinsun.com>
parents: 1228
diff changeset
66
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
67 -c FILE Output ChangeLog entries for FILE (default ChangeLog).
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
68 -h HOSTNAME Use HOSTNAME in change log entries (default current host).
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
69 -i INDENT Indent change log lines by INDENT spaces (default 8).
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
70 -l LENGTH Try to limit log lines to LENGTH characters (default 79).
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
71 -L FILE Use FILE (same format as "rlog") for source of logs.
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
72 -R If no FILEs are given and RCS is used, recurse through working directory.
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
73 -r OPTION Pass OPTION to subsidiary command (either "rlog" or "cvs -q log").
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
74 -t TABWIDTH Tab stops are every TABWIDTH characters (default 8).
54965
860258597b78 * rcs2log (Help): Clarify wording of the usage message.
Paul Eggert <eggert@twinsun.com>
parents: 53947
diff changeset
75 -u "LOGIN<tab>FULLNAME<tab>EMAILADDR" LOGIN has FULLNAME and EMAILADDR.
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
76 -v Append RCS revision to file names in log lines.
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
77 --help Output help.
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
78 --version Output version number.
1800
05cb79ebdb23 Add copyright and authorship notices.
Paul Eggert <eggert@twinsun.com>
parents: 1228
diff changeset
79
23008
26e379429f7f Update bug report address and copyright.
Paul Eggert <eggert@twinsun.com>
parents: 23002
diff changeset
80 Report bugs to <bug-gnu-emacs@gnu.org>.'
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
81
64083
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 54965
diff changeset
82 Id='$Id$'
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
83
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
84 # Use the traditional C locale.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
85 LANG=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
86 LANGUAGE=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
87 LC_ALL=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
88 LC_COLLATE=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
89 LC_CTYPE=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
90 LC_MESSAGES=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
91 LC_NUMERIC=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
92 LC_TIME=C
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
93 export LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_TIME
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
94
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
95 # These variables each contain a single ASCII character.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
96 # Unfortunately, there's no portable way of writing these characters
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
97 # in older Unix implementations, other than putting them directly into
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
98 # this text file.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
99 SOH='' # SOH, octal code 001
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
100 tab=' '
3248
9ee93fc9aba0 When given no file arguments, inspect RCS/.* as well
Richard M. Stallman <rms@gnu.org>
parents: 2639
diff changeset
101 nl='
9ee93fc9aba0 When given no file arguments, inspect RCS/.* as well
Richard M. Stallman <rms@gnu.org>
parents: 2639
diff changeset
102 '
1800
05cb79ebdb23 Add copyright and authorship notices.
Paul Eggert <eggert@twinsun.com>
parents: 1228
diff changeset
103
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
104 # Parse options.
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
105
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
106 # defaults
43097
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
107 AWK=${AWK-awk}
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
108 TMPDIR=${TMPDIR-/tmp}
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
109 changelog=ChangeLog # change log file name
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
110 datearg= # rlog date option
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
111 hostname= # name of local host (if empty, will deduce it later)
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
112 indent=8 # indent of log line
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
113 length=79 # suggested max width of log line
11627
2f0766bf8315 (datearg): If rlog options are specified explicitly,
Paul Eggert <eggert@twinsun.com>
parents: 11099
diff changeset
114 logins= # login names for people we know fullnames and mailaddrs of
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
115 loginFullnameMailaddrs= # login<tab>fullname<tab>mailaddr triplets
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
116 logTZ= # time zone for log dates (if empty, use local time)
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
117 recursive= # t if we want recursive rlog
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
118 revision= # t if we want revision numbers
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
119 rlog_options= # options to pass to rlog
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
120 rlogfile= # log file to read from
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
121 tabwidth=8 # width of horizontal tab
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
122
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
123 while :
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
124 do
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
125 case $1 in
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
126 -c) changelog=${2?}; shift;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
127 -i) indent=${2?}; shift;;
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
128 -h) hostname=${2?}; shift;;
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
129 -l) length=${2?}; shift;;
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
130 -L) rlogfile=${2?}; shift;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
131 -[nu]) # -n is obsolescent; it is replaced by -u.
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
132 case $1 in
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
133 -n) case ${2?}${3?}${4?} in
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
134 *"$tab"* | *"$nl"*)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
135 echo >&2 "$0: -n '$2' '$3' '$4': tabs, newlines not allowed"
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
136 exit 1;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
137 esac
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
138 login=$2
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
139 lfm=$2$tab$3$tab$4
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
140 shift; shift; shift;;
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
141 -u)
11082
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
142 # If $2 is not tab-separated, use colon for separator.
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
143 case ${2?} in
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
144 *"$nl"*)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
145 echo >&2 "$0: -u '$2': newlines not allowed"
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
146 exit 1;;
11082
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
147 *"$tab"*)
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
148 t=$tab;;
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
149 *)
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
150 t=':';;
11082
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
151 esac
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
152 case $2 in
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
153 *"$t"*"$t"*"$t"*)
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
154 echo >&2 "$0: -u '$2': too many fields"
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
155 exit 1;;
11082
aee85fcd9d25 Treat -u 'LOGIN:FULLNAME:MAILADDR' as if it were
Paul Eggert <eggert@twinsun.com>
parents: 11073
diff changeset
156 *"$t"*"$t"*)
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
157 uf="[^$t]*$t" # An unselected field, followed by a separator.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
158 sf="\\([^$t]*\\)" # The selected field.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
159 login=`expr "X$2" : "X$sf"`
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
160 lfm="$login$tab"`
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
161 expr "X$2" : "$uf$sf"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
162 `"$tab"`
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
163 expr "X$2" : "$uf$uf$sf"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
164 `;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
165 *)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
166 echo >&2 "$0: -u '$2': not enough fields"
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
167 exit 1;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
168 esac
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
169 shift;;
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
170 esac
17741
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
171 case $logins in
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
172 '') logins=$login;;
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
173 ?*) logins=$logins$nl$login;;
17741
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
174 esac
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
175 case $loginFullnameMailaddrs in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
176 '') loginFullnameMailaddrs=$lfm;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
177 ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$lfm;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
178 esac;;
17741
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
179 -r)
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
180 case $rlog_options in
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
181 '') rlog_options=${2?};;
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
182 ?*) rlog_options=$rlog_options$nl${2?};;
17741
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
183 esac
0c832661d9b4 (loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl
Paul Eggert <eggert@twinsun.com>
parents: 17740
diff changeset
184 shift;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
185 -R) recursive=t;;
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
186 -t) tabwidth=${2?}; shift;;
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
187 -v) revision=t;;
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
188 --version)
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
189 set $Id
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
190 rcs2logVersion=$3
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
191 echo >&2 "rcs2log (GNU Emacs) $rcs2logVersion$nl$Copyright"
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
192 exit 0;;
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
193 -*) echo >&2 "Usage: $0 [OPTION]... [FILE ...]$nl$Help"
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
194 case $1 in
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
195 --help) exit 0;;
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
196 *) exit 1;;
16899
04ad9edd12b3 --help, --version: New options, for conformance to GNU coding standards.
Paul Eggert <eggert@twinsun.com>
parents: 16507
diff changeset
197 esac;;
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
198 *) break;;
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
199 esac
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
200 shift
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
201 done
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
202
2220
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
203 month_data='
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
204 m[0]="Jan"; m[1]="Feb"; m[2]="Mar"
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
205 m[3]="Apr"; m[4]="May"; m[5]="Jun"
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
206 m[6]="Jul"; m[7]="Aug"; m[8]="Sep"
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
207 m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
208 '
66371f0b8aff Some awks don't understand "\r". Code around this.
Paul Eggert <eggert@twinsun.com>
parents: 1800
diff changeset
209
35016
731a7aca9458 Avoid security hole allowing attacker to
Gerd Moellmann <gerd@gnu.org>
parents: 23008
diff changeset
210 logdir=$TMPDIR/rcs2log$$
731a7aca9458 Avoid security hole allowing attacker to
Gerd Moellmann <gerd@gnu.org>
parents: 23008
diff changeset
211 llogout=$logdir/l
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
212 trap exit 1 2 13 15
35016
731a7aca9458 Avoid security hole allowing attacker to
Gerd Moellmann <gerd@gnu.org>
parents: 23008
diff changeset
213 trap "rm -fr $logdir 2>/dev/null" 0
731a7aca9458 Avoid security hole allowing attacker to
Gerd Moellmann <gerd@gnu.org>
parents: 23008
diff changeset
214 (umask 077 && exec mkdir $logdir) || exit
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
215
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
216 # If no rlog-format log file is given, generate one into $rlogfile.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
217 case $rlogfile in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
218 '')
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
219 rlogfile=$logdir/r
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
220
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
221 # If no rlog options are given,
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
222 # log the revisions checked in since the first ChangeLog entry.
53317
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
223 # Since ChangeLog is only by date, some of these revisions may be
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
224 # duplicates of what's already in ChangeLog; it's the user's
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
225 # responsibility to remove them.
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
226 case $rlog_options in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
227 '')
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
228 if test -s "$changelog"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
229 then
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
230 e='
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
231 /^[0-9]+-[0-9][0-9]-[0-9][0-9]/{
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
232 # ISO 8601 date
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
233 print $1
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
234 exit
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
235 }
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
236 /^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
237 # old-fashioned date and time (Emacs 19.31 and earlier)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
238 '"$month_data"'
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
239 year = $5
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
240 for (i=0; i<=11; i++) if (m[i] == $2) break
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
241 dd = $3
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
242 printf "%d-%02d-%02d\n", year, i+1, dd
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
243 exit
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
244 }
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
245 '
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
246 d=`$AWK "$e" <"$changelog"` || exit
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
247 case $d in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
248 ?*) datearg="-d>$d";;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
249 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
250 fi;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
251 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
252
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
253 # Use TZ specified by ChangeLog local variable, if any.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
254 if test -s "$changelog"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
255 then
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
256 extractTZ='
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
257 /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*"\([^"]*\)".*/{
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
258 s//\1/; p; q
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
259 }
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
260 /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*t.*/{
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
261 s//UTC0/; p; q
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
262 }
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
263 '
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
264 logTZ=`tail "$changelog" | sed -n "$extractTZ"`
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
265 case $logTZ in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
266 ?*) TZ=$logTZ; export TZ;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
267 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
268 fi
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
269
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
270 # If CVS is in use, examine its repository, not the normal RCS files.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
271 if test ! -f CVS/Repository
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
272 then
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
273 rlog=rlog
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
274 repository=
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
275 else
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
276 rlog='cvs -q log'
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
277 repository=`sed 1q <CVS/Repository` || exit
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
278 test ! -f CVS/Root || CVSROOT=`cat <CVS/Root` || exit
53947
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
279 pository=
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
280 case $CVSROOT in
53947
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
281 /* | :fork:* | :local:*) ;;
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
282 */*)
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
283 # remote repository
53947
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
284 pository=`expr "X$CVSROOT" : '[^/]*\(.*\)'`;;
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
285 esac
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
286 case $pository in
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
287 '')
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
288 # local repository
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
289 case $repository in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
290 /*) ;;
53947
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
291 *)
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
292 repository=${CVSROOT?}/$repository
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
293 case $repository in
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
294 :fork:* | :local:*)
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
295 repository=`expr "$repository" : ':[^:]*:\(.*\)'`;;
8f3f4ab62a69 Work correctly if CVSROOT specifies :fork: or
Paul Eggert <eggert@twinsun.com>
parents: 53317
diff changeset
296 esac;;
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
297 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
298 if test ! -d "$repository"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
299 then
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
300 echo >&2 "$0: $repository: bad repository (see CVS/Repository)"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
301 exit 1
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
302 fi
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
303 pository=$repository;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
304 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
305
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
306 # Ensure that $pository ends in exactly one slash.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
307 while :
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
308 do
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
309 case $pository in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
310 *//) pository=`expr "X$pository" : 'X\(.*\)/'`;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
311 */) break;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
312 *) pository=$pository/; break;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
313 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
314 done
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
315
53317
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
316 # If no rlog options are given, and if we are in a tagged CVS branch,
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
317 # log only the changes in that branch.
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
318 case $rlog_options in
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
319 '')
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
320 if test -f CVS/Tag
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
321 then
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
322 CVSTAG=`cat <CVS/Tag` || exit
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
323 case $CVSTAG in
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
324 T?*)
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
325 rlog_options=-r`expr "$CVSTAG" : 'T\(.*\)'`;;
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
326 *)
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
327 echo >&2 "$0: invalid CVS/Tag"; exit 1;;
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
328 esac
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
329 fi;;
2ca480ce7e51 (rlog_options): Append -rbranchtag if CVS/Tag indicates
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
330 esac
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
331 fi
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
332
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
333 # Use $rlog's -zLT option, if $rlog supports it.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
334 case `$rlog -zLT 2>&1` in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
335 *' option'*) ;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
336 *)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
337 case $rlog_options in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
338 '') rlog_options=-zLT;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
339 ?*) rlog_options=-zLT$nl$rlog_options;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
340 esac;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
341 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
342
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
343 # With no arguments, examine all files under the RCS directory.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
344 case $# in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
345 0)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
346 case $repository in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
347 '')
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
348 oldIFS=$IFS
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
349 IFS=$nl
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
350 case $recursive in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
351 t)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
352 RCSdirs=`find . -name RCS -type d -print`
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
353 filesFromRCSfiles='s|,v$||; s|/RCS/|/|; s|^\./||'
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
354 files=`
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
355 {
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
356 case $RCSdirs in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
357 ?*) find $RCSdirs \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
358 -type f \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
359 ! -name '*_' \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
360 ! -name ',*,' \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
361 ! -name '.*_' \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
362 ! -name .rcsfreeze.log \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
363 ! -name .rcsfreeze.ver \
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
364 -print;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
365 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
366 find . -name '*,v' -print
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
367 } |
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
368 sort -u |
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
369 sed "$filesFromRCSfiles"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
370 `;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
371 *)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
372 files=
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
373 for file in RCS/.* RCS/* .*,v *,v
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
374 do
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
375 case $file in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
376 RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
377 RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
378 RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
379 RCS/*,v | RCS/.*,v) ;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
380 RCS/* | RCS/.*) test -f "$file" || continue;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
381 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
382 case $files in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
383 '') files=$file;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
384 ?*) files=$files$nl$file;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
385 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
386 done
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
387 case $files in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
388 '') exit 0;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
389 esac;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
390 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
391 set x $files
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
392 shift
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
393 IFS=$oldIFS;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
394 esac;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
395 esac
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
396
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
397 case $datearg in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
398 ?*) $rlog $rlog_options "$datearg" ${1+"$@"} >$rlogfile;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
399 '') $rlog $rlog_options ${1+"$@"} >$rlogfile;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
400 esac || exit;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
401 esac
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
402
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
403
43097
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
404 # Prefer the POSIX-style -k options, since POSIX 1003.1-2001 prohibits
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
405 # support for the traditional-style +M -N options.
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
406 SORT_K_OPTIONS='-k 3,4r -k 5 -k 1'
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
407 sort $SORT_K_OPTIONS </dev/null 2>/dev/null || SORT_K_OPTIONS='+2 -4r +4 +0'
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
408
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
409
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
410 # Get the full name of each author the logs mention, and set initialize_fullname
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
411 # to awk code that initializes the `fullname' awk associative array.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
412 # Warning: foreign authors (i.e. not known in the passwd file) are mishandled;
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
413 # you have to fix the resulting output by hand.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
414
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
415 initialize_fullname=
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
416 initialize_mailaddr=
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
417
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
418 case $loginFullnameMailaddrs in
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
419 ?*)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
420 case $loginFullnameMailaddrs in
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
421 *\"* | *\\*)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
422 sed 's/["\\]/\\&/g' >$llogout <<EOF || exit
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
423 $loginFullnameMailaddrs
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
424 EOF
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
425 loginFullnameMailaddrs=`cat $llogout`;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
426 esac
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
427
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
428 oldIFS=$IFS
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
429 IFS=$nl
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
430 for loginFullnameMailaddr in $loginFullnameMailaddrs
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
431 do
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
432 IFS=$tab
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
433 set x $loginFullnameMailaddr
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
434 login=$2
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
435 fullname=$3
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
436 mailaddr=$4
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
437 initialize_fullname="$initialize_fullname
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
438 fullname[\"$login\"] = \"$fullname\""
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
439 initialize_mailaddr="$initialize_mailaddr
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
440 mailaddr[\"$login\"] = \"$mailaddr\""
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
441 done
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
442 IFS=$oldIFS;;
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
443 esac
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
444
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
445 case $logins in
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
446 ?*)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
447 sort -u -o $llogout <<EOF
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
448 $logins
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
449 EOF
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
450 ;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
451 '')
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
452 : ;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
453 esac >$llogout || exit
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
454
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
455 output_authors='/^date: / {
12066
b9b0b3f96dc2 (output_authors): Allow ':' in time zone, as per ISO 8601 and RCS 5.6.8 beta.
Paul Eggert <eggert@twinsun.com>
parents: 11627
diff changeset
456 if ($2 ~ /^[0-9]*[-\/][0-9][0-9][-\/][0-9][0-9]$/ && $3 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9:]*;$/ && $4 == "author:" && $5 ~ /^[^;]*;$/) {
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
457 print substr($5, 1, length($5)-1)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
458 }
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
459 }'
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
460 authors=`
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
461 $AWK "$output_authors" <"$rlogfile" | sort -u | comm -23 - $llogout
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
462 `
640
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
463 case $authors in
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
464 ?*)
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
465 cat >$llogout <<EOF || exit
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
466 $authors
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
467 EOF
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
468 initialize_author_script='s/["\\]/\\&/g; s/.*/author[\"&\"] = 1/'
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
469 initialize_author=`sed -e "$initialize_author_script" <$llogout`
640
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
470 awkscript='
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
471 BEGIN {
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
472 alphabet = "abcdefghijklmnopqrstuvwxyz"
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
473 ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
474 '"$initialize_author"'
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
475 }
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
476 {
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
477 if (author[$1]) {
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
478 fullname = $5
4504
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
479 if (fullname ~ /[0-9]+-[^(]*\([0-9]+\)$/) {
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
480 # Remove the junk from fullnames like "0000-Admin(0000)".
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
481 fullname = substr(fullname, index(fullname, "-") + 1)
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
482 fullname = substr(fullname, 1, index(fullname, "(") - 1)
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
483 }
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
484 if (fullname ~ /,[^ ]/) {
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
485 # Some sites put comma-separated junk after the fullname.
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
486 # Remove it, but leave "Bill Gates, Jr" alone.
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
487 fullname = substr(fullname, 1, index(fullname, ",") - 1)
65ef94a9e2c4 (awkscript): Some sites put comma-separated junk after the fullname.
Paul Eggert <eggert@twinsun.com>
parents: 3248
diff changeset
488 }
640
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
489 abbr = index(fullname, "&")
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
490 if (abbr) {
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
491 a = substr($1, 1, 1)
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
492 A = a
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
493 i = index(alphabet, a)
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
494 if (i) A = substr(ALPHABET, i, 1)
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
495 fullname = substr(fullname, 1, abbr-1) A substr($1, 2) substr(fullname, abbr+1)
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
496 }
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
497
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
498 # Quote quotes and backslashes properly in full names.
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
499 # Do not use gsub; traditional awk lacks it.
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
500 quoted = ""
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
501 rest = fullname
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
502 for (;;) {
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
503 p = index(rest, "\\")
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
504 q = index(rest, "\"")
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
505 if (p) {
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
506 if (q && q<p) p = q
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
507 } else {
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
508 if (!q) break
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
509 p = q
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
510 }
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
511 quoted = quoted substr(rest, 1, p-1) "\\" substr(rest, p, 1)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
512 rest = substr(rest, p+1)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
513 }
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
514
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
515 printf "fullname[\"%s\"] = \"%s%s\"\n", $1, quoted, rest
640
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
516 author[$1] = 0
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
517 }
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
518 }
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
519 '
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
520
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
521 initialize_fullname=`
22999
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
522 {
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
523 (getent passwd $authors) ||
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
524 (
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
525 cat /etc/passwd
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
526 for author in $authors
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
527 do NIS_PATH= nismatch $author passwd.org_dir
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
528 done
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
529 ypmatch $authors passwd
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
530 )
5ec968f5560c (initialize_fullname): Prefer getent if available.
Paul Eggert <eggert@twinsun.com>
parents: 18452
diff changeset
531 } 2>/dev/null |
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
532 $AWK -F: "$awkscript"
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
533 `$initialize_fullname;;
640
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
534 esac
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
535
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
536
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
537 # Function to print a single log line.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
538 # We don't use awk functions, to stay compatible with old awk versions.
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
539 # `Log' is the log message.
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
540 # `files' contains the affected files.
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
541 printlogline='{
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
542
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
543 # Following the GNU coding standards, rewrite
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
544 # * file: (function): comment
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
545 # to
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
546 # * file (function): comment
41649
41d73d9565de (Copyright): Add '(C)' as per coding guidelines.
Paul Eggert <eggert@twinsun.com>
parents: 39150
diff changeset
547 if (Log ~ /^\([^)]*\):[\t\n ]/) {
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
548 i = index(Log, ")")
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
549 filefunc = substr(Log, 1, i)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
550 while ((j = index(filefunc, "\n"))) {
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
551 files = files " " substr(filefunc, 1, j-1)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
552 filefunc = substr(filefunc, j+1)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
553 }
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
554 files = files " " filefunc
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
555 Log = substr(Log, i+3)
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
556 }
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
557
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
558 # If "label: comment" is too long, break the line after the ":".
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
559 sep = " "
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
560 i = index(Log, "\n")
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
561 if ('"$length"' <= '"$indent"' + 1 + length(files) + i) sep = "\n" indent_string
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
562
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
563 # Print the label.
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
564 printf "%s*%s:", indent_string, files
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
565
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
566 # Print each line of the log.
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
567 while (i) {
4858
5b4f9564bfaf (printlogline): Don't generate lines containing only white space.
Paul Eggert <eggert@twinsun.com>
parents: 4783
diff changeset
568 logline = substr(Log, 1, i-1)
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
569 if (logline ~ /[^'"$tab"' ]/) {
4858
5b4f9564bfaf (printlogline): Don't generate lines containing only white space.
Paul Eggert <eggert@twinsun.com>
parents: 4783
diff changeset
570 printf "%s%s\n", sep, logline
5b4f9564bfaf (printlogline): Don't generate lines containing only white space.
Paul Eggert <eggert@twinsun.com>
parents: 4783
diff changeset
571 } else {
5b4f9564bfaf (printlogline): Don't generate lines containing only white space.
Paul Eggert <eggert@twinsun.com>
parents: 4783
diff changeset
572 print ""
5b4f9564bfaf (printlogline): Don't generate lines containing only white space.
Paul Eggert <eggert@twinsun.com>
parents: 4783
diff changeset
573 }
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
574 sep = indent_string
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
575 Log = substr(Log, i+1)
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
576 i = index(Log, "\n")
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
577 }
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
578 }'
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
579
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
580 # Pattern to match the `revision' line of rlog output.
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
581 rlog_revision_pattern='^revision [0-9]+\.[0-9]+(\.[0-9]+\.[0-9]+)*(['"$tab"' ]+locked by: [^'"$tab"' $,.0-9:;@]*[^'"$tab"' $,:;@][^'"$tab"' $,.0-9:;@]*;)?['"$tab"' ]*$'
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
582
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
583 case $hostname in
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
584 '')
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
585 hostname=`(
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
586 hostname || uname -n || uuname -l || cat /etc/whoami
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
587 ) 2>/dev/null` || {
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
588 echo >&2 "$0: cannot deduce hostname"
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
589 exit 1
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
590 }
14173
940083ef25b9 (initialize_fullname): Add support for NIS+.
Paul Eggert <eggert@twinsun.com>
parents: 12509
diff changeset
591
940083ef25b9 (initialize_fullname): Add support for NIS+.
Paul Eggert <eggert@twinsun.com>
parents: 12509
diff changeset
592 case $hostname in
940083ef25b9 (initialize_fullname): Add support for NIS+.
Paul Eggert <eggert@twinsun.com>
parents: 12509
diff changeset
593 *.*) ;;
940083ef25b9 (initialize_fullname): Add support for NIS+.
Paul Eggert <eggert@twinsun.com>
parents: 12509
diff changeset
594 *)
940083ef25b9 (initialize_fullname): Add support for NIS+.
Paul Eggert <eggert@twinsun.com>
parents: 12509
diff changeset
595 domainname=`(domainname) 2>/dev/null` &&
940083ef25b9 (initialize_fullname): Add support for NIS+.
Paul Eggert <eggert@twinsun.com>
parents: 12509
diff changeset
596 case $domainname in
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
597 *.*) hostname=$hostname.$domainname;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
598 esac;;
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
599 esac;;
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
600 esac
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
601
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
602
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
603 # Process the rlog output, generating ChangeLog style entries.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
604
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
605 # First, reformat the rlog output so that each line contains one log entry.
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
606 # Transliterate \n to SOH so that multiline entries fit on a single line.
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
607 # Discard irrelevant rlog output.
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
608 $AWK '
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
609 BEGIN {
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
610 pository = "'"$pository"'"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
611 SOH="'"$SOH"'"
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
612 }
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
613 /^RCS file: / {
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
614 if (pository != "") {
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
615 filename = substr($0, 11)
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
616 if (substr(filename, 1, length(pository)) == pository) {
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
617 filename = substr(filename, length(pository) + 1)
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
618 }
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
619 if (filename ~ /,v$/) {
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
620 filename = substr(filename, 1, length(filename) - 2)
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
621 }
16507
08855b88e955 When processing cvs log output, remove `Attic/' from repository file names.
Paul Eggert <eggert@twinsun.com>
parents: 16438
diff changeset
622 if (filename ~ /(^|\/)Attic\/[^\/]*$/) {
08855b88e955 When processing cvs log output, remove `Attic/' from repository file names.
Paul Eggert <eggert@twinsun.com>
parents: 16438
diff changeset
623 i = length(filename)
08855b88e955 When processing cvs log output, remove `Attic/' from repository file names.
Paul Eggert <eggert@twinsun.com>
parents: 16438
diff changeset
624 while (substr(filename, i, 1) != "/") i--
08855b88e955 When processing cvs log output, remove `Attic/' from repository file names.
Paul Eggert <eggert@twinsun.com>
parents: 16438
diff changeset
625 filename = substr(filename, 1, i - 6) substr(filename, i + 1)
08855b88e955 When processing cvs log output, remove `Attic/' from repository file names.
Paul Eggert <eggert@twinsun.com>
parents: 16438
diff changeset
626 }
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
627 }
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
628 rev = "?"
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
629 }
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
630 /^Working file: / { if (repository == "") filename = substr($0, 15) }
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
631 /'"$rlog_revision_pattern"'/, /^(-----------*|===========*)$/ {
18452
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
632 line = $0
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
633 if (line ~ /'"$rlog_revision_pattern"'/) {
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
634 rev = $2
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
635 next
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
636 }
18452
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
637 if (line ~ /^date: [0-9][- +\/0-9:]*;/) {
8549
12b36ece5c25 Add support for CVS.
Paul Eggert <eggert@twinsun.com>
parents: 8496
diff changeset
638 date = $2
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
639 if (date ~ /\//) {
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
640 # This is a traditional RCS format date YYYY/MM/DD.
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
641 # Replace "/"s with "-"s to get ISO format.
8549
12b36ece5c25 Add support for CVS.
Paul Eggert <eggert@twinsun.com>
parents: 8496
diff changeset
642 newdate = ""
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
643 while ((i = index(date, "/")) != 0) {
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
644 newdate = newdate substr(date, 1, i-1) "-"
8549
12b36ece5c25 Add support for CVS.
Paul Eggert <eggert@twinsun.com>
parents: 8496
diff changeset
645 date = substr(date, i+1)
12b36ece5c25 Add support for CVS.
Paul Eggert <eggert@twinsun.com>
parents: 8496
diff changeset
646 }
12b36ece5c25 Add support for CVS.
Paul Eggert <eggert@twinsun.com>
parents: 8496
diff changeset
647 date = newdate date
12b36ece5c25 Add support for CVS.
Paul Eggert <eggert@twinsun.com>
parents: 8496
diff changeset
648 }
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
649 time = substr($3, 1, length($3) - 1)
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
650 author = substr($5, 1, length($5)-1)
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
651 printf "%s%s%s%s%s%s%s%s%s%s", filename, SOH, rev, SOH, date, SOH, time, SOH, author, SOH
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
652 rev = "?"
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
653 next
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
654 }
18452
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
655 if (line ~ /^branches: /) { next }
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
656 if (line ~ /^(-----------*|===========*)$/) { print ""; next }
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
657 if (line == "Initial revision" || line ~ /^file .+ was initially added on branch .+\.$/) {
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
658 line = "New file."
44e598b69b42 Don't assign to $0 in awk; some awks don't allow this.
Paul Eggert <eggert@twinsun.com>
parents: 17791
diff changeset
659 }
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
660 printf "%s%s", line, SOH
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
661 }
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
662 ' <"$rlogfile" |
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
663
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
664 # Now each line is of the form
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
665 # FILENAME@REVISION@YYYY-MM-DD@HH:MM:SS[+-TIMEZONE]@AUTHOR@LOG
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
666 # where @ stands for an SOH (octal code 001),
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
667 # and each line of LOG is terminated by SOH instead of \n.
640
36e7f4e402bd Call ypmatch at most once.
Paul Eggert <eggert@twinsun.com>
parents: 636
diff changeset
668 # Sort the log entries, first by date+time (in reverse order),
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
669 # then by author, then by log entry, and finally by file name and revision
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
670 # (just in case).
43097
c421297164e2 (Copyright): Update to 2002.
Paul Eggert <eggert@twinsun.com>
parents: 41649
diff changeset
671 sort -t"$SOH" $SORT_K_OPTIONS |
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
672
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
673 # Finally, reformat the sorted log entries.
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
674 $AWK -F"$SOH" '
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
675 BEGIN {
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
676 logTZ = "'"$logTZ"'"
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
677 revision = "'"$revision"'"
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
678
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
679 # Initialize the fullname and mailaddr associative arrays.
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
680 '"$initialize_fullname"'
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
681 '"$initialize_mailaddr"'
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
682
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
683 # Initialize indent string.
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
684 indent_string = ""
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
685 i = '"$indent"'
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
686 if (0 < '"$tabwidth"')
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
687 for (; '"$tabwidth"' <= i; i -= '"$tabwidth"')
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
688 indent_string = indent_string "\t"
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
689 while (1 <= i--)
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
690 indent_string = indent_string " "
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
691 }
636
dce8cdbac0ea Ignore log messages that start with `#'.
Paul Eggert <eggert@twinsun.com>
parents: 602
diff changeset
692
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
693 {
39150
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
694 newlog = ""
a56fcade3c7e (Help, mainline code): Add new option -L FILE.
Paul Eggert <eggert@twinsun.com>
parents: 38496
diff changeset
695 for (i = 6; i < NF; i++) newlog = newlog $i "\n"
636
dce8cdbac0ea Ignore log messages that start with `#'.
Paul Eggert <eggert@twinsun.com>
parents: 602
diff changeset
696
dce8cdbac0ea Ignore log messages that start with `#'.
Paul Eggert <eggert@twinsun.com>
parents: 602
diff changeset
697 # Ignore log entries prefixed by "#".
dce8cdbac0ea Ignore log messages that start with `#'.
Paul Eggert <eggert@twinsun.com>
parents: 602
diff changeset
698 if (newlog ~ /^#/) { next }
dce8cdbac0ea Ignore log messages that start with `#'.
Paul Eggert <eggert@twinsun.com>
parents: 602
diff changeset
699
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
700 if (Log != newlog || date != $3 || author != $5) {
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
701
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
702 # The previous log and this log differ.
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
703
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
704 # Print the old log.
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
705 if (date != "") '"$printlogline"'
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
706
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
707 # Logs that begin with "{clumpname} " should be grouped together,
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
708 # and the clumpname should be removed.
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
709 # Extract the new clumpname from the log header,
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
710 # and use it to decide whether to output a blank line.
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
711 newclumpname = ""
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
712 sep = "\n"
602
d2de231ee7f5 Don't duplicate most recent logs. Fix bug in dates after Feb 29 in leap year.
Paul Eggert <eggert@twinsun.com>
parents: 594
diff changeset
713 if (date == "") sep = ""
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
714 if (newlog ~ /^\{[^'"$tab"' }]*}['"$tab"' ]/) {
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
715 i = index(newlog, "}")
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
716 newclumpname = substr(newlog, 1, i)
11073
554c86f77db0 Add -u "login<tab>fullname<tab>mailaddr" option, which replaces the
Paul Eggert <eggert@twinsun.com>
parents: 8549
diff changeset
717 while (substr(newlog, i+1) ~ /^['"$tab"' ]/) i++
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
718 newlog = substr(newlog, i+1)
41649
41d73d9565de (Copyright): Add '(C)' as per coding guidelines.
Paul Eggert <eggert@twinsun.com>
parents: 39150
diff changeset
719 if (clumpname == newclumpname && date == $3 && author == $5) sep = ""
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
720 }
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
721 printf sep
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
722 clumpname = newclumpname
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
723
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
724 # Get ready for the next log.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
725 Log = newlog
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
726 if (files != "")
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
727 for (i in filesknown)
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
728 filesknown[i] = 0
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
729 files = ""
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
730 }
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
731 if (date != $3 || author != $5) {
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
732 # The previous date+author and this date+author differ.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
733 # Print the new one.
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
734 date = $3
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
735 time = $4
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
736 author = $5
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
737
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
738 zone = ""
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
739 if (logTZ && ((i = index(time, "-")) || (i = index(time, "+"))))
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
740 zone = " " substr(time, i)
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
741
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
742 # Print "date[ timezone] fullname <email address>".
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
743 # Get fullname and email address from associative arrays;
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
744 # default to author and author@hostname if not in arrays.
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
745 if (fullname[author])
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
746 auth = fullname[author]
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
747 else
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
748 auth = author
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
749 printf "%s%s %s ", date, zone, auth
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
750 if (mailaddr[author])
8496
2dba6eb73c65 Use <> to delimit email address.
Richard M. Stallman <rms@gnu.org>
parents: 4858
diff changeset
751 printf "<%s>\n\n", mailaddr[author]
4783
7c75802f5a8b Add -h, -n, -r options.
Paul Eggert <eggert@twinsun.com>
parents: 4654
diff changeset
752 else
8496
2dba6eb73c65 Use <> to delimit email address.
Richard M. Stallman <rms@gnu.org>
parents: 4858
diff changeset
753 printf "<%s@%s>\n\n", author, "'"$hostname"'"
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
754 }
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
755 if (! filesknown[$1]) {
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
756 filesknown[$1] = 1
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
757 if (files == "") files = " " $1
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
758 else files = files ", " $1
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
759 if (revision && $2 != "?") files = files " " $2
534
6f7abc0e1f10 Add -i, -l, -t.
Paul Eggert <eggert@twinsun.com>
parents: 527
diff changeset
760 }
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
761 }
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
762 END {
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
763 # Print the last log.
594
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
764 if (date != "") {
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
765 '"$printlogline"'
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
766 printf "\n"
efa0c124c178 Add clumpname support.
Paul Eggert <eggert@twinsun.com>
parents: 535
diff changeset
767 }
527
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
768 }
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
769 ' &&
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
770
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
771
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
772 # Exit successfully.
703fd28f892d Initial revision
Paul Eggert <eggert@twinsun.com>
parents:
diff changeset
773
35016
731a7aca9458 Avoid security hole allowing attacker to
Gerd Moellmann <gerd@gnu.org>
parents: 23008
diff changeset
774 exec rm -fr $logdir
15911
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
775
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
776 # Local Variables:
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
777 # tab-width:4
c9a152ad9c5a Use ISO 8601 date format, with time zone appended if
Erik Naggum <erik@naggum.no>
parents: 15742
diff changeset
778 # End:
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 43097
diff changeset
779