mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-08 18:34:00 +00:00
Estimated hours taken: 0.5 Branches: main, release tools/cvdr: Fix some bugs: - it wasn't showing the log message or diff for the first entry on each branch (except the main branch) - be consistent: pass `-n' to all invocations of cvs
77 lines
2.3 KiB
Bash
Executable File
77 lines
2.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# cvdr - show the most recent changes to a file stored with CVS
|
|
#
|
|
# Starting from the most recent version of the currently checked out
|
|
# branch, cvdr will display the log message and diff of each change made
|
|
# to the file, down to the initial version. Each file on the command
|
|
# line is processed in turn.
|
|
#
|
|
# Originally written by Fergus Henderson <fjh@cs.mu.oz.au>
|
|
# Hacked to support branches by Tyson Dowd <trd@cs.mu.oz.au>
|
|
#
|
|
# Known bugs: doesn't handle the case where the initial version is on a
|
|
# branch -- in other words this script assumes the initial version is 1.1
|
|
# Fixing this is a bit tricky.
|
|
|
|
options=
|
|
while true; do
|
|
case "$1" in
|
|
-*) options="$options $1"
|
|
shift
|
|
;;
|
|
*) break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
for file in "$@"; do
|
|
{
|
|
topversion="`cvs -n status $file 2>/dev/null | awk '
|
|
/ Repository revision:/ { print $3; exit; }
|
|
'`"
|
|
|
|
branch=`expr match $topversion '\(\([0-9]*\.\)*[0-9]*\)\.[0-9]*'`
|
|
N=`expr match $topversion "$branch\.\([0-9]*\)"`
|
|
|
|
echo "Revision $branch.$N"
|
|
|
|
while [ "$branch" != "" ]; do
|
|
while [ $N -gt 1 ]; do
|
|
N1=`expr $N - 1`
|
|
echo cvs log -r$branch.$N $options "$file"
|
|
cvs -n log -N -r$branch.$N $options "$file" | sed '1,/^-------/d'
|
|
echo cvs diff -u -r$branch.$N1 -r$branch.$N $options "$file"
|
|
cvs -n diff -u -r$branch.$N1 -r$branch.$N $options "$file"
|
|
N=$N1
|
|
echo "Revision $branch.$N"
|
|
done
|
|
newbranch=`expr match $branch '\(\([0-9]*\.\)*[0-9]*\)\.[0-9]*\.[0-9]*'`
|
|
N1=`expr match $branch "$newbranch\.\([0-9]*\)"`
|
|
if [ "$newbranch" != "" ]; then
|
|
echo cvs log -r$branch.$N $options "$file"
|
|
cvs -n log -N -r$branch.$N $options "$file" | sed '1,/^-------/d'
|
|
echo cvs diff -u -r$newbranch.$N1 -r$branch.$N $options "$file"
|
|
cvs -n diff -u -r$newbranch.$N1 -r$branch.$N $options "$file"
|
|
echo "Revision $newbranch.$N1"
|
|
fi
|
|
branch=$newbranch
|
|
N=$N1
|
|
done
|
|
|
|
# We only use CVSROOT to remove it as a prefix to the path in
|
|
# CVS/Repository. Most recent versions of CVS/Repository
|
|
# don't include the repository anyway, and so if it isn't set we
|
|
# ignore it.
|
|
if [ "$CVSROOT" == "" ] ; then
|
|
FULLFILE=`cat CVS/Repository`/$file
|
|
else
|
|
FULLFILE=`sed "s^$CVSROOT/^^" CVS/Repository`/"$file"
|
|
fi
|
|
|
|
echo cvs log -r1.1 $options "$file"
|
|
cvs -n log -N -r1.1 $options "$file" | sed '1,/^-------/d'
|
|
echo cvs checkout -p -r1.1 "$FULLFILE"
|
|
cvs -n checkout -p -r1.1 "$FULLFILE" 2>&1
|
|
} | ${PAGER:-more}
|
|
done
|