changeset 17741:0c832661d9b4

(loginFullnameMailaddrs, logins, rlog_options, files): Don't prepend $nl since this causes some shells to generate the empty string when IFS is $nl. (printlogline): Use SOH (octal code 1), not CR, since some PC-based shells mishandle CR.
author Paul Eggert <eggert@twinsun.com>
date Sun, 11 May 1997 20:02:32 +0000
parents edebe056f7bc
children 09cdafe1339f
files lib-src/=rcs2log lib-src/rcs2log
diffstat 2 files changed, 84 insertions(+), 42 deletions(-) [+]
line wrap: on
line diff
--- a/lib-src/=rcs2log	Sun May 11 18:43:55 1997 +0000
+++ b/lib-src/=rcs2log	Sun May 11 20:02:32 1997 +0000
@@ -28,7 +28,7 @@
 
 Report bugs to <bug-gnu-emacs@prep.ai.mit.edu>.'
 
-Id='$Id: rcs2log,v 1.38 1997/03/23 18:46:03 eggert Exp eggert $'
+Id='$Id: rcs2log,v 1.39 1997/05/11 18:43:55 eggert Exp eggert $'
 
 # Copyright 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
 
@@ -90,7 +90,10 @@
 				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 @@
 				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 @@
 # 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.
@@ -265,7 +283,10 @@
 				RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
 				RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue
 				esac
-				files=$files$nl$file
+				case $files in
+				'') files=$file;;
+				?*) files=$files$nl$file
+				esac
 			done
 			case $files in
 			'') exit 0
@@ -416,7 +437,7 @@
 
 # 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 +453,13 @@
 
 	# 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 +497,7 @@
 # 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"'" }
@@ -517,7 +538,7 @@
 			}
 			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
 		}
@@ -526,14 +547,14 @@
 		if ($0 == "Initial revision" || $0 ~ /^file .+ was initially added on branch .+\.$/) {
 			$0 = "New file."
         }
-		printf "%s%c", $0, 13
+		printf "%s%c", $0, 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 +566,9 @@
 		logTZ = "'"$logTZ"'"
 		revision = "'"$revision"'"
 
-		# Some awk variants do not understand "\r" or "\015", so we have to
-		# put a carriage return directly in the file.
-		CR="
" # <-- 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="" # <-- There is a single SOH (octal code 001) here.
 
 		# Initialize the fullname and mailaddr associative arrays.
 		'"$initialize_fullname"'
@@ -564,7 +585,7 @@
 	}
 
 	{
-		newlog = substr($0, 1 + index($0, CR))
+		newlog = substr($0, 1 + index($0, SOH))
 
 		# Ignore log entries prefixed by "#".
 		if (newlog ~ /^#/) { next }
--- a/lib-src/rcs2log	Sun May 11 18:43:55 1997 +0000
+++ b/lib-src/rcs2log	Sun May 11 20:02:32 1997 +0000
@@ -28,7 +28,7 @@
 
 Report bugs to <bug-gnu-emacs@prep.ai.mit.edu>.'
 
-Id='$Id: rcs2log,v 1.38 1997/03/23 18:46:03 eggert Exp eggert $'
+Id='$Id: rcs2log,v 1.39 1997/05/11 18:43:55 eggert Exp eggert $'
 
 # Copyright 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
 
@@ -90,7 +90,10 @@
 				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 @@
 				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 @@
 # 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.
@@ -265,7 +283,10 @@
 				RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
 				RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue
 				esac
-				files=$files$nl$file
+				case $files in
+				'') files=$file;;
+				?*) files=$files$nl$file
+				esac
 			done
 			case $files in
 			'') exit 0
@@ -416,7 +437,7 @@
 
 # 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 +453,13 @@
 
 	# 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 +497,7 @@
 # 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"'" }
@@ -517,7 +538,7 @@
 			}
 			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
 		}
@@ -526,14 +547,14 @@
 		if ($0 == "Initial revision" || $0 ~ /^file .+ was initially added on branch .+\.$/) {
 			$0 = "New file."
         }
-		printf "%s%c", $0, 13
+		printf "%s%c", $0, 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 +566,9 @@
 		logTZ = "'"$logTZ"'"
 		revision = "'"$revision"'"
 
-		# Some awk variants do not understand "\r" or "\015", so we have to
-		# put a carriage return directly in the file.
-		CR="
" # <-- 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="" # <-- There is a single SOH (octal code 001) here.
 
 		# Initialize the fullname and mailaddr associative arrays.
 		'"$initialize_fullname"'
@@ -564,7 +585,7 @@
 	}
 
 	{
-		newlog = substr($0, 1 + index($0, CR))
+		newlog = substr($0, 1 + index($0, SOH))
 
 		# Ignore log entries prefixed by "#".
 		if (newlog ~ /^#/) { next }