annotate lib-src/rcs2log @ 814:a634e3b7acc8

[xemacs-hg @ 2002-04-14 12:41:59 by ben] latest changes TODO.ben-mule-21-5: Update. make-docfile.c: Add basic support for handling ISO 2022 doc strings -- we parse the basic charset designation sequences so we know whether we're in ASCII and have to pay attention to end quotes and such. Reformat code according to coding standards. abbrev.el: Add `global-abbrev-mode', which turns on or off abbrev-mode in all buffers. Added `defining-abbrev-turns-on-abbrev-mode' -- if non-nil, defining an abbrev through an interactive function will automatically turn on abbrev-mode, either globally or locally depending on the command. This is the "what you'd expect" behavior. indent.el: general function for indenting a balanced expression in a mode-correct way. Works similar to indent-region in that a mode can specify a specific command to do the whole operation; if not, figure out the region using forward-sexp and indent each line using indent-according-to-mode. keydefs.el: Removed. Modify M-C-backslash to do indent-region-or-balanced-expression. Make S-Tab just insert a TAB char, like it's meant to do. make-docfile.el: Now that we're using the call-process-in-lisp, we need to load an extra file win32-native.el because we're running a bare temacs. menubar-items.el: Totally redo the Cmds menu so that most used commands appear directly on the menu and less used commands appear in submenus. The old way may have been very pretty, but rather impractical. process.el: Under Windows, don't ever use old-call-process-internal, even in batch mode. We can do processes in batch mode. subr.el: Someone recoded truncate-string-to-width, saying "the FSF version is too complicated and does lots of hard-to-understand stuff" but the resulting recoded version was *totally* wrong! it misunderstood the basic point of this function, which is work in *columns* not chars. i dumped ours and copied the version from FSF 21.1. Also added truncate-string-with-continuation-dots, since this idiom is used often. config.inc.samp, xemacs.mak: Separate out debug and optimize flags. Remove all vestiges of USE_MINIMAL_TAGBITS, USE_INDEXED_LRECORD_IMPLEMENTATION, and GUNG_HO, since those ifdefs have long been removed. Make error-checking support actually work. Some rearrangement of config.inc.samp to make it more logical. Remove callproc.c and ntproc.c from xemacs.mak, no longer used. Make pdump the default. lisp.h: Add support for strong type-checking of Bytecount, Bytebpos, Charcount, Charbpos, and others, by making them classes, overloading the operators to provide integer-like operation and carefully controlling what operations are allowed. Not currently enabled in C++ builds because there are still a number of compile errors, and it won't really work till we merge in my "8-bit-Mule" workspace, in which I make use of the new types Charxpos, Bytexpos, Memxpos, representing a "position" either in a buffer or a string. (This is especially important in the extent code.) abbrev.c, alloc.c, eval.c, buffer.c, buffer.h, editfns.c, fns.c, text.h: Warning fixes, some of them related to new C++ strict type checking of Bytecount, Charbpos, etc. dired.c: Caught an actual error due to strong type checking -- char len being passed when should be byte len. alloc.c, backtrace.h, bytecode.c, bytecode.h, eval.c, sysdep.c: Further optimize Ffuncall: -- process arg list at compiled-function creation time, converting into an array for extra-quick access at funcall time. -- rewrite funcall_compiled_function to use it, and inline this function. -- change the order of check for magic stuff in SPECBIND_FAST_UNSAFE to be faster. -- move the check for need to garbage collect into the allocation code, so only a single flag needs to be checked in funcall. buffer.c, symbols.c: add debug funs to check on mule optimization info in buffers and strings. eval.c, emacs.c, text.c, regex.c, scrollbar-msw.c, search.c: Fix evil crashes due to eistrings not properly reinitialized under pdump. Redo a bit some of the init routines; convert some complex_vars_of() into simple vars_of(), because they didn't need complex processing. callproc.c, emacs.c, event-stream.c, nt.c, process.c, process.h, sysdep.c, sysdep.h, syssignal.h, syswindows.h, ntproc.c: Delete. Hallelujah, praise the Lord, there is no god but Allah!!! fix so that processes can be invoked in bare temacs -- thereby eliminating any need for callproc.c. (currently only eliminated under NT.) remove all crufty and unnecessary old process code in ntproc.c and elsewhere. move non-callproc-specific stuff (mostly environment) into process.c, so callproc.c can be left out under NT. console-tty.c, doc.c, file-coding.c, file-coding.h, lstream.c, lstream.h: fix doc string handling so it works with Japanese, etc docs. change handling of "character mode" so callers don't have to manually set it (quite error-prone). event-msw.c: spacing fixes. lread.c: eliminate unused crufty vintage-19 "FSF defun hack" code. lrecord.h: improve pdump description docs. buffer.c, ntheap.c, unexnt.c, win32.c, emacs.c: Mule-ize some unexec and startup code. It was pseudo-Mule-ized before by simply always calling the ...A versions of functions, but that won't cut it -- eventually we want to be able to run properly even if XEmacs has been installed in a Japanese directory. (The current problem is the timing of the loading of the Unicode tables; this will eventually be fixed.) Go through and fix various other places where the code was not Mule-clean. Provide a function mswindows_get_module_file_name() to get our own name without resort to PATH_MAX and such. Add a big comment in main() about the problem with Unicode table load timing that I just alluded to. emacs.c: When error-checking is enabled (interpreted as "user is developing XEmacs"), don't ask user to "pause to read messages" when a fatal error has occurred, because it will wedge if we are in an inner modal loop (typically when a menu is popped up) and make us unable to get a useful stack trace in the debugger. text.c: Correct update_entirely_ascii_p_flag to actually work. lisp.h, symsinit.h: declarations for above changes.
author ben
date Sun, 14 Apr 2002 12:43:31 +0000
parents 3ecd8885ac67
children 97cb5bab4ea0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 #! /bin/sh
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 # RCS to ChangeLog generator
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 # Generate a change log prefix from RCS files (perhaps in the CVS repository)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 # and the ChangeLog (if any).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 # Output the new prefix to standard output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 # You can edit this prefix by hand, and then prepend it to ChangeLog.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 # Ignore log entries that start with `#'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 # Clump together log entries that start with `{topic} ',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 # where `topic' contains neither white space nor `}'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 Help='The default FILEs are the files registered under the working directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 Options:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 -c CHANGELOG Output a change log prefix to CHANGELOG (default ChangeLog).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 -h HOSTNAME Use HOSTNAME in change log entries (default current host).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 -i INDENT Indent change log lines by INDENT spaces (default 8).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 -l LENGTH Try to limit log lines to LENGTH characters (default 79).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 -R If no FILEs are given and RCS is used, recurse through working directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 -r OPTION Pass OPTION to subsidiary log command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 -t TABWIDTH Tab stops are every TABWIDTH characters (default 8).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 -u "LOGIN<tab>FULLNAME<tab>MAILADDR" Assume LOGIN has FULLNAME and MAILADDR.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 -v Append RCS revision to file names in log lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 --help Output help.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 --version Output version number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 Report bugs to <bug-gnu-emacs@prep.ai.mit.edu>.'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 Id='$Id: rcs2log,v 1.2 1997/07/09 04:31:03 steve Exp $'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 # Copyright 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 # This program is free software; you can redistribute it and/or modify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 # it under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 # the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 # any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 # This program is distributed in the hope that it will be useful,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 # GNU General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 # You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 # along with this program; see the file COPYING. If not, write to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 # Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 Copyright='Copyright 1997 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 This program comes with NO WARRANTY, to the extent permitted by law.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 You may redistribute copies of this program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 under the terms of the GNU General Public License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 For more information about these matters, see the files named COPYING.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 Author: Paul Eggert <eggert@twinsun.com>'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 tab=' '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 nl='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 # Parse options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 # defaults
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 : ${AWK=awk}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 : ${TMPDIR=/tmp}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 changelog=ChangeLog # change log file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 datearg= # rlog date option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 hostname= # name of local host (if empty, will deduce it later)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 indent=8 # indent of log line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 length=79 # suggested max width of log line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 logins= # login names for people we know fullnames and mailaddrs of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 loginFullnameMailaddrs= # login<tab>fullname<tab>mailaddr triplets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 logTZ= # time zone for log dates (if empty, use local time)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 recursive= # t if we want recursive rlog
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 revision= # t if we want revision numbers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 rlog_options= # options to pass to rlog
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 tabwidth=8 # width of horizontal tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 while :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 case $1 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 -c) changelog=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 -i) indent=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 -h) hostname=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 -l) length=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 -[nu]) # -n is obsolescent; it is replaced by -u.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 case $1 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 -n) case ${2?}${3?}${4?} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 *"$tab"* | *"$nl"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 echo >&2 "$0: -n '$2' '$3' '$4': tabs, newlines not allowed"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 exit 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2$tab$3$tab$4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 shift; shift; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 -u)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 # If $2 is not tab-separated, use colon for separator.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 case ${2?} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 *"$nl"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 echo >&2 "$0: -u '$2': newlines not allowed"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 exit 1;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 *"$tab"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 t=$tab;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 *)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 t=:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 case $2 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 *"$t"*"$t"*"$t"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 echo >&2 "$0: -u '$2': too many fields"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 exit 1;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 *"$t"*"$t"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 *)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 echo >&2 "$0: -u '$2': not enough fields"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 exit 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 shift
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 logins=$logins$nl$login
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 -r) rlog_options=$rlog_options$nl${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 -R) recursive=t;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 -t) tabwidth=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 -v) revision=t;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 --version)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 set $Id
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 rcs2logVersion=$3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 echo >&2 "rcs2log (GNU Emacs) $rcs2logVersion$nl$Copyright"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 exit 0;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 -*) echo >&2 "Usage: $0 [OPTION]... [FILE ...]$nl$Help"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 case $1 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 --help) exit 0;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 *) exit 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 esac;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 *) break
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 shift
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 month_data='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 m[0]="Jan"; m[1]="Feb"; m[2]="Mar"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 m[3]="Apr"; m[4]="May"; m[5]="Jun"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 m[6]="Jul"; m[7]="Aug"; m[8]="Sep"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 # Put rlog output into $rlogout.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 # If no rlog options are given,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 # log the revisions checked in since the first ChangeLog entry.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 # Since ChangeLog is only by date, some of these revisions may be duplicates of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 # what's already in ChangeLog; it's the user's responsibility to remove them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 case $rlog_options in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 '')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 if test -s "$changelog"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 e='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 /^[0-9]+-[0-9][0-9]-[0-9][0-9]/{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 # ISO 8601 date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 print $1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 /^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 # old-fashioned date and time (Emacs 19.31 and earlier)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 '"$month_data"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 year = $5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 for (i=0; i<=11; i++) if (m[i] == $2) break
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 dd = $3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 printf "%d-%02d-%02d\n", year, i+1, dd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 d=`$AWK "$e" <"$changelog"` || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 case $d in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 ?*) datearg="-d>$d"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 fi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 # Use TZ specified by ChangeLog local variable, if any.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 if test -s "$changelog"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 extractTZ='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*"\([^"]*\)".*/{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 s//\1/; p; q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*t.*/{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 s//UTC0/; p; q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 logTZ=`tail "$changelog" | sed -n "$extractTZ"`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 case $logTZ in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 ?*) TZ=$logTZ; export TZ
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 fi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 # If CVS is in use, examine its repository, not the normal RCS files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 if test ! -f CVS/Repository
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 rlog=rlog
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 repository=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 rlog='cvs -q log'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 repository=`sed 1q <CVS/Repository` || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 test ! -f CVS/Root || CVSROOT=`cat <CVS/Root` || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 case $CVSROOT in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 *:/*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 # remote repository
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 *)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 # local repository
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 case $repository in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 /*) ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 *) repository=${CVSROOT?}/$repository
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 if test ! -d "$repository"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 echo >&2 "$0: $repository: bad repository (see CVS/Repository)"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 exit 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 fi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 fi
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 # Use $rlog's -zLT option, if $rlog supports it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 case `$rlog -zLT 2>&1` in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 *' option'*) ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 *) rlog_options=-zLT$nl$rlog_options
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 # With no arguments, examine all files under the RCS directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 case $# in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 case $repository in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 '')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 oldIFS=$IFS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 IFS=$nl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 case $recursive in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 RCSdirs=`find . -name RCS -type d -print`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 filesFromRCSfiles='s|,v$||; s|/RCS/|/|; s|^\./||'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 files=`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 case $RCSdirs in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 ?*) find $RCSdirs \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 -type f \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 ! -name '*_' \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 ! -name ',*,' \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 ! -name '.*_' \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 ! -name .rcsfreeze.log \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 ! -name .rcsfreeze.ver \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 -print
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 find . -name '*,v' -print
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 } |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 sort -u |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 sed "$filesFromRCSfiles"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 `;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 *)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 files=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 for file in RCS/.* RCS/* .*,v *,v
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 case $file in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 files=$files$nl$file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 case $files in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 '') exit 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 set x $files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 shift
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 IFS=$oldIFS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 llogout=$TMPDIR/rcs2log$$l
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 rlogout=$TMPDIR/rcs2log$$r
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 trap exit 1 2 13 15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 trap "rm -f $llogout $rlogout; exit 1" 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 case $datearg in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 ?*) $rlog $rlog_options "$datearg" ${1+"$@"} >$rlogout;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 '') $rlog $rlog_options ${1+"$@"} >$rlogout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 esac || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 # Get the full name of each author the logs mention, and set initialize_fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 # to awk code that initializes the `fullname' awk associative array.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 # Warning: foreign authors (i.e. not known in the passwd file) are mishandled;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 # you have to fix the resulting output by hand.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 initialize_fullname=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 initialize_mailaddr=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 case $loginFullnameMailaddrs in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 ?*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 case $loginFullnameMailaddrs in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 *\"* | *\\*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 sed 's/["\\]/\\&/g' >$llogout <<EOF || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 $loginFullnameMailaddrs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 EOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 loginFullnameMailaddrs=`cat $llogout`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 oldIFS=$IFS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 IFS=$nl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 for loginFullnameMailaddr in $loginFullnameMailaddrs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 case $loginFullnameMailaddr in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 *"$tab"*) IFS=$tab;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 *) IFS=:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 set x $loginFullnameMailaddr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 login=$2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 fullname=$3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 mailaddr=$4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 initialize_fullname="$initialize_fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 fullname[\"$login\"] = \"$fullname\""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 initialize_mailaddr="$initialize_mailaddr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 mailaddr[\"$login\"] = \"$mailaddr\""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 IFS=$oldIFS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 case $llogout in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 ?*) sort -u -o $llogout <<EOF || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 $logins
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 EOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 output_authors='/^date: / {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 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 ~ /^[^;]*;$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 print substr($5, 1, length($5)-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 }'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 authors=`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 $AWK "$output_authors" <$rlogout |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 case $llogout in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 '') sort -u;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 ?*) sort -u | comm -23 - $llogout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 `
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 case $authors in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 ?*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 cat >$llogout <<EOF || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 $authors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 EOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 initialize_author_script='s/["\\]/\\&/g; s/.*/author[\"&\"] = 1/'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 initialize_author=`sed -e "$initialize_author_script" <$llogout`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 awkscript='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 BEGIN {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 alphabet = "abcdefghijklmnopqrstuvwxyz"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 '"$initialize_author"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 if (author[$1]) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 fullname = $5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 if (fullname ~ /[0-9]+-[^(]*\([0-9]+\)$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 # Remove the junk from fullnames like "0000-Admin(0000)".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 fullname = substr(fullname, index(fullname, "-") + 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 fullname = substr(fullname, 1, index(fullname, "(") - 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 if (fullname ~ /,[^ ]/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 # Some sites put comma-separated junk after the fullname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 # Remove it, but leave "Bill Gates, Jr" alone.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 fullname = substr(fullname, 1, index(fullname, ",") - 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 abbr = index(fullname, "&")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 if (abbr) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 a = substr($1, 1, 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 A = a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 i = index(alphabet, a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 if (i) A = substr(ALPHABET, i, 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 fullname = substr(fullname, 1, abbr-1) A substr($1, 2) substr(fullname, abbr+1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 # Quote quotes and backslashes properly in full names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 # Do not use gsub; traditional awk lacks it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 quoted = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 rest = fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 for (;;) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 p = index(rest, "\\")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 q = index(rest, "\"")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 if (p) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 if (q && q<p) p = q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 } else {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 if (!q) break
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 p = q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 quoted = quoted substr(rest, 1, p-1) "\\" substr(rest, p, 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 rest = substr(rest, p+1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 printf "fullname[\"%s\"] = \"%s%s\"\n", $1, quoted, rest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 author[$1] = 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 initialize_fullname=`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 (
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 cat /etc/passwd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 for author in $authors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 do nismatch $author passwd.org_dir
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 ypmatch $authors passwd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 ) 2>/dev/null |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 $AWK -F: "$awkscript"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 `$initialize_fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 # Function to print a single log line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 # We don't use awk functions, to stay compatible with old awk versions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 # `Log' is the log message (with \n replaced by \r).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 # `files' contains the affected files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 printlogline='{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 # Following the GNU coding standards, rewrite
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 # * file: (function): comment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 # to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 # * file (function): comment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 if (Log ~ /^\([^)]*\): /) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 i = index(Log, ")")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 files = files " " substr(Log, 1, i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 Log = substr(Log, i+3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 # If "label: comment" is too long, break the line after the ":".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 sep = " "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 if ('"$length"' <= '"$indent"' + 1 + length(files) + index(Log, CR)) sep = "\n" indent_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 # Print the label.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 printf "%s*%s:", indent_string, files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 # Print each line of the log, transliterating \r to \n.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 while ((i = index(Log, CR)) != 0) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 logline = substr(Log, 1, i-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 if (logline ~ /[^'"$tab"' ]/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 printf "%s%s\n", sep, logline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 } else {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 print ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 sep = indent_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 Log = substr(Log, i+1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 }'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 # Pattern to match the `revision' line of rlog output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 rlog_revision_pattern='^revision [0-9]+\.[0-9]+(\.[0-9]+\.[0-9]+)*(['"$tab"' ]+locked by: [^'"$tab"' $,.0-9:;@]*[^'"$tab"' $,:;@][^'"$tab"' $,.0-9:;@]*;)?['"$tab"' ]*$'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 case $hostname in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 '')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 hostname=`(
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 hostname || uname -n || uuname -l || cat /etc/whoami
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 ) 2>/dev/null` || {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 echo >&2 "$0: cannot deduce hostname"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 exit 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 case $hostname in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 *.*) ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 *)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 domainname=`(domainname) 2>/dev/null` &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 case $domainname in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 *.*) hostname=$hostname.$domainname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 # Process the rlog output, generating ChangeLog style entries.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 # First, reformat the rlog output so that each line contains one log entry.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 # Transliterate \n to \r so that multiline entries fit on a single line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 # Discard irrelevant rlog output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 $AWK <$rlogout '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 BEGIN { repository = "'"$repository"'" }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 /^RCS file:/ {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 if (repository != "") {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 filename = $3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 if (substr(filename, 1, length(repository) + 1) == repository "/") {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 filename = substr(filename, length(repository) + 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 if (filename ~ /,v$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 filename = substr(filename, 1, length(filename) - 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 if (filename ~ /(^|\/)Attic\/[^\/]*$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 i = length(filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 while (substr(filename, i, 1) != "/") i--
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 filename = substr(filename, 1, i - 6) substr(filename, i + 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 rev = "?"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 /^Working file:/ { if (repository == "") filename = $3 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 /'"$rlog_revision_pattern"'/, /^(-----------*|===========*)$/ {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 if ($0 ~ /'"$rlog_revision_pattern"'/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 rev = $2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 next
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 if ($0 ~ /^date: [0-9][- +\/0-9:]*;/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 date = $2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 if (date ~ /\//) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 # This is a traditional RCS format date YYYY/MM/DD.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 # Replace "/"s with "-"s to get ISO format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 newdate = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 while ((i = index(date, "/")) != 0) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 newdate = newdate substr(date, 1, i-1) "-"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 date = substr(date, i+1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 date = newdate date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 time = substr($3, 1, length($3) - 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 author = substr($5, 1, length($5)-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 printf "%s %s %s %s %s %c", filename, rev, date, time, author, 13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 rev = "?"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 next
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 if ($0 ~ /^branches: /) { next }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 if ($0 ~ /^(-----------*|===========*)$/) { print ""; next }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 if ($0 == "Initial revision" || $0 ~ /^file .+ was initially added on branch .+\.$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 $0 = "New file."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 printf "%s%c", $0, 13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 ' |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 # Now each line is of the form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 # FILENAME REVISION YYYY-MM-DD HH:MM:SS[+-TIMEZONE] AUTHOR \rLOG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 # where \r stands for a carriage return,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 # and each line of the log is terminated by \r instead of \n.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 # Sort the log entries, first by date+time (in reverse order),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 # then by author, then by log entry, and finally by file name and revision
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 # (just in case).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 sort +2 -4r +4 +0 |
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 # Finally, reformat the sorted log entries.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 $AWK '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 BEGIN {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 logTZ = "'"$logTZ"'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 revision = "'"$revision"'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 # Some awk variants do not understand "\r" or "\013", so we have to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 # put a carriage return directly in the file.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 CR=" " # <-- There is a single CR between the " chars here.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 # Initialize the fullname and mailaddr associative arrays.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 '"$initialize_fullname"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 '"$initialize_mailaddr"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 # Initialize indent string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 indent_string = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 i = '"$indent"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 if (0 < '"$tabwidth"')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 for (; '"$tabwidth"' <= i; i -= '"$tabwidth"')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 indent_string = indent_string "\t"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 while (1 <= i--)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 indent_string = indent_string " "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 newlog = substr($0, 1 + index($0, CR))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 # Ignore log entries prefixed by "#".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 if (newlog ~ /^#/) { next }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 if (Log != newlog || date != $3 || author != $5) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 # The previous log and this log differ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 # Print the old log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 if (date != "") '"$printlogline"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 # Logs that begin with "{clumpname} " should be grouped together,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 # and the clumpname should be removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 # Extract the new clumpname from the log header,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 # and use it to decide whether to output a blank line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 newclumpname = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 sep = "\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 if (date == "") sep = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 if (newlog ~ /^\{[^'"$tab"' }]*}['"$tab"' ]/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 i = index(newlog, "}")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 newclumpname = substr(newlog, 1, i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 while (substr(newlog, i+1) ~ /^['"$tab"' ]/) i++
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 newlog = substr(newlog, i+1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 if (clumpname == newclumpname) sep = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 printf sep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 clumpname = newclumpname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 # Get ready for the next log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 Log = newlog
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 if (files != "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 for (i in filesknown)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 filesknown[i] = 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 files = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 if (date != $3 || author != $5) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 # The previous date+author and this date+author differ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 # Print the new one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 date = $3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 time = $4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 author = $5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 zone = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 if (logTZ && ((i = index(time, "-")) || (i = index(time, "+"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 zone = " " substr(time, i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 # Print "date[ timezone] fullname <email address>".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 # Get fullname and email address from associative arrays;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 # default to author and author@hostname if not in arrays.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 if (fullname[author])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 auth = fullname[author]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 auth = author
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 printf "%s%s %s ", date, zone, auth
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 if (mailaddr[author])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 printf "<%s>\n\n", mailaddr[author]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 printf "<%s@%s>\n\n", author, "'"$hostname"'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 if (! filesknown[$1]) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 filesknown[$1] = 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 if (files == "") files = " " $1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 else files = files ", " $1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 if (revision && $2 != "?") files = files " " $2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 END {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 # Print the last log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 if (date != "") {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 '"$printlogline"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 printf "\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 ' &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 # Exit successfully.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 exec rm -f $llogout $rlogout
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 # Local Variables:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 # tab-width:4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 # End: