view lib-src/rcs-checkin @ 2420:ad56e5a6d09f

[xemacs-hg @ 2004-12-06 03:46:06 by ben] (none) README.packages: Document use of --package-prefix. Fix error in specifying standard package location. make-docfile.c: Use QXE_PATH_MAX. info.el: Correct doc string giving example package path. menubar-items.el: Move Prefix Rectangle command up one level. xemacs/packages.texi: Add long form of Lisp Reference Manual to links. Add links pointing to Lisp Reference Manual for more detailed package discussion. lispref/range-tables.texi: Document range-table changes. internals/internals.texi: Update history section. elhash.c, elhash.h, profile.c: Create inchash_eq() to allow direct incrementing of hash-table entry. Use in profile.c to try to reduce profiling overhead. Increase initial size of profile hash tables to reduce profiling overhead. buffer.c, device-msw.c, dialog-msw.c, dired-msw.c, editfns.c, event-msw.c, events.c, glyphs-msw.c, keymap.c, objects-msw.c, process-nt.c, syswindows.h, text.c, text.h, unexnt.c: Rename xetcs* -> qxetcs* for consistency with qxestr*. Rename ei*_c(_*) -> ei*_ascii(_*) since they work with ASCII-only strings not "C strings", whatever those are. This is the last place where "c" was incorrectly being used for "ascii". dialog-msw.c, dumper.c, event-msw.c, fileio.c, glyphs-gtk.c, glyphs-x.c, nt.c, process-nt.c, realpath.c, sysdep.c, sysfile.h, unexcw.c, unexnext.c, unexnt.c: Try to avoid differences in systems that do or do not include final null byte in PATH_MAX. Create PATH_MAX_INTERNAL and PATH_MAX_EXTERNAL and use them everywhere. Rewrite code in dumper.c to avoid use of PATH_MAX. When necessary in nt.c, use _MAX_PATH instead of MAX_PATH to be consistent with other places. text.c: Code to short-circuit when binary or Unicode was not working due to EOL wrapping. Fix this code to work when either no EOL autodetection or no CR's or LF's in the text. lisp.h, rangetab.c, rangetab.h, regex.c, search.c: Implement different types of ranges (open/closed start and end). Change default to be start-closed, end-open.
author ben
date Mon, 06 Dec 2004 03:46:07 +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