tests: unify test-convert-filemap
authorMatt Mackall <mpm@selenic.com>
Sun, 26 Sep 2010 17:14:35 -0500
changeset 12529 00e7a7fdae7d
parent 12528 f6b206417ba4
child 12530 f11793a8c107
tests: unify test-convert-filemap
tests/test-convert-filemap
tests/test-convert-filemap.out
tests/test-convert-filemap.t
--- a/tests/test-convert-filemap	Sun Sep 26 16:54:28 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-#!/bin/sh
-
-HGMERGE=true; export HGMERGE
-
-echo '[extensions]' >> $HGRCPATH
-echo 'graphlog =' >> $HGRCPATH
-echo 'convert =' >> $HGRCPATH
-
-glog()
-{
-    hg glog --template '{rev} "{desc}" files: {files}\n' "$@"
-}
-
-hg init source
-cd source
-
-echo foo > foo
-echo baz > baz
-mkdir -p dir/subdir
-echo dir/file >> dir/file
-echo dir/file2 >> dir/file2
-echo dir/subdir/file3 >> dir/subdir/file3
-echo dir/subdir/file4 >> dir/subdir/file4
-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
-exclude dir/subdir
-include dir/subdir/file3
-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
-
-echo % filemap errors
-cat > errors.fmap <<EOF
-include dir/ # beware that comments changes error line numbers!
-exclude /dir
-rename dir//dir /dir//dir/ "out of sync"
-include
-EOF
-hg -q convert --filemap errors.fmap source errors.repo
-
-true # happy ending
--- a/tests/test-convert-filemap.out	Sun Sep 26 16:54:28 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,167 +0,0 @@
-created new head
-created new head
-@  8 "8: change foo" files: foo
-|
-o    7 "7: second merge; change bar" files: bar baz
-|\
-| o  6 "6: change foo baz" files: baz foo
-| |
-o |  5 "5: change bar baz quux" files: bar baz quux
-|/
-o    4 "4: first merge; change bar baz" files: bar baz
-|\
-| o  3 "3: change bar quux" files: bar quux
-| |
-o |  2 "2: change foo" files: foo
-|/
-o  1 "1: add bar quux; copy foo to copied" files: bar copied quux
-|
-o  0 "0: add foo baz dir/" files: baz dir/file dir/file2 dir/subdir/file3 dir/subdir/file4 foo
-
-% final file versions in this repo:
-9463f52fe115e377cf2878d4fc548117211063f2 644   bar
-94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644   baz
-7711d36246cc83e61fb29cd6d4ef394c63f1ceaf 644   copied
-3e20847584beff41d7cd16136b7331ab3d754be0 644   dir/file
-75e6d3f8328f5f6ace6bf10b98df793416a09dca 644   dir/file2
-5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir/subdir/file3
-57a1c1511590f3de52874adfa04effe8a77d64af 644   dir/subdir/file4
-9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
-bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
-copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
-
-% foo: skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd
-@  3 "8: change foo" files: foo
-|
-o  2 "6: change foo baz" files: foo
-|
-o  1 "2: change foo" files: foo
-|
-o  0 "0: add foo baz dir/" files: foo
-
-9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
-% bar: merges are not merges anymore
-@  4 "7: second merge; change bar" files: bar
-|
-o  3 "5: change bar baz quux" files: bar
-|
-o  2 "4: first merge; change bar baz" files: bar
-|
-o  1 "3: change bar quux" files: bar
-|
-o  0 "1: add bar quux; copy foo to copied" files: bar
-
-9463f52fe115e377cf2878d4fc548117211063f2 644   bar
-% baz: 1st merge is not a merge anymore; 2nd still is
-@    4 "7: second merge; change bar" files: baz
-|\
-| o  3 "6: change foo baz" files: baz
-| |
-o |  2 "5: change bar baz quux" files: baz
-|/
-o  1 "4: first merge; change bar baz" files: baz
-|
-o  0 "0: add foo baz dir/" files: baz
-
-94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644   baz
-% foo quux: we add additional merges when they are interesting
-@  8 "8: change foo" files: foo
-|
-o    7 "7: second merge; change bar" files:
-|\
-| o  6 "6: change foo baz" files: foo
-| |
-o |  5 "5: change bar baz quux" files: quux
-|/
-o    4 "4: first merge; change bar baz" files:
-|\
-| o  3 "3: change bar quux" files: quux
-| |
-o |  2 "2: change foo" files: foo
-|/
-o  1 "1: add bar quux; copy foo to copied" files: quux
-|
-o  0 "0: add foo baz dir/" files: foo
-
-9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
-bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
-% bar quux: partial conversion
-@  1 "3: change bar quux" files: bar quux
-|
-o  0 "1: add bar quux; copy foo to copied" files: bar quux
-
-b79105bedc55102f394e90a789c9c380117c1b4a 644   bar
-db0421cc6b685a458c8d86c7d5c004f94429ea23 644   quux
-% bar quux: complete the partial conversion
-@  4 "7: second merge; change bar" files: bar
-|
-o  3 "5: change bar baz quux" files: bar quux
-|
-o  2 "4: first merge; change bar baz" files: bar
-|
-o  1 "3: change bar quux" files: bar quux
-|
-o  0 "1: add bar quux; copy foo to copied" files: bar quux
-
-9463f52fe115e377cf2878d4fc548117211063f2 644   bar
-bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
-% foo: partial conversion
-@  0 "0: add foo baz dir/" files: foo
-
-2ed2a3912a0b24502043eae84ee4b279c18b90dd 644   foo
-% foo: complete the partial conversion
-@  3 "8: change foo" files: foo
-|
-o  2 "6: change foo baz" files: foo
-|
-o  1 "2: change foo" files: foo
-|
-o  0 "0: add foo baz dir/" files: foo
-
-9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
-% copied: copied file; source not included in new repo
-@  0 "1: add bar quux; copy foo to copied" files: copied
-
-2ed2a3912a0b24502043eae84ee4b279c18b90dd 644   copied
-copied not renamed
-% foo copied: copied file; source included in new repo
-@  4 "8: change foo" files: foo
-|
-o  3 "6: change foo baz" files: foo
-|
-o  2 "2: change foo" files: foo
-|
-o  1 "1: add bar quux; copy foo to copied" files: copied
-|
-o  0 "0: add foo baz dir/" files: foo
-
-7711d36246cc83e61fb29cd6d4ef394c63f1ceaf 644   copied
-9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
-copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
-@  4 "8: change foo" files: foo2
-|
-o  3 "6: change foo baz" files: foo2
-|
-o  2 "2: change foo" files: foo2
-|
-o  1 "1: add bar quux; copy foo to copied" files: copied2
-|
-o  0 "0: add foo baz dir/" files: dir2/file dir2/subdir/file3 foo2
-
-d43feacba7a4f1f2080dde4a4b985bd8a0236d46 644   copied2
-3e20847584beff41d7cd16136b7331ab3d754be0 644   dir2/file
-5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir2/subdir/file3
-9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo2
-copied2 renamed from foo2:2ed2a3912a0b24502043eae84ee4b279c18b90dd
-copied:
-foo
-copied2:
-foo
-% filemap errors
-errors.fmap:1: superfluous / in exclude 'dir/'
-errors.fmap:3: superfluous / in include '/dir'
-errors.fmap:3: superfluous / in rename '/dir'
-errors.fmap:3: superfluous / in exclude 'dir//dir'
-errors.fmap:4: unknown directive 'out of sync'
-errors.fmap:5: path to exclude is missing
-abort: errors in filemap
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-filemap.t	Sun Sep 26 17:14:35 2010 -0500
@@ -0,0 +1,284 @@
+
+  $ HGMERGE=true; export HGMERGE
+  $ echo '[extensions]' >> $HGRCPATH
+  $ echo 'graphlog =' >> $HGRCPATH
+  $ echo 'convert =' >> $HGRCPATH
+  $ glog()
+  > {
+  >     hg glog --template '{rev} "{desc}" files: {files}\n' "$@"
+  > }
+  $ hg init source
+  $ cd source
+  $ echo foo > foo
+  $ echo baz > baz
+  $ mkdir -p dir/subdir
+  $ echo dir/file >> dir/file
+  $ echo dir/file2 >> dir/file2
+  $ echo dir/subdir/file3 >> dir/subdir/file3
+  $ echo dir/subdir/file4 >> dir/subdir/file4
+  $ 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'
+  created new head
+  $ 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'
+  created new head
+  $ 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
+  @  8 "8: change foo" files: foo
+  |
+  o    7 "7: second merge; change bar" files: bar baz
+  |\
+  | o  6 "6: change foo baz" files: baz foo
+  | |
+  o |  5 "5: change bar baz quux" files: bar baz quux
+  |/
+  o    4 "4: first merge; change bar baz" files: bar baz
+  |\
+  | o  3 "3: change bar quux" files: bar quux
+  | |
+  o |  2 "2: change foo" files: foo
+  |/
+  o  1 "1: add bar quux; copy foo to copied" files: bar copied quux
+  |
+  o  0 "0: add foo baz dir/" files: baz dir/file dir/file2 dir/subdir/file3 dir/subdir/file4 foo
+  
+
+final file versions in this repo:
+
+  $ hg manifest --debug
+  9463f52fe115e377cf2878d4fc548117211063f2 644   bar
+  94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644   baz
+  7711d36246cc83e61fb29cd6d4ef394c63f1ceaf 644   copied
+  3e20847584beff41d7cd16136b7331ab3d754be0 644   dir/file
+  75e6d3f8328f5f6ace6bf10b98df793416a09dca 644   dir/file2
+  5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir/subdir/file3
+  57a1c1511590f3de52874adfa04effe8a77d64af 644   dir/subdir/file4
+  9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
+  bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
+  $ hg debugrename copied
+  copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
+  $ 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
+  % foo: skip unwanted merges; use 1st parent in 1st merge, 2nd in 2nd
+  @  3 "8: change foo" files: foo
+  |
+  o  2 "6: change foo baz" files: foo
+  |
+  o  1 "2: change foo" files: foo
+  |
+  o  0 "0: add foo baz dir/" files: foo
+  
+  9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
+  $ splitrepo 'merges are not merges anymore' bar
+  % bar: merges are not merges anymore
+  @  4 "7: second merge; change bar" files: bar
+  |
+  o  3 "5: change bar baz quux" files: bar
+  |
+  o  2 "4: first merge; change bar baz" files: bar
+  |
+  o  1 "3: change bar quux" files: bar
+  |
+  o  0 "1: add bar quux; copy foo to copied" files: bar
+  
+  9463f52fe115e377cf2878d4fc548117211063f2 644   bar
+  $ splitrepo '1st merge is not a merge anymore; 2nd still is' baz
+  % baz: 1st merge is not a merge anymore; 2nd still is
+  @    4 "7: second merge; change bar" files: baz
+  |\
+  | o  3 "6: change foo baz" files: baz
+  | |
+  o |  2 "5: change bar baz quux" files: baz
+  |/
+  o  1 "4: first merge; change bar baz" files: baz
+  |
+  o  0 "0: add foo baz dir/" files: baz
+  
+  94c1be4dfde2ee8d78db8bbfcf81210813307c3d 644   baz
+  $ splitrepo 'we add additional merges when they are interesting' 'foo quux'
+  % foo quux: we add additional merges when they are interesting
+  @  8 "8: change foo" files: foo
+  |
+  o    7 "7: second merge; change bar" files:
+  |\
+  | o  6 "6: change foo baz" files: foo
+  | |
+  o |  5 "5: change bar baz quux" files: quux
+  |/
+  o    4 "4: first merge; change bar baz" files:
+  |\
+  | o  3 "3: change bar quux" files: quux
+  | |
+  o |  2 "2: change foo" files: foo
+  |/
+  o  1 "1: add bar quux; copy foo to copied" files: quux
+  |
+  o  0 "0: add foo baz dir/" files: foo
+  
+  9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
+  bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
+  $ splitrepo 'partial conversion' 'bar quux' '-r 3'
+  % bar quux: partial conversion
+  @  1 "3: change bar quux" files: bar quux
+  |
+  o  0 "1: add bar quux; copy foo to copied" files: bar quux
+  
+  b79105bedc55102f394e90a789c9c380117c1b4a 644   bar
+  db0421cc6b685a458c8d86c7d5c004f94429ea23 644   quux
+  $ splitrepo 'complete the partial conversion' 'bar quux'
+  % bar quux: complete the partial conversion
+  @  4 "7: second merge; change bar" files: bar
+  |
+  o  3 "5: change bar baz quux" files: bar quux
+  |
+  o  2 "4: first merge; change bar baz" files: bar
+  |
+  o  1 "3: change bar quux" files: bar quux
+  |
+  o  0 "1: add bar quux; copy foo to copied" files: bar quux
+  
+  9463f52fe115e377cf2878d4fc548117211063f2 644   bar
+  bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
+  $ rm -r foo.repo
+  $ splitrepo 'partial conversion' 'foo' '-r 3'
+  % foo: partial conversion
+  @  0 "0: add foo baz dir/" files: foo
+  
+  2ed2a3912a0b24502043eae84ee4b279c18b90dd 644   foo
+  $ splitrepo 'complete the partial conversion' 'foo'
+  % foo: complete the partial conversion
+  @  3 "8: change foo" files: foo
+  |
+  o  2 "6: change foo baz" files: foo
+  |
+  o  1 "2: change foo" files: foo
+  |
+  o  0 "0: add foo baz dir/" files: foo
+  
+  9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
+  $ splitrepo 'copied file; source not included in new repo' copied
+  % copied: copied file; source not included in new repo
+  @  0 "1: add bar quux; copy foo to copied" files: copied
+  
+  2ed2a3912a0b24502043eae84ee4b279c18b90dd 644   copied
+  $ hg --cwd copied.repo debugrename copied
+  copied not renamed
+  $ splitrepo 'copied file; source included in new repo' 'foo copied'
+  % foo copied: copied file; source included in new repo
+  @  4 "8: change foo" files: foo
+  |
+  o  3 "6: change foo baz" files: foo
+  |
+  o  2 "2: change foo" files: foo
+  |
+  o  1 "1: add bar quux; copy foo to copied" files: copied
+  |
+  o  0 "0: add foo baz dir/" files: foo
+  
+  7711d36246cc83e61fb29cd6d4ef394c63f1ceaf 644   copied
+  9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
+  $ hg --cwd foo-copied.repo debugrename copied
+  copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
+  $ cat > renames.fmap <<EOF
+  > include dir
+  > exclude dir/file2
+  > rename dir dir2
+  > include foo
+  > include copied
+  > rename foo foo2
+  > rename copied copied2
+  > exclude dir/subdir
+  > include dir/subdir/file3
+  > EOF
+  $ hg -q convert --filemap renames.fmap --datesort source renames.repo
+  $ hg up -q -R renames.repo
+  $ glog -R renames.repo
+  @  4 "8: change foo" files: foo2
+  |
+  o  3 "6: change foo baz" files: foo2
+  |
+  o  2 "2: change foo" files: foo2
+  |
+  o  1 "1: add bar quux; copy foo to copied" files: copied2
+  |
+  o  0 "0: add foo baz dir/" files: dir2/file dir2/subdir/file3 foo2
+  
+  $ hg -R renames.repo manifest --debug
+  d43feacba7a4f1f2080dde4a4b985bd8a0236d46 644   copied2
+  3e20847584beff41d7cd16136b7331ab3d754be0 644   dir2/file
+  5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir2/subdir/file3
+  9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo2
+  $ hg --cwd renames.repo debugrename copied2
+  copied2 renamed from foo2:2ed2a3912a0b24502043eae84ee4b279c18b90dd
+
+copied:
+
+  $ hg --cwd source cat copied
+  foo
+
+copied2:
+
+  $ hg --cwd renames.repo cat copied2
+  foo
+
+filemap errors
+
+  $ cat > errors.fmap <<EOF
+  > include dir/ # beware that comments changes error line numbers!
+  > exclude /dir
+  > rename dir//dir /dir//dir/ "out of sync"
+  > include
+  > EOF
+  $ hg -q convert --filemap errors.fmap source errors.repo
+  errors.fmap:1: superfluous / in exclude 'dir/'
+  errors.fmap:3: superfluous / in include '/dir'
+  errors.fmap:3: superfluous / in rename '/dir'
+  errors.fmap:3: superfluous / in exclude 'dir//dir'
+  errors.fmap:4: unknown directive 'out of sync'
+  errors.fmap:5: path to exclude is missing
+  abort: errors in filemap
+  [255]