view tests/test-convert-filemap @ 8810:ac92775b3b80

Add patch.eol to ignore EOLs when patching (issue1019) The intent is to fix many issues involving patching when win32ext is enabled. With win32ext, the working directory and repository files EOLs are not the same which means that patches made on a non-win32ext host do not apply cleanly because of EOLs discrepancies. A theorically correct approach would be transform either the patched file or the patch content with the encoding/decoding filters used by win32ext. This solution is tricky to implement and invasive, instead we prefer to address the win32ext case, by offering a way to ignore input EOLs when patching and rewriting them when saving the patched result.
author Patrick Mezard <pmezard@gmail.com>
date Mon, 15 Jun 2009 00:03:26 +0200
parents 5b7da468531b
children b1addc725998
line wrap: on
line source

#!/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