|
|
#!/bin/sh
|
|
|
|
|
|
HGMERGE=true; export HGMERGE
|
|
|
|
|
|
echo '[extensions]' >> $HGRCPATH
|
|
|
echo 'hgext.graphlog =' >> $HGRCPATH
|
|
|
echo 'hgext.convert =' >> $HGRCPATH
|
|
|
|
|
|
glog()
|
|
|
{
|
|
|
hg glog --template '{rev} "{desc}" files: {files}\n' "$@"
|
|
|
}
|
|
|
|
|
|
hg init source
|
|
|
cd source
|
|
|
|
|
|
echo foo > foo
|
|
|
echo baz > baz
|
|
|
mkdir dir
|
|
|
echo dir/file >> dir/file
|
|
|
echo dir/file2 >> dir/file2
|
|
|
hg ci -d '0 0' -qAm '0: add foo baz dir/'
|
|
|
|
|
|
echo bar > bar
|
|
|
echo quux > quux
|
|
|
hg copy foo copied
|
|
|
hg ci -d '1 0' -qAm '1: add bar quux; copy foo to copied'
|
|
|
|
|
|
echo >> foo
|
|
|
hg ci -d '2 0' -m '2: change foo'
|
|
|
|
|
|
hg up -qC 1
|
|
|
echo >> bar
|
|
|
echo >> quux
|
|
|
hg ci -d '3 0' -m '3: change bar quux'
|
|
|
|
|
|
hg up -qC 2
|
|
|
hg merge -qr 3
|
|
|
echo >> bar
|
|
|
echo >> baz
|
|
|
hg ci -d '4 0' -m '4: first merge; change bar baz'
|
|
|
|
|
|
echo >> bar
|
|
|
echo 1 >> baz
|
|
|
echo >> quux
|
|
|
hg ci -d '5 0' -m '5: change bar baz quux'
|
|
|
|
|
|
hg up -qC 4
|
|
|
echo >> foo
|
|
|
echo 2 >> baz
|
|
|
hg ci -d '6 0' -m '6: change foo baz'
|
|
|
|
|
|
hg up -qC 5
|
|
|
hg merge -qr 6
|
|
|
echo >> bar
|
|
|
hg ci -d '7 0' -m '7: second merge; change bar'
|
|
|
|
|
|
echo >> foo
|
|
|
hg ci -m '8: change foo'
|
|
|
|
|
|
glog
|
|
|
|
|
|
echo '% final file versions in this repo:'
|
|
|
hg manifest --debug
|
|
|
hg debugrename copied
|
|
|
echo
|
|
|
|
|
|
cd ..
|
|
|
|
|
|
splitrepo()
|
|
|
{
|
|
|
msg="$1"
|
|
|
files="$2"
|
|
|
opts=$3
|
|
|
echo "% $files: $msg"
|
|
|
prefix=`echo "$files" | sed -e 's/ /-/g'`
|
|
|
fmap="$prefix.fmap"
|
|
|
repo="$prefix.repo"
|
|
|
for i in $files; do
|
|
|
echo "include $i" >> "$fmap"
|
|
|
done
|
|
|
hg -q convert $opts --filemap "$fmap" --datesort source "$repo"
|
|
|
hg up -q -R "$repo"
|
|
|
glog -R "$repo"
|
|
|
hg -R "$repo" manifest --debug
|
|
|
}
|
|
|
|
|
|
splitrepo 'skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd' foo
|
|
|
|
|
|
splitrepo 'merges are not merges anymore' bar
|
|
|
|
|
|
splitrepo '1st merge is not a merge anymore; 2nd still is' baz
|
|
|
|
|
|
splitrepo 'we add additional merges when they are interesting' 'foo quux'
|
|
|
|
|
|
splitrepo 'partial conversion' 'bar quux' '-r 3'
|
|
|
splitrepo 'complete the partial conversion' 'bar quux'
|
|
|
|
|
|
rm -r foo.repo
|
|
|
splitrepo 'partial conversion' 'foo' '-r 3'
|
|
|
splitrepo 'complete the partial conversion' 'foo'
|
|
|
|
|
|
splitrepo 'copied file; source not included in new repo' copied
|
|
|
hg --cwd copied.repo debugrename copied
|
|
|
|
|
|
splitrepo 'copied file; source included in new repo' 'foo copied'
|
|
|
hg --cwd foo-copied.repo debugrename copied
|
|
|
|
|
|
cat > renames.fmap <<EOF
|
|
|
include dir
|
|
|
exclude dir/file2
|
|
|
rename dir dir2
|
|
|
include foo
|
|
|
include copied
|
|
|
rename foo foo2
|
|
|
rename copied copied2
|
|
|
EOF
|
|
|
hg -q convert --filemap renames.fmap --datesort source renames.repo
|
|
|
hg up -q -R renames.repo
|
|
|
glog -R renames.repo
|
|
|
hg -R renames.repo manifest --debug
|
|
|
hg --cwd renames.repo debugrename copied2
|
|
|
echo 'copied:'
|
|
|
hg --cwd source cat copied
|
|
|
echo 'copied2:'
|
|
|
hg --cwd renames.repo cat copied2
|
|
|
|