]> code.delx.au - gnu-emacs/blobdiff - lib-src/rcs2log
Add toolbar.
[gnu-emacs] / lib-src / rcs2log
index 390bba898cb19a88c09a6ddb1ea40a3041c0b3df..f41552e110de498cba4ab84b5c81bce249b8411f 100755 (executable)
@@ -26,11 +26,11 @@ Options:
   --help  Output help.
   --version  Output version number.
 
-Report bugs to <bug-gnu-emacs@prep.ai.mit.edu>.'
+Report bugs to <bug-gnu-emacs@gnu.org>.'
 
-Id='$Id: rcs2log,v 1.36 1997/01/20 09:03:05 eggert Exp eggert $'
+Id='$Id: rcs2log,v 1.44 1998/08/12 14:22:14 eggert Exp eggert $'
 
-# Copyright 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+# Copyright 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -47,7 +47,7 @@ Id='$Id: rcs2log,v 1.36 1997/01/20 09:03:05 eggert Exp eggert $'
 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 # Boston, MA 02111-1307, USA.
 
-Copyright='Copyright 1997 Free Software Foundation, Inc.
+Copyright='Copyright 1998 Free Software Foundation, Inc.
 This program comes with NO WARRANTY, to the extent permitted by law.
 You may redistribute copies of this program
 under the terms of the GNU General Public License.
@@ -90,7 +90,10 @@ do
                                echo >&2 "$0: -n '$2' '$3' '$4': tabs, newlines not allowed"
                                exit 1
                        esac
-                       loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2$tab$3$tab$4
+                       case $loginFullnameMailaddrs in
+                       '') loginFullnameMailaddrs=$2$tab$3$tab$4;;
+                       ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2$tab$3$tab$4
+                       esac
                        shift; shift; shift;;
                -u)
                        # If $2 is not tab-separated, use colon for separator.
@@ -113,12 +116,23 @@ do
                                echo >&2 "$0: -u '$2': not enough fields"
                                exit 1
                        esac
-                       loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2
+                       case $loginFullnameMailaddrs in
+                       '') loginFullnameMailaddrs=$2;;
+                       ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2
+                       esac
                        shift
                esac
-               logins=$logins$nl$login
+               case $logins in
+               '') logins=$login;;
+               ?*) logins=$logins$nl$login
+               esac
                ;;
-       -r)     rlog_options=$rlog_options$nl${2?}; shift;;
+       -r)
+               case $rlog_options in
+               '') rlog_options=${2?};;
+               ?*) rlog_options=$rlog_options$nl${2?}
+               esac
+               shift;;
        -R)     recursive=t;;
        -t)     tabwidth=${2?}; shift;;
        -v)     revision=t;;
@@ -225,7 +239,11 @@ fi
 # Use $rlog's -zLT option, if $rlog supports it.
 case `$rlog -zLT 2>&1` in
 *' option'*) ;;
-*) rlog_options=-zLT$nl$rlog_options
+*)
+       case $rlog_options in
+       '') rlog_options=-zLT;;
+       ?*) rlog_options=-zLT$nl$rlog_options
+       esac
 esac
 
 # With no arguments, examine all files under the RCS directory.
@@ -263,9 +281,14 @@ case $# in
                                case $file in
                                RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
                                RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
