view lib-src/rcs-checkin @ 107777:13c077500eb3

2010-04-04 John Wiegley <jwiegley@gmail.com> * ido.el (ido-use-virtual-buffers): New variable to indicate whether "virtual buffer" support is enabled for IDO. Essentially it works as follows: Say you are visiting a file and the buffer gets cleaned up by mignight.el. Later, you want to switch to that buffer, but find it's no longer open. With virtual buffers enabled, the buffer name stays in the buffer list (using the ido-virtual face, and always at the end), and if you select it, it opens the file back up again. This allows you to think less about whether recently opened files are still open or not. Most of the time you can quit Emacs, restart, and then switch to a file buffer that was previously open as if it still were. NOTE: This feature has been present in iswitchb for several years now, and I'm porting the same logic to IDO. (ido-virtual): Face used to indicate virtual buffers in the list. (ido-buffer-internal): If a buffer is chosen, and no such buffer exists, but a virtual buffer of that name does (which would be why it was in the list), recreate the buffer by reopening the file. (ido-make-buffer-list): If virtual buffers are being used, call `ido-add-virtual-buffers-to-list' before the make list hook. (ido-virtual-buffers): New variable which contains a copy of the current contents of the `recentf-list', albeit pared down for the sake of speed, and with proper faces applied. (ido-add-virtual-buffers-to-list): Using the `recentf-list', create a list of "virtual buffers" to present to the user in addition to the currently open set. Note that this logic could get rather slow if that list is too large. With the default `recentf-max-saved-items' of 200, there is little speed penalty.
author jwiegley@gmail.com
date Sun, 04 Apr 2010 02:55:19 -0400
parents 1d1d5d9bd884
children 376148b31b5e
line wrap: on
line source

#! /bin/sh

# This script accepts any number of file arguments and checks them into RCS.

# Copyright (C) 1993, 1994, 1995, 2001, 2002, 2003, 2004, 2005, 2006,
#   2007, 2008, 2009, 2010 Free Software Foundation, Inc.

# This file is part of GNU Emacs.

# GNU Emacs is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# GNU Emacs is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.


# 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 -k 2
	`

	# 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

# arch-tag: 89c86949-ef04-4380-838b-bc1444dcb074