view lib-src/rcs-checkin @ 2417:8b907450718f

[xemacs-hg @ 2004-12-05 08:48:12 by ben] The section on Troubleshooting (now 2.3) has been completely written and includes a lot of stuff that is not properly documented anywhere else. A fair amount of obsolete info has been deleted and I've incorporated the comments that people (mostly Stephen T) made. Former chapter 3 has been split up in two, one pertaining to basic I/O and the other to external I/O. What were formerly chapters 5 and 6 no longer exist as such; the info in them has been distributed across various other chapters. Old chapter 4 got split up, part going to the new chapter 4 on external I/O and part going to the new chapter 5 on the Internet. In this new chapter, stuff not pertaining to a specific package (e.g. VM or GNUS) was taken out of package-specific sections and a general mail section was constituted. Part of old chapter 5 remains in a new chapter 6 devoted to Emacs Lisp and other advanced stuff, and a section from old chapter 3 on basic init-file Lisp and some stuff from old chapter 5 on Info. The rest of chapter 5 was just misc and has gotten scattered to the winds (mostly in chapters 3 and 4). Old chapter 6 has also gotten quite scattered; there is no longer any section specifically devoted to Windows except one of the Installation sections (along with a section specfically devoted to Unix), and the rest has moved to join the appropriate non-Windows-specific section elsewhere. A lot of chapters had their sections rearranged and likewise for sections having entries rearranged, with the intention that the new arrangement should be more natural. In general I hope that stuff should be much easier to locate. I also rewrote the entries on the relation between XEmacs and GNU Emacs on the authors of XEmacs, including lots of info on who wrote specific subsections. However, this history is certainly not complete; I hope people will look over this and fix it up as necessary.
author ben
date Sun, 05 Dec 2004 08:48:12 +0000
parents 3ecd8885ac67
children
line wrap: on
line source

#! /bin/sh

# This script accepts any number of file arguments and checks them into RCS.
#
# Arguments which are detectably either RCS masters (with names ending in ,v)
# or Emacs version files  (with names of the form foo.~<number>~) are ignored.
# For each file foo, the script looks for Emacs version files related to it.
# These files are checked in as deltas, oldest first, so that the contents of
# the file itself becomes the latest revision in the master.
#
# The first line of each file is used as its description text.  The file itself
# is not deleted, as under VC with vc-keep-workfiles at its default of t, but
# all the version files are.
#
# If an argument file is already version-controlled under RCS, any version 
# files are added to the list of deltas and deleted, and then the workfile
# is checked in again as the latest version.  This is probably not quite
# what was wanted, and is the main reason VC doesn't simply call this to
# do checkins.
#
# This script is intended to be used to convert files with an old-Emacs-style
# version history for use with VC (the Emacs 19 version-control interface),
# which likes to use RCS as its back end.  It was written by Paul Eggert
# and revised/documented for use with VC by Eric S. Raymond, Mar 19 1993.

case $# in
0)
	echo "rcs-checkin: usage: rcs-checkin file ..."
	echo "rcs-checkin: function: checks file.~*~ and file into a new RCS file"
	echo "rcs-checkin: function: uses the file's first line for the description"
esac

# expr pattern to extract owner from ls -l output
ls_owner_pattern='[^ ][^ ]*  *[^ ][^ ]*  *\([^ ][^ ]*\)'

for file
do
	# Make it easier to say `rcs-checkin *'
	# by ignoring file names that already contain `~', or end in `,v'.
	case $file in
	*~* | *,v) continue
	esac
	# Ignore non-files too.
	test -f "$file" || continue

	# Check that file is readable.
	test -r "$file" || exit

	# If the RCS file does not already exist,
	# initialize it with a description from $file's first line.
	rlog -R "$file" >/dev/null 2>&1 ||
	rcs -i -q -t-"`sed 1q $file`" "$file" || exit

	# Get list of old files.
	oldfiles=`
		ls $file.~[0-9]*~ 2>/dev/null |
		sort -t~ -n +1
	`

	# Check that they are properly sorted by date.
	case $oldfiles in
	?*)
		oldfiles_by_date=`ls -rt $file $oldfiles`
		test " $oldfiles
$file" = " $oldfiles_by_date" || {
			echo >&2 "rcs-checkin: skipping $file, because its mod times are out of order.

Sorted by mod time:
$oldfiles_by_date

Sorted by name:
$oldfiles
$file"
			continue
		}
	esac

	echo >&2 rcs-checkin: checking in: $oldfiles $file

	# Save $file as $file.~-~ temporarily.
	mv "$file" "$file.~-~" || exit

	# Rename each old file to $file, and check it in.
	for oldfile in $oldfiles
	do
		mv "$oldfile" "$file" || exit
		ls_l=`ls -l "$file"` || exit
		owner=-w`expr " $ls_l" : " $ls_owner_pattern"` || owner=
		echo "Formerly ${oldfile}" | ci -d -l -q $owner "$file" || exit
	done

	# Bring $file back from $file.~-~, and check it in.
	mv "$file.~-~" "$file" || exit
	ls_l=`ls -l "$file"` || exit
	owner=-w`expr " $ls_l" : " $ls_owner_pattern"` || owner=
	ci -d -q -u $owner -m"entered into RCS" "$file" || exit
done