-                               RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue
+                               RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue;;
+                               RCS/*,v | RCS/.*,v) ;;
+                               RCS/* | RCS/.*) test -f "$file" || continue
+                               esac
+                               case $files in
+                               '') files=$file;;
+                               ?*) files=$files$nl$file
                                esac
-                               files=$files$nl$file
                        done
                        case $files in
                        '') exit 0
@@ -402,13 +425,16 @@ EOF
        '
 
        initialize_fullname=`
-               (
-                       cat /etc/passwd
-                       for author in $authors
-                       do nismatch $author passwd.org_dir
-                       done
-                       ypmatch $authors passwd
-               ) 2>/dev/null |
+               {
+                       (getent passwd $authors) ||
+                       (
+                               cat /etc/passwd
+                               for author in $authors
+                               do NIS_PATH= nismatch $author passwd.org_dir
+                               done
+                               ypmatch $authors passwd
+                       )
+               } 2>/dev/null |
                $AWK -F: "$awkscript"
        `$initialize_fullname
 esac
@@ -416,7 +442,7 @@ esac
 
 # Function to print a single log line.
 # We don't use awk functions, to stay compatible with old awk versions.
-# `Log' is the log message (with \n replaced by \r).
+# `Log' is the log message (with \n replaced by \001).
 # `files' contains the affected files.
 printlogline='{
 
@@ -432,13 +458,13 @@ printlogline='{
 
        # If "label: comment" is too long, break the line after the ":".
        sep = " "
-       if ('"$length"' <= '"$indent"' + 1 + length(files) + index(Log, CR)) sep = "\n" indent_string
+       if ('"$length"' <= '"$indent"' + 1 + length(files) + index(Log, SOH)) sep = "\n" indent_string
 
        # Print the label.
        printf "%s*%s:", indent_string, files
 
-       # Print each line of the log, transliterating \r to \n.
-       while ((i = index(Log, CR)) != 0) {
+       # Print each line of the log, transliterating \001 to \n.
+       while ((i = index(Log, SOH)) != 0) {
                logline = substr(Log, 1, i-1)
                if (logline ~ /[^'"$tab"' ]/) {
                        printf "%s%s\n", sep, logline
@@ -476,7 +502,7 @@ esac
 # Process the rlog output, generating ChangeLog style entries.
 
 # First, reformat the rlog output so that each line contains one log entry.
-# Transliterate \n to \r so that multiline entries fit on a single line.
+# Transliterate \n to \001 so that multiline entries fit on a single line.
 # Discard irrelevant rlog output.
 $AWK <$rlogout '
        BEGIN { repository = "'"$repository"'" }
@@ -499,11 +525,12 @@ $AWK <$rlogout '
        }
        /^Working file:/ { if (repository == "") filename = $3 }
        /'"$rlog_revision_pattern"'/, /^(-----------*|===========*)$/ {
-               if ($0 ~ /'"$rlog_revision_pattern"'/) {
+               line = $0
+               if (line ~ /'"$rlog_revision_pattern"'/) {
                        rev = $2
                        next
                }
-               if ($0 ~ /^date: [0-9][- +\/0-9:]*;/) {
+               if (line ~ /^date: [0-9][- +\/0-9:]*;/) {
                        date = $2
                        if (date ~ /\//) {
                                # This is a traditional RCS format date YYYY/MM/DD.
@@ -517,23 +544,23 @@ $AWK <$rlogout '
                        }
                        time = substr($3, 1, length($3) - 1)
                        author = substr($5, 1, length($5)-1)
-                       printf "%s %s %s %s %s %c", filename, rev, date, time, author, 13
+                       printf "%s %s %s %s %s %c", filename, rev, date, time, author, 1
                        rev = "?"
                        next
                }
-               if ($0 ~ /^branches: /) { next }
-               if ($0 ~ /^(-----------*|===========*)$/) { print ""; next }
-               if ($0 == "Initial revision" || $0 ~ /^file .+ was initially added on branch .+\.$/) {
-                       $0 = "New file."
-        }
-               printf "%s%c", $0, 13
+               if (line ~ /^branches: /) { next }
+               if (line ~ /^(-----------*|===========*)$/) { print ""; next }
+               if (line == "Initial revision" || line ~ /^file .+ was initially added on branch .+\.$/) {
+                       line = "New file."
+               }
+               printf "%s%c", line, 1
        }
 ' |
 
 # Now each line is of the form
-# FILENAME REVISION YYYY-MM-DD HH:MM:SS[+-TIMEZONE] AUTHOR \rLOG
-#      where \r stands for a carriage return,
-#      and each line of the log is terminated by \r instead of \n.
+# FILENAME REVISION YYYY-MM-DD HH:MM:SS[+-TIMEZONE] AUTHOR \001LOG
+#      where \001 stands for a carriage return,
+#      and each line of the log is terminated by \001 instead of \n.
 # Sort the log entries, first by date+time (in reverse order),
 # then by author, then by log entry, and finally by file name and revision
 # (just in case).
@@ -545,9 +572,9 @@ $AWK '
                logTZ = "'"$logTZ"'"
                revision = "'"$revision"'"
 
-               # Some awk variants do not understand "\r" or "\013", so we have to
-               # put a carriage return directly in the file.
-               CR="\r" # <-- There is a single CR between the " chars here.
+               # Some awk variants do not understand "\001", so we have to
+               # put the char directly in the file.
+               SOH="\ 1" # <-- There is a single SOH (octal code 001) here.
 
                # Initialize the fullname and mailaddr associative arrays.
                '"$initialize_fullname"'
@@ -564,7 +591,7 @@ $AWK '
        }
 
        {
-               newlog = substr($0, 1 + index($0, CR))
+               newlog = substr($0, 1 + index($0, SOH))
 
                # Ignore log entries prefixed by "#".
                if (newlog ~ /^#/) { next }