|
|
#!/bin/sh
|
|
|
|
|
|
# This feature requires use of builtin cvsps!
|
|
|
"$TESTDIR/hghave" cvs || exit 80
|
|
|
|
|
|
set -e
|
|
|
|
|
|
echo "[extensions]" >> $HGRCPATH
|
|
|
echo "convert = " >> $HGRCPATH
|
|
|
echo "graphlog = " >> $HGRCPATH
|
|
|
echo "[convert]" >> $HGRCPATH
|
|
|
echo "cvsps=builtin" >> $HGRCPATH
|
|
|
|
|
|
echo % create cvs repository with one project
|
|
|
mkdir cvsrepo
|
|
|
cd cvsrepo
|
|
|
CVSROOT=`pwd`
|
|
|
export CVSROOT
|
|
|
CVS_OPTIONS=-f
|
|
|
export CVS_OPTIONS
|
|
|
cd ..
|
|
|
|
|
|
filterpath()
|
|
|
{
|
|
|
eval "$@" | sed "s:$CVSROOT:*REPO*:g"
|
|
|
}
|
|
|
|
|
|
cvscall()
|
|
|
{
|
|
|
echo cvs -f "$@"
|
|
|
cvs -f "$@" 2>&1
|
|
|
}
|
|
|
|
|
|
# output of 'cvs ci' varies unpredictably, so just discard it
|
|
|
cvsci()
|
|
|
{
|
|
|
echo cvs -f ci "$@"
|
|
|
cvs -f ci "$@" >/dev/null 2>&1
|
|
|
}
|
|
|
|
|
|
filterpath cvscall -d "$CVSROOT" init
|
|
|
mkdir cvsrepo/proj
|
|
|
|
|
|
cvscall -q co proj
|
|
|
|
|
|
echo % create file1 on the trunk
|
|
|
cd proj
|
|
|
touch file1
|
|
|
cvscall -Q add file1
|
|
|
cvsci -m"add file1 on trunk" file1
|
|
|
|
|
|
echo % create two branches
|
|
|
cvscall -q tag -b v1_0
|
|
|
cvscall -q tag -b v1_1
|
|
|
|
|
|
echo % create file2 on branch v1_0
|
|
|
cvscall -Q up -rv1_0
|
|
|
touch file2
|
|
|
cvscall -Q add file2
|
|
|
cvsci -m"add file2" file2
|
|
|
|
|
|
echo % create file3, file4 on branch v1_1
|
|
|
cvscall -Q up -rv1_1
|
|
|
touch file3
|
|
|
touch file4
|
|
|
cvscall -Q add file3 file4
|
|
|
cvsci -m"add file3, file4 on branch v1_1" file3 file4
|
|
|
|
|
|
echo % merge file2 from v1_0 to v1_1
|
|
|
cvscall -Q up -jv1_0
|
|
|
cvsci -m"MERGE from v1_0: add file2"
|
|
|
|
|
|
# Step things up a notch: now we make the history really hairy, with
|
|
|
# changes bouncing back and forth between trunk and v1_2 and merges
|
|
|
# going both ways. (I.e., try to model the real world.)
|
|
|
|
|
|
echo "% create branch v1_2"
|
|
|
cvscall -Q up -A
|
|
|
cvscall -q tag -b v1_2
|
|
|
|
|
|
echo "% create file5 on branch v1_2"
|
|
|
cvscall -Q up -rv1_2
|
|
|
touch file5
|
|
|
cvs -Q add file5
|
|
|
cvsci -m"add file5 on v1_2"
|
|
|
|
|
|
echo "% create file6 on trunk post-v1_2"
|
|
|
cvscall -Q up -A
|
|
|
touch file6
|
|
|
cvscall -Q add file6
|
|
|
cvsci -m"add file6 on trunk post-v1_2"
|
|
|
|
|
|
echo "% merge file5 from v1_2 to trunk"
|
|
|
cvscall -Q up -A
|
|
|
cvscall -Q up -jv1_2 file5
|
|
|
cvsci -m"MERGE from v1_2: add file5"
|
|
|
|
|
|
echo "% merge file6 from trunk to v1_2"
|
|
|
cvscall -Q up -rv1_2
|
|
|
cvscall up -jHEAD file6
|
|
|
cvsci -m"MERGE from HEAD: add file6"
|
|
|
|
|
|
echo % cvs rlog output
|
|
|
filterpath cvscall -q rlog proj | egrep '^(RCS file|revision)'
|
|
|
|
|
|
echo "% convert to hg (#1)"
|
|
|
cd ..
|
|
|
filterpath hg convert --datesort proj proj.hg
|
|
|
|
|
|
echo "% hg glog output (#1)"
|
|
|
hg -R proj.hg glog --template "{rev} {desc}\n"
|
|
|
|
|
|
echo "% convert to hg (#2: with merge detection)"
|
|
|
filterpath hg convert \
|
|
|
--config convert.cvsps.mergefrom="\"^MERGE from (\S+):\"" \
|
|
|
--datesort \
|
|
|
proj proj.hg2
|
|
|
|
|
|
echo "% hg glog output (#2)"
|
|
|
hg -R proj.hg2 glog --template "{rev} {desc}\n"
|
|
|
|