annotate lib-src/rcs2log @ 5142:f965e31a35f0

reduce lcrecord headers to 2 words, rename printing_unreadable_object -------------------- ChangeLog entries follow: -------------------- man/ChangeLog addition: 2010-03-13 Ben Wing <ben@xemacs.org> * internals/internals.texi (Working with Lisp Objects): * internals/internals.texi (Writing Macros): * internals/internals.texi (lrecords): More rewriting to correspond with changes from *LRECORD* to *LISP_OBJECT*. modules/ChangeLog addition: 2010-03-13 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c (print_pgconn): * postgresql/postgresql.c (print_pgresult): printing_unreadable_object -> printing_unreadable_object_fmt. 2010-03-13 Ben Wing <ben@xemacs.org> * ldap/eldap.c (print_ldap): printing_unreadable_object -> printing_unreadable_object_fmt. src/ChangeLog addition: 2010-03-13 Ben Wing <ben@xemacs.org> * alloc.c (alloc_sized_lrecord_1): * alloc.c (alloc_sized_lrecord_array): * alloc.c (old_alloc_sized_lcrecord): * alloc.c (disksave_object_finalization_1): * alloc.c (mark_lcrecord_list): * alloc.c (alloc_managed_lcrecord): * alloc.c (free_managed_lcrecord): * alloc.c (tick_lcrecord_stats): * alloc.c (sweep_lcrecords_1): * buffer.c (print_buffer): * buffer.c (DEFVAR_BUFFER_LOCAL_1): * casetab.c: * casetab.c (print_case_table): * console.c (print_console): * console.c (DEFVAR_CONSOLE_LOCAL_1): * data.c (print_weak_list): * data.c (print_weak_box): * data.c (print_ephemeron): * data.c (ephemeron_equal): * database.c (print_database): * database.c (finalize_database): * device-msw.c (sync_printer_with_devmode): * device-msw.c (print_devmode): * device-msw.c (finalize_devmode): * device.c: * device.c (print_device): * elhash.c: * elhash.c (print_hash_table): * eval.c (print_subr): * eval.c (print_multiple_value): * event-stream.c (event_stream_resignal_wakeup): * events.c (clear_event_resource): * events.c (zero_event): * events.c (print_event): * extents.c: * extents.c (print_extent): * file-coding.c (print_coding_system): * font-mgr.c: * font-mgr.c (Ffc_init): * frame.c: * frame.c (print_frame): * gc.c: * gc.c (GC_CHECK_NOT_FREE): * glyphs.c: * glyphs.c (print_image_instance): * glyphs.c (print_glyph): * gui.c (print_gui_item): * gui.c (copy_gui_item): * keymap.c (print_keymap): * keymap.c (MARKED_SLOT): * lisp.h: * lisp.h (struct Lisp_String): * lisp.h (DEFUN): * lisp.h (DEFUN_NORETURN): * lrecord.h: * lrecord.h (NORMAL_LISP_OBJECT_UID): * lrecord.h (struct lrecord_header): * lrecord.h (set_lheader_implementation): * lrecord.h (struct old_lcrecord_header): * lrecord.h (struct free_lcrecord_header): * marker.c (print_marker): * mule-charset.c: * mule-charset.c (print_charset): * objects.c (print_color_instance): * objects.c (print_font_instance): * objects.c (finalize_font_instance): * print.c (print_cons): * print.c (printing_unreadable_object_fmt): * print.c (printing_unreadable_lisp_object): * print.c (external_object_printer): * print.c (internal_object_printer): * print.c (debug_p4): * print.c (ext_print_begin): * process.c (print_process): * rangetab.c (print_range_table): * rangetab.c (range_table_equal): * scrollbar.c (free_scrollbar_instance): * specifier.c (print_specifier): * specifier.c (finalize_specifier): * symbols.c (guts_of_unbound_marker): * symeval.h: * symeval.h (DEFVAR_SYMVAL_FWD): * tooltalk.c: * tooltalk.c (print_tooltalk_message): * tooltalk.c (print_tooltalk_pattern): * ui-gtk.c (ffi_object_printer): * ui-gtk.c (emacs_gtk_object_printer): * ui-gtk.c (emacs_gtk_boxed_printer): * window.c (print_window): * window.c (free_window_mirror): * window.c (debug_print_window): * xemacs.def.in.in: (1) printing_unreadable_object -> printing_unreadable_object_fmt. (2) printing_unreadable_lcrecord -> printing_unreadable_lisp_object and fix up so it no longer requires an lcrecord. These previous changes eliminate most of the remaining places where the terms `lcrecord' and `lrecord' occurred outside of specialized code. (3) Fairly major change: Reduce the number of words in an lcrecord from 3 to 2. The third word consisted of a uid that duplicated the lrecord uid, and a single free bit, which was moved into the lrecord structure. This reduces the size of the `uid' slot from 21 bits to 20 bits. Arguably this isn't enough -- we could easily have more than 1,000,000 or so objects created in a session. The answer is (a) It doesn't really matter if we overflow the uid field because it's only used for debugging, to identify an object uniquely (or pretty much so). (b) If we cared about it overflowing and wanted to reduce this, we could make it so that cons, string, float and certain other frob-block types that never print out the uid simply don't store a uid in them and don't increment the lrecord_uid_counter. (4) In conjunction with (3), create new macro NORMAL_LISP_OBJECT_UID() and use it to abstract out the differences between NEWGC and old-GC in accessing the `uid' value from a "normal Lisp Object pointer". (5) In events.c, use zero_nonsized_lisp_object() in place of custom- written equivalent. In font-mgr.c use external_object_printer() in place of custom-written equivalents.
author Ben Wing <ben@xemacs.org>
date Sat, 13 Mar 2010 05:38:08 -0600
parents 97cb5bab4ea0
children 061f4f90f874
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).
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
21 -L FILE Use rlog-format FILE for source of logs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 -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
23 -r OPTION Pass OPTION to subsidiary log command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 -t TABWIDTH Tab stops are every TABWIDTH characters (default 8).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 -u "LOGIN<tab>FULLNAME<tab>MAILADDR" Assume LOGIN has FULLNAME and MAILADDR.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 -v Append RCS revision to file names in log lines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 --help Output help.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 --version Output version number.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
30 Report bugs to <bug-gnu-emacs@gnu.org>.'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
32 Id='$Id: rcs2log,v 1.3 2003/01/28 03:19:04 youngs Exp $'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
34 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
35 # Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 # This program is free software; you can redistribute it and/or modify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 # 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
39 # the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 # any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 # This program is distributed in the hope that it will be useful,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 # but WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 # GNU General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 # You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 # 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
49 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 # Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
52 Copyright='Copyright (C) 2002 Free Software Foundation, Inc.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 This program comes with NO WARRANTY, to the extent permitted by law.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 You may redistribute copies of this program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 under the terms of the GNU General Public License.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 For more information about these matters, see the files named COPYING.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Author: Paul Eggert <eggert@twinsun.com>'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
59 # Use the traditional C locale.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
60 LANG=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
61 LANGUAGE=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
62 LC_ALL=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
63 LC_COLLATE=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
64 LC_CTYPE=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
65 LC_MESSAGES=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
66 LC_NUMERIC=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
67 LC_TIME=C
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
68 export LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_TIME
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
69
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
70 # These variables each contain a single ASCII character.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
71 # Unfortunately, there's no portable way of writing these characters
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
72 # in older Unix implementations, other than putting them directly into
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
73 # this text file.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
74 SOH='' # SOH, octal code 001
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 tab=' '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 nl='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 '
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 # Parse options.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 # defaults
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
82 AWK=${AWK-awk}
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
83 TMPDIR=${TMPDIR-/tmp}
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 changelog=ChangeLog # change log file name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 datearg= # rlog date option
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 hostname= # name of local host (if empty, will deduce it later)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 indent=8 # indent of log line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 length=79 # suggested max width of log line
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 logins= # login names for people we know fullnames and mailaddrs of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 loginFullnameMailaddrs= # login<tab>fullname<tab>mailaddr triplets
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 logTZ= # time zone for log dates (if empty, use local time)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 recursive= # t if we want recursive rlog
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 revision= # t if we want revision numbers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 rlog_options= # options to pass to rlog
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
95 rlogfile= # log file to read from
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 tabwidth=8 # width of horizontal tab
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 while :
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 case $1 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 -c) changelog=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 -i) indent=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 -h) hostname=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 -l) length=${2?}; shift;;
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
105 -L) rlogfile=${2?}; shift;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 -[nu]) # -n is obsolescent; it is replaced by -u.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 case $1 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 -n) case ${2?}${3?}${4?} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 *"$tab"* | *"$nl"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 echo >&2 "$0: -n '$2' '$3' '$4': tabs, newlines not allowed"
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
111 exit 1;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 esac
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
113 login=$2
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
114 lfm=$2$tab$3$tab$4
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 shift; shift; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 -u)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 # If $2 is not tab-separated, use colon for separator.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 case ${2?} in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 *"$nl"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 echo >&2 "$0: -u '$2': newlines not allowed"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 exit 1;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 *"$tab"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 t=$tab;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 *)
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
125 t=':';;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 case $2 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 *"$t"*"$t"*"$t"*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 echo >&2 "$0: -u '$2': too many fields"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 exit 1;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 *"$t"*"$t"*)
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
132 uf="[^$t]*$t" # An unselected field, followed by a separator.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
133 sf="\\([^$t]*\\)" # The selected field.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
134 login=`expr "X$2" : "X$sf"`
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
135 lfm="$login$tab"`
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
136 expr "X$2" : "$uf$sf"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
137 `"$tab"`
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
138 expr "X$2" : "$uf$uf$sf"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
139 `;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 *)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 echo >&2 "$0: -u '$2': not enough fields"
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
142 exit 1;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 esac
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
144 shift;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
145 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
146 case $logins in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
147 '') logins=$login;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
148 ?*) logins=$logins$nl$login;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 esac
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
150 case $loginFullnameMailaddrs in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
151 '') loginFullnameMailaddrs=$lfm;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
152 ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$lfm;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
153 esac;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
154 -r)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
155 case $rlog_options in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
156 '') rlog_options=${2?};;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
157 ?*) rlog_options=$rlog_options$nl${2?};;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
158 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
159 shift;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 -R) recursive=t;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 -t) tabwidth=${2?}; shift;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 -v) revision=t;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 --version)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 set $Id
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 rcs2logVersion=$3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 echo >&2 "rcs2log (GNU Emacs) $rcs2logVersion$nl$Copyright"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 exit 0;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 -*) echo >&2 "Usage: $0 [OPTION]... [FILE ...]$nl$Help"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 case $1 in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 --help) exit 0;;
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
171 *) exit 1;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 esac;;
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
173 *) break;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 shift
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 done
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 month_data='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 m[0]="Jan"; m[1]="Feb"; m[2]="Mar"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 m[3]="Apr"; m[4]="May"; m[5]="Jun"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 m[6]="Jul"; m[7]="Aug"; m[8]="Sep"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
185 logdir=$TMPDIR/rcs2log$$
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
186 llogout=$logdir/l
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
187 trap exit 1 2 13 15
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
188 trap "rm -fr $logdir 2>/dev/null" 0
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
189 (umask 077 && exec mkdir $logdir) || exit
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
191 # If no rlog-format log file is given, generate one into $rlogfile.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
192 case $rlogfile in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
193 '')
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
194 rlogfile=$logdir/r
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
196 # If no rlog options are given,
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
197 # log the revisions checked in since the first ChangeLog entry.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
198 # Since ChangeLog is only by date, some of these revisions may be duplicates of
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
199 # what's already in ChangeLog; it's the user's responsibility to remove them.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
200 case $rlog_options in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
201 '')
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
202 if test -s "$changelog"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
203 then
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
204 e='
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
205 /^[0-9]+-[0-9][0-9]-[0-9][0-9]/{
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
206 # ISO 8601 date
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
207 print $1
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
208 exit
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
209 }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
210 /^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
211 # old-fashioned date and time (Emacs 19.31 and earlier)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
212 '"$month_data"'
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
213 year = $5
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
214 for (i=0; i<=11; i++) if (m[i] == $2) break
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
215 dd = $3
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
216 printf "%d-%02d-%02d\n", year, i+1, dd
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
217 exit
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
218 }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
219 '
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
220 d=`$AWK "$e" <"$changelog"` || exit
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
221 case $d in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
222 ?*) datearg="-d>$d";;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
223 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
224 fi;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
225 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
226
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
227 # Use TZ specified by ChangeLog local variable, if any.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 if test -s "$changelog"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 then
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
230 extractTZ='
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
231 /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*"\([^"]*\)".*/{
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
232 s//\1/; p; q
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 }
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
234 /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*t.*/{
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
235 s//UTC0/; p; q
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 '
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
238 logTZ=`tail "$changelog" | sed -n "$extractTZ"`
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
239 case $logTZ in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
240 ?*) TZ=$logTZ; export TZ;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 fi
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
243
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
244 # If CVS is in use, examine its repository, not the normal RCS files.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
245 if test ! -f CVS/Repository
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
246 then
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
247 rlog=rlog
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
248 repository=
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
249 else
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
250 rlog='cvs -q log'
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
251 repository=`sed 1q <CVS/Repository` || exit
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
252 test ! -f CVS/Root || CVSROOT=`cat <CVS/Root` || exit
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
253 case $CVSROOT in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
254 *:/*:/*)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
255 echo >&2 "$0: $CVSROOT: CVSROOT has multiple ':/'s"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
256 exit 1;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
257 *:/*)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
258 # remote repository
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
259 pository=`expr "X$repository" : '.*:\(/.*\)'`;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
260 *)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
261 # local repository
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
262 case $repository in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
263 /*) ;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
264 *) repository=${CVSROOT?}/$repository;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
265 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
266 if test ! -d "$repository"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
267 then
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
268 echo >&2 "$0: $repository: bad repository (see CVS/Repository)"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
269 exit 1
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
270 fi
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
271 pository=$repository;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
272 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
273
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
274 # Ensure that $pository ends in exactly one slash.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
275 while :
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
276 do
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
277 case $pository in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
278 *//) pository=`expr "X$pository" : 'X\(.*\)/'`;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
279 */) break;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
280 *) pository=$pository/; break;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
281 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
282 done
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
283
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
284 fi
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
285
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
286 # Use $rlog's -zLT option, if $rlog supports it.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
287 case `$rlog -zLT 2>&1` in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
288 *' option'*) ;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
289 *)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
290 case $rlog_options in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
291 '') rlog_options=-zLT;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
292 ?*) rlog_options=-zLT$nl$rlog_options;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
293 esac;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
294 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
295
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
296 # With no arguments, examine all files under the RCS directory.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
297 case $# in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
298 0)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
299 case $repository in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
300 '')
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
301 oldIFS=$IFS
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
302 IFS=$nl
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
303 case $recursive in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
304 t)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
305 RCSdirs=`find . -name RCS -type d -print`
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
306 filesFromRCSfiles='s|,v$||; s|/RCS/|/|; s|^\./||'
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
307 files=`
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
308 {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
309 case $RCSdirs in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
310 ?*) find $RCSdirs \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
311 -type f \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
312 ! -name '*_' \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
313 ! -name ',*,' \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
314 ! -name '.*_' \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
315 ! -name .rcsfreeze.log \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
316 ! -name .rcsfreeze.ver \
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
317 -print;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
318 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
319 find . -name '*,v' -print
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
320 } |
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
321 sort -u |
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
322 sed "$filesFromRCSfiles"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
323 `;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
324 *)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
325 files=
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
326 for file in RCS/.* RCS/* .*,v *,v
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
327 do
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
328 case $file in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
329 RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
330 RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
331 RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
332 RCS/*,v | RCS/.*,v) ;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
333 RCS/* | RCS/.*) test -f "$file" || continue;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
334 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
335 case $files in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
336 '') files=$file;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
337 ?*) files=$files$nl$file;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
338 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
339 done
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
340 case $files in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
341 '') exit 0;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
342 esac;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
343 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
344 set x $files
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
345 shift
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
346 IFS=$oldIFS;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
347 esac;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
348 esac
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
349
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
350 case $datearg in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
351 ?*) $rlog $rlog_options "$datearg" ${1+"$@"} >$rlogfile;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
352 '') $rlog $rlog_options ${1+"$@"} >$rlogfile;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
353 esac || exit;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
357 # Prefer the POSIX-style -k options, since POSIX 1003.1-2001 prohibits
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
358 # support for the traditional-style +M -N options.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
359 SORT_K_OPTIONS='-k 3,4r -k 5 -k 1'
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
360 sort $SORT_K_OPTIONS </dev/null 2>/dev/null || SORT_K_OPTIONS='+2 -4r +4 +0'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 # 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
364 # to awk code that initializes the `fullname' awk associative array.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 # 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
366 # you have to fix the resulting output by hand.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 initialize_fullname=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 initialize_mailaddr=
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 case $loginFullnameMailaddrs in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 ?*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 case $loginFullnameMailaddrs in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 *\"* | *\\*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 sed 's/["\\]/\\&/g' >$llogout <<EOF || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 $loginFullnameMailaddrs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 EOF
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
378 loginFullnameMailaddrs=`cat $llogout`;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 esac
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 oldIFS=$IFS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 IFS=$nl
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 for loginFullnameMailaddr in $loginFullnameMailaddrs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 do
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
385 IFS=$tab
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 set x $loginFullnameMailaddr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 login=$2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 fullname=$3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 mailaddr=$4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 initialize_fullname="$initialize_fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 fullname[\"$login\"] = \"$fullname\""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 initialize_mailaddr="$initialize_mailaddr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 mailaddr[\"$login\"] = \"$mailaddr\""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 done
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
395 IFS=$oldIFS;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
398 case $logins in
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
399 ?*)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
400 sort -u -o $llogout <<EOF
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 $logins
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 EOF
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
403 ;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
404 '')
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
405 : ;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
406 esac >$llogout || exit
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
407
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 output_authors='/^date: / {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 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
410 print substr($5, 1, length($5)-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 }'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 authors=`
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
414 $AWK "$output_authors" <"$rlogfile" | sort -u | comm -23 - $llogout
428
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 case $authors in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 ?*)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 cat >$llogout <<EOF || exit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 $authors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 EOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 initialize_author_script='s/["\\]/\\&/g; s/.*/author[\"&\"] = 1/'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 initialize_author=`sed -e "$initialize_author_script" <$llogout`
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 awkscript='
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 BEGIN {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 alphabet = "abcdefghijklmnopqrstuvwxyz"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 '"$initialize_author"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 if (author[$1]) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 fullname = $5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 if (fullname ~ /[0-9]+-[^(]*\([0-9]+\)$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 # Remove the junk from fullnames like "0000-Admin(0000)".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 fullname = substr(fullname, index(fullname, "-") + 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 fullname = substr(fullname, 1, index(fullname, "(") - 1)
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 if (fullname ~ /,[^ ]/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 # Some sites put comma-separated junk after the fullname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 # Remove it, but leave "Bill Gates, Jr" alone.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 fullname = substr(fullname, 1, index(fullname, ",") - 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 abbr = index(fullname, "&")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 if (abbr) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 a = substr($1, 1, 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 A = a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 i = index(alphabet, a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 if (i) A = substr(ALPHABET, i, 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 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
449 }
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 # Quote quotes and backslashes properly in full names.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 # Do not use gsub; traditional awk lacks it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 quoted = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 rest = fullname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 for (;;) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 p = index(rest, "\\")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 q = index(rest, "\"")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 if (p) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 if (q && q<p) p = q
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 } else {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 if (!q) break
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 p = q
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 quoted = quoted substr(rest, 1, p-1) "\\" substr(rest, p, 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 rest = substr(rest, p+1)
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 printf "fullname[\"%s\"] = \"%s%s\"\n", $1, quoted, rest
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 author[$1] = 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 '
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 initialize_fullname=`
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
475 {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
476 (getent passwd $authors) ||
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
477 (
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
478 cat /etc/passwd
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
479 for author in $authors
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
480 do NIS_PATH= nismatch $author passwd.org_dir
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
481 done
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
482 ypmatch $authors passwd
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
483 )
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
484 } 2>/dev/null |
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 $AWK -F: "$awkscript"
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
486 `$initialize_fullname;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 esac
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 # Function to print a single log line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 # We don't use awk functions, to stay compatible with old awk versions.
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
492 # `Log' is the log message.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 # `files' contains the affected files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 printlogline='{
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 # Following the GNU coding standards, rewrite
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 # * file: (function): comment
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 # to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 # * file (function): comment
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
500 if (Log ~ /^\([^)]*\):[\t\n ]/) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 i = index(Log, ")")
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
502 filefunc = substr(Log, 1, i)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
503 while ((j = index(filefunc, "\n"))) {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
504 files = files " " substr(filefunc, 1, j-1)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
505 filefunc = substr(filefunc, j+1)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
506 }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
507 files = files " " filefunc
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 Log = substr(Log, i+3)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 # If "label: comment" is too long, break the line after the ":".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 sep = " "
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
513 i = index(Log, "\n")
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
514 if ('"$length"' <= '"$indent"' + 1 + length(files) + i) sep = "\n" indent_string
428
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 # Print the label.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 printf "%s*%s:", indent_string, files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
519 # Print each line of the log.
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
520 while (i) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 logline = substr(Log, 1, i-1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 if (logline ~ /[^'"$tab"' ]/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 printf "%s%s\n", sep, logline
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 } else {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525 print ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 sep = indent_string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 Log = substr(Log, i+1)
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
529 i = index(Log, "\n")
428
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 # Pattern to match the `revision' line of rlog output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 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
535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 case $hostname in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 '')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 hostname=`(
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 hostname || uname -n || uuname -l || cat /etc/whoami
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 ) 2>/dev/null` || {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 echo >&2 "$0: cannot deduce hostname"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 exit 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 case $hostname in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 *.*) ;;
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 domainname=`(domainname) 2>/dev/null` &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 case $domainname in
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
550 *.*) hostname=$hostname.$domainname;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
551 esac;;
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
552 esac;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 esac
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554
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 # Process the rlog output, generating ChangeLog style entries.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 # First, reformat the rlog output so that each line contains one log entry.
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
559 # Transliterate \n to SOH so that multiline entries fit on a single line.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 # Discard irrelevant rlog output.
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
561 $AWK '
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
562 BEGIN {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
563 pository = "'"$pository"'"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
564 SOH="'"$SOH"'"
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
565 }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
566 /^RCS file: / {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
567 if (pository != "") {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
568 filename = substr($0, 11)
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
569 if (substr(filename, 1, length(pository)) == pository) {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
570 filename = substr(filename, length(pository) + 1)
428
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 (filename ~ /,v$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 filename = substr(filename, 1, length(filename) - 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 if (filename ~ /(^|\/)Attic\/[^\/]*$/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 i = length(filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 while (substr(filename, i, 1) != "/") i--
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 filename = substr(filename, 1, i - 6) substr(filename, i + 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 rev = "?"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 }
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
583 /^Working file: / { if (repository == "") filename = substr($0, 15) }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 /'"$rlog_revision_pattern"'/, /^(-----------*|===========*)$/ {
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
585 line = $0
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
586 if (line ~ /'"$rlog_revision_pattern"'/) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 rev = $2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 next
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 }
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
590 if (line ~ /^date: [0-9][- +\/0-9:]*;/) {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 date = $2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 if (date ~ /\//) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
593 # This is a traditional RCS format date YYYY/MM/DD.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 # Replace "/"s with "-"s to get ISO format.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 newdate = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 while ((i = index(date, "/")) != 0) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 newdate = newdate substr(date, 1, i-1) "-"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 date = substr(date, i+1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 date = newdate date
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 time = substr($3, 1, length($3) - 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 author = substr($5, 1, length($5)-1)
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
604 printf "%s%s%s%s%s%s%s%s%s%s", filename, SOH, rev, SOH, date, SOH, time, SOH, author, SOH
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 rev = "?"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 next
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 }
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
608 if (line ~ /^branches: /) { next }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
609 if (line ~ /^(-----------*|===========*)$/) { print ""; next }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
610 if (line == "Initial revision" || line ~ /^file .+ was initially added on branch .+\.$/) {
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
611 line = "New file."
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
612 }
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
613 printf "%s%s", line, SOH
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 }
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
615 ' <"$rlogfile" |
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 # Now each line is of the form
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
618 # FILENAME@REVISION@YYYY-MM-DD@HH:MM:SS[+-TIMEZONE]@AUTHOR@LOG
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
619 # where @ stands for an SOH (octal code 001),
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
620 # and each line of LOG is terminated by SOH instead of \n.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 # Sort the log entries, first by date+time (in reverse order),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 # 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
623 # (just in case).
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
624 sort -t"$SOH" $SORT_K_OPTIONS |
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 # Finally, reformat the sorted log entries.
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
627 $AWK -F"$SOH" '
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 BEGIN {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 logTZ = "'"$logTZ"'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 revision = "'"$revision"'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 # Initialize the fullname and mailaddr associative arrays.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 '"$initialize_fullname"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 '"$initialize_mailaddr"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 # Initialize indent string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 indent_string = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 i = '"$indent"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 if (0 < '"$tabwidth"')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 for (; '"$tabwidth"' <= i; i -= '"$tabwidth"')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 indent_string = indent_string "\t"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 while (1 <= i--)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 indent_string = indent_string " "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 }
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 {
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
647 newlog = ""
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
648 for (i = 6; i < NF; i++) newlog = newlog $i "\n"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 # Ignore log entries prefixed by "#".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 if (newlog ~ /^#/) { next }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 if (Log != newlog || date != $3 || author != $5) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 # The previous log and this log differ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 # Print the old log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 if (date != "") '"$printlogline"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 # Logs that begin with "{clumpname} " should be grouped together,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 # and the clumpname should be removed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 # Extract the new clumpname from the log header,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 # and use it to decide whether to output a blank line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 newclumpname = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 sep = "\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 if (date == "") sep = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 if (newlog ~ /^\{[^'"$tab"' }]*}['"$tab"' ]/) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 i = index(newlog, "}")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 newclumpname = substr(newlog, 1, i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 while (substr(newlog, i+1) ~ /^['"$tab"' ]/) i++
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 newlog = substr(newlog, i+1)
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
672 if (clumpname == newclumpname && date == $3 && author == $5) sep = ""
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 printf sep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 clumpname = newclumpname
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 # Get ready for the next log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 Log = newlog
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 if (files != "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 for (i in filesknown)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 filesknown[i] = 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 files = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 if (date != $3 || author != $5) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 # The previous date+author and this date+author differ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 # Print the new one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 date = $3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 time = $4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 author = $5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 zone = ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 if (logTZ && ((i = index(time, "-")) || (i = index(time, "+"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 zone = " " substr(time, i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 # Print "date[ timezone] fullname <email address>".
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 # Get fullname and email address from associative arrays;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 # default to author and author@hostname if not in arrays.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 if (fullname[author])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 auth = fullname[author]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 auth = author
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 printf "%s%s %s ", date, zone, auth
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 if (mailaddr[author])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 printf "<%s>\n\n", mailaddr[author]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 printf "<%s@%s>\n\n", author, "'"$hostname"'"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 if (! filesknown[$1]) {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 filesknown[$1] = 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 if (files == "") files = " " $1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 else files = files ", " $1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 if (revision && $2 != "?") files = files " " $2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
714 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 END {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 # Print the last log.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 if (date != "") {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 '"$printlogline"'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 printf "\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 ' &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 # Exit successfully.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726
1238
97cb5bab4ea0 [xemacs-hg @ 2003-01-28 03:19:04 by youngs]
youngs
parents: 428
diff changeset
727 exec rm -fr $logdir
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 # Local Variables:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 # tab-width:4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 # End: