#!/bin/sh # Copyright (c) Peter Palfrader # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # wraper for rcs to edit files. Checks out a file, spawns an editor, and then # commits the file again. if [ "$#" = 0 ]; then echo "Usage: $0 " >&2 exit 1 elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then echo "Usage: $0 " exit 0 fi if ! [ -e "$1" ] ; then echo "$1 does not exist." >&2 exit 1 fi if command -v sensible-editor >/dev/null 2>&1; then editor=sensible-editor elif command -v editor >/dev/null 2>&1; then editor=editor elif command -v vi >/dev/null 2>&1; then editor=vi else echo "Cannot find an editor!" >&2 exit 1 fi DN="`dirname "$1"`" BN="`basename "$1"`" if ! [ -e "$1,v" ] && ! [ -e "$DN/RCS/$BN,v" ] ; then echo "Neither $1,v nor $DN/RCS/$BN,v do exist. Maybe you want to create it with 'ci -u $1'." >&2 exit 1 fi owner=`stat -c "%u:%g" $1` rcsdiff -u "$1" if [ $? -ne 0 ] ; then rcsdiff "$1" > "$1.rvi.diff" echo echo "Differences detected" echo "run 'co $1' to overwrite with last committed version" echo "or 'co -l $1; patch $1 < $1.rvi.diff; ci -u $1; chown $owner $1' to commit" exit 1 fi rm -f "$1.rvi.diff" co -l "$1" if [ $? -ne 0 ] ; then echo "Check out failed." echo "Maybe someone else is currently editing this file." echo "Aborting rvi." exit 1 fi if [ "$(id -u)" = "0" ]; then chown "$owner" "$1" fi $editor "$1" ci -u "$1" if [ "$(id -u)" = "0" ]; then chown "$owner" "$1" fi