tests: unify test-convert-git
authorMatt Mackall <mpm@selenic.com>
Sun, 26 Sep 2010 17:16:46 -0500
changeset 12530 f11793a8c107
parent 12529 00e7a7fdae7d
child 12531 a1cbcc1a21f6
tests: unify test-convert-git
tests/test-convert-git
tests/test-convert-git.out
tests/test-convert-git.t
--- a/tests/test-convert-git	Sun Sep 26 17:14:35 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-#!/bin/sh
-
-"$TESTDIR/hghave" git || exit 80
-
-echo "[extensions]" >> $HGRCPATH
-echo "convert=" >> $HGRCPATH
-echo 'hgext.graphlog =' >> $HGRCPATH
-
-GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
-GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
-GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0000"; export GIT_AUTHOR_DATE
-GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
-GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
-GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
-
-count=10
-commit()
-{
-    GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
-    GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
-    git commit "$@" >/dev/null 2>/dev/null || echo "git commit error"
-    count=`expr $count + 1`
-}
-
-mkdir git-repo
-cd git-repo
-git init-db >/dev/null 2>/dev/null
-echo a > a
-mkdir d
-echo b > d/b
-git add a d
-commit -a -m t1
-
-# Remove the directory, then try to replace it with a file
-# (issue 754)
-git rm -f d/b
-commit -m t2
-echo d > d
-git add d
-commit -m t3
-
-echo b >> a
-commit -a -m t4.1
-
-git checkout -b other HEAD~ >/dev/null 2>/dev/null
-echo c > a
-echo a >> a
-commit -a -m t4.2
-
-git checkout master >/dev/null 2>/dev/null
-git pull --no-commit . other > /dev/null 2>/dev/null
-commit -m 'Merge branch other'
-cd ..
-
-hg convert --datesort git-repo
-hg up -q -R git-repo-hg
-hg -R git-repo-hg tip -v
-
-count=10
-mkdir git-repo2
-cd git-repo2
-git init-db >/dev/null 2>/dev/null
-
-echo foo > foo
-git add foo
-commit -a -m 'add foo'
-
-echo >> foo
-commit -a -m 'change foo'
-
-git checkout -b Bar HEAD~ >/dev/null 2>/dev/null
-echo quux >> quux
-git add quux
-commit -a -m 'add quux'
-
-echo bar > bar
-git add bar
-commit -a -m 'add bar'
-
-git checkout -b Baz HEAD~ >/dev/null 2>/dev/null
-echo baz > baz
-git add baz
-commit -a -m 'add baz'
-
-git checkout master >/dev/null 2>/dev/null
-git pull --no-commit . Bar Baz > /dev/null 2>/dev/null
-commit -m 'Octopus merge'
-
-echo bar >> bar
-commit -a -m 'change bar'
-
-git checkout -b Foo HEAD~ >/dev/null 2>/dev/null
-echo >> foo
-commit -a -m 'change foo'
-
-git checkout master >/dev/null 2>/dev/null
-git pull --no-commit -s ours . Foo > /dev/null 2>/dev/null
-commit -m 'Discard change to foo'
-
-cd ..
-
-glog()
-{
-    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
-}
-
-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 git-repo2 "$repo"
-    hg up -q -R "$repo"
-    glog -R "$repo"
-    hg -R "$repo" manifest --debug
-}
-
-echo '% full conversion'
-hg -q convert --datesort git-repo2 fullrepo
-hg up -q -R fullrepo
-glog -R fullrepo
-hg -R fullrepo manifest --debug
-
-splitrepo 'octopus merge' 'foo bar baz'
-
-splitrepo 'only some parents of an octopus merge; "discard" a head' 'foo baz quux'
-
-echo
-echo '% test binary conversion (issue 1359)'
-mkdir git-repo3
-cd git-repo3
-git init-db >/dev/null 2>/dev/null
-python -c 'file("b", "wb").write("".join([chr(i) for i in range(256)])*16)'
-git add b
-commit -a -m addbinary
-cd ..
-
-echo '% convert binary file'
-hg convert git-repo3 git-repo3-hg
-
-cd git-repo3-hg
-hg up -C
-python -c 'print len(file("b", "rb").read())'
-cd ..
-
-echo
-echo '% test author vs committer'
-mkdir git-repo4
-cd git-repo4
-git init-db >/dev/null 2>/dev/null
-echo >> foo
-git add foo
-commit -a -m addfoo
-echo >> foo
-GIT_AUTHOR_NAME="nottest"
-commit -a -m addfoo2
-cd ..
-
-echo '% convert author committer'
-hg convert git-repo4 git-repo4-hg
-hg -R git-repo4-hg log -v
-
-echo '% --sourceorder should fail'
-hg convert --sourcesort git-repo4 git-repo4-sourcesort-hg
-
-echo '% damage git repository and convert again'
-cat > damage.py <<EOF
-import os
-for root, dirs, files in os.walk('git-repo4/.git/objects'):
-    if files:
-        path = os.path.join(root, files[0])
-        os.remove(path)
-        break
-EOF
-python damage.py
-hg convert git-repo4 git-repo4-broken-hg 2>&1 | \
-    grep 'abort:' | sed 's/abort:.*/abort:/g'
-
-true
--- a/tests/test-convert-git.out	Sun Sep 26 17:14:35 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-rm 'd/b'
-assuming destination git-repo-hg
-initializing destination git-repo-hg repository
-scanning source...
-sorting...
-converting...
-5 t1
-4 t2
-3 t3
-2 t4.1
-1 t4.2
-0 Merge branch other
-changeset:   5:c78094926be2
-tag:         tip
-parent:      3:f5f5cb45432b
-parent:      4:4e174f80c67c
-user:        test <test@example.org>
-date:        Mon Jan 01 00:00:15 2007 +0000
-files:       a
-description:
-Merge branch other
-
-
-% full conversion
-@    9 "Discard change to foo" files: foo
-|\
-| o  8 "change foo" files: foo
-| |
-o |  7 "change bar" files: bar
-|/
-o    6 "(octopus merge fixup)" files:
-|\
-| o    5 "Octopus merge" files: baz
-| |\
-o | |  4 "add baz" files: baz
-| | |
-+---o  3 "add bar" files: bar
-| |
-o |  2 "add quux" files: quux
-| |
-| o  1 "change foo" files: foo
-|/
-o  0 "add foo" files: foo
-
-245a3b8bc653999c2b22cdabd517ccb47aecafdf 644   bar
-354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
-9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
-88dfeab657e8cf2cef3dec67b914f49791ae76b1 644   quux
-% foo bar baz: octopus merge
-@    8 "Discard change to foo" files: foo
-|\
-| o  7 "change foo" files: foo
-| |
-o |  6 "change bar" files: bar
-|/
-o    5 "(octopus merge fixup)" files:
-|\
-| o    4 "Octopus merge" files: baz
-| |\
-o | |  3 "add baz" files: baz
-| | |
-+---o  2 "add bar" files: bar
-| |
-| o  1 "change foo" files: foo
-|/
-o  0 "add foo" files: foo
-
-245a3b8bc653999c2b22cdabd517ccb47aecafdf 644   bar
-354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
-9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
-% foo baz quux: only some parents of an octopus merge; "discard" a head
-@  6 "Discard change to foo" files: foo
-|
-o  5 "change foo" files: foo
-|
-o    4 "Octopus merge" files:
-|\
-| o  3 "add baz" files: baz
-| |
-| o  2 "add quux" files: quux
-| |
-o |  1 "change foo" files: foo
-|/
-o  0 "add foo" files: foo
-
-354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
-9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
-88dfeab657e8cf2cef3dec67b914f49791ae76b1 644   quux
-
-% test binary conversion (issue 1359)
-% convert binary file
-initializing destination git-repo3-hg repository
-scanning source...
-sorting...
-converting...
-0 addbinary
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-4096
-
-% test author vs committer
-% convert author committer
-initializing destination git-repo4-hg repository
-scanning source...
-sorting...
-converting...
-1 addfoo
-0 addfoo2
-changeset:   1:d63e967f93da
-tag:         tip
-user:        nottest <test@example.org>
-date:        Mon Jan 01 00:00:21 2007 +0000
-files:       foo
-description:
-addfoo2
-
-committer: test <test@example.org>
-
-
-changeset:   0:0735477b0224
-user:        test <test@example.org>
-date:        Mon Jan 01 00:00:20 2007 +0000
-files:       foo
-description:
-addfoo
-
-
-% --sourceorder should fail
-initializing destination git-repo4-sourcesort-hg repository
-abort: --sourcesort is not supported by this data source
-% damage git repository and convert again
-abort:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-git.t	Sun Sep 26 17:16:46 2010 -0500
@@ -0,0 +1,292 @@
+
+  $ "$TESTDIR/hghave" git || exit 80
+  $ echo "[extensions]" >> $HGRCPATH
+  $ echo "convert=" >> $HGRCPATH
+  $ echo 'hgext.graphlog =' >> $HGRCPATH
+  $ GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
+  $ GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
+  $ GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0000"; export GIT_AUTHOR_DATE
+  $ GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
+  $ GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
+  $ GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
+  $ count=10
+  $ commit()
+  > {
+  >     GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
+  >     GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
+  >     git commit "$@" >/dev/null 2>/dev/null || echo "git commit error"
+  >     count=`expr $count + 1`
+  > }
+  $ mkdir git-repo
+  $ cd git-repo
+  $ git init-db >/dev/null 2>/dev/null
+  $ echo a > a
+  $ mkdir d
+  $ echo b > d/b
+  $ git add a d
+  $ commit -a -m t1
+
+Remove the directory, then try to replace it with a file
+(issue 754)
+
+  $ git rm -f d/b
+  rm 'd/b'
+  $ commit -m t2
+  $ echo d > d
+  $ git add d
+  $ commit -m t3
+  $ echo b >> a
+  $ commit -a -m t4.1
+  $ git checkout -b other HEAD~ >/dev/null 2>/dev/null
+  $ echo c > a
+  $ echo a >> a
+  $ commit -a -m t4.2
+  $ git checkout master >/dev/null 2>/dev/null
+  $ git pull --no-commit . other > /dev/null 2>/dev/null
+  $ commit -m 'Merge branch other'
+  $ cd ..
+  $ hg convert --datesort git-repo
+  assuming destination git-repo-hg
+  initializing destination git-repo-hg repository
+  scanning source...
+  sorting...
+  converting...
+  5 t1
+  4 t2
+  3 t3
+  2 t4.1
+  1 t4.2
+  0 Merge branch other
+  $ hg up -q -R git-repo-hg
+  $ hg -R git-repo-hg tip -v
+  changeset:   5:c78094926be2
+  tag:         tip
+  parent:      3:f5f5cb45432b
+  parent:      4:4e174f80c67c
+  user:        test <test@example.org>
+  date:        Mon Jan 01 00:00:15 2007 +0000
+  files:       a
+  description:
+  Merge branch other
+  
+  
+  $ count=10
+  $ mkdir git-repo2
+  $ cd git-repo2
+  $ git init-db >/dev/null 2>/dev/null
+  $ echo foo > foo
+  $ git add foo
+  $ commit -a -m 'add foo'
+  $ echo >> foo
+  $ commit -a -m 'change foo'
+  $ git checkout -b Bar HEAD~ >/dev/null 2>/dev/null
+  $ echo quux >> quux
+  $ git add quux
+  $ commit -a -m 'add quux'
+  $ echo bar > bar
+  $ git add bar
+  $ commit -a -m 'add bar'
+  $ git checkout -b Baz HEAD~ >/dev/null 2>/dev/null
+  $ echo baz > baz
+  $ git add baz
+  $ commit -a -m 'add baz'
+  $ git checkout master >/dev/null 2>/dev/null
+  $ git pull --no-commit . Bar Baz > /dev/null 2>/dev/null
+  $ commit -m 'Octopus merge'
+  $ echo bar >> bar
+  $ commit -a -m 'change bar'
+  $ git checkout -b Foo HEAD~ >/dev/null 2>/dev/null
+  $ echo >> foo
+  $ commit -a -m 'change foo'
+  $ git checkout master >/dev/null 2>/dev/null
+  $ git pull --no-commit -s ours . Foo > /dev/null 2>/dev/null
+  $ commit -m 'Discard change to foo'
+  $ cd ..
+  $ glog()
+  > {
+  >     hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
+  > }
+  $ 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 git-repo2 "$repo"
+  >     hg up -q -R "$repo"
+  >     glog -R "$repo"
+  >     hg -R "$repo" manifest --debug
+  > }
+
+full conversion
+
+  $ hg -q convert --datesort git-repo2 fullrepo
+  $ hg up -q -R fullrepo
+  $ glog -R fullrepo
+  @    9 "Discard change to foo" files: foo
+  |\
+  | o  8 "change foo" files: foo
+  | |
+  o |  7 "change bar" files: bar
+  |/
+  o    6 "(octopus merge fixup)" files:
+  |\
+  | o    5 "Octopus merge" files: baz
+  | |\
+  o | |  4 "add baz" files: baz
+  | | |
+  +---o  3 "add bar" files: bar
+  | |
+  o |  2 "add quux" files: quux
+  | |
+  | o  1 "change foo" files: foo
+  |/
+  o  0 "add foo" files: foo
+  
+  $ hg -R fullrepo manifest --debug
+  245a3b8bc653999c2b22cdabd517ccb47aecafdf 644   bar
+  354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
+  9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
+  88dfeab657e8cf2cef3dec67b914f49791ae76b1 644   quux
+  $ splitrepo 'octopus merge' 'foo bar baz'
+  % foo bar baz: octopus merge
+  @    8 "Discard change to foo" files: foo
+  |\
+  | o  7 "change foo" files: foo
+  | |
+  o |  6 "change bar" files: bar
+  |/
+  o    5 "(octopus merge fixup)" files:
+  |\
+  | o    4 "Octopus merge" files: baz
+  | |\
+  o | |  3 "add baz" files: baz
+  | | |
+  +---o  2 "add bar" files: bar
+  | |
+  | o  1 "change foo" files: foo
+  |/
+  o  0 "add foo" files: foo
+  
+  245a3b8bc653999c2b22cdabd517ccb47aecafdf 644   bar
+  354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
+  9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
+  $ splitrepo 'only some parents of an octopus merge; "discard" a head' 'foo baz quux'
+  % foo baz quux: only some parents of an octopus merge; "discard" a head
+  @  6 "Discard change to foo" files: foo
+  |
+  o  5 "change foo" files: foo
+  |
+  o    4 "Octopus merge" files:
+  |\
+  | o  3 "add baz" files: baz
+  | |
+  | o  2 "add quux" files: quux
+  | |
+  o |  1 "change foo" files: foo
+  |/
+  o  0 "add foo" files: foo
+  
+  354ae8da6e890359ef49ade27b68bbc361f3ca88 644   baz
+  9277c9cc8dd4576fc01a17939b4351e5ada93466 644   foo
+  88dfeab657e8cf2cef3dec67b914f49791ae76b1 644   quux
+  $ echo
+  
+
+test binary conversion (issue 1359)
+
+  $ mkdir git-repo3
+  $ cd git-repo3
+  $ git init-db >/dev/null 2>/dev/null
+  $ python -c 'file("b", "wb").write("".join([chr(i) for i in range(256)])*16)'
+  $ git add b
+  $ commit -a -m addbinary
+  $ cd ..
+
+convert binary file
+
+  $ hg convert git-repo3 git-repo3-hg
+  initializing destination git-repo3-hg repository
+  scanning source...
+  sorting...
+  converting...
+  0 addbinary
+  $ cd git-repo3-hg
+  $ hg up -C
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ python -c 'print len(file("b", "rb").read())'
+  4096
+  $ cd ..
+  $ echo
+  
+
+test author vs committer
+
+  $ mkdir git-repo4
+  $ cd git-repo4
+  $ git init-db >/dev/null 2>/dev/null
+  $ echo >> foo
+  $ git add foo
+  $ commit -a -m addfoo
+  $ echo >> foo
+  $ GIT_AUTHOR_NAME="nottest"
+  $ commit -a -m addfoo2
+  $ cd ..
+
+convert author committer
+
+  $ hg convert git-repo4 git-repo4-hg
+  initializing destination git-repo4-hg repository
+  scanning source...
+  sorting...
+  converting...
+  1 addfoo
+  0 addfoo2
+  $ hg -R git-repo4-hg log -v
+  changeset:   1:d63e967f93da
+  tag:         tip
+  user:        nottest <test@example.org>
+  date:        Mon Jan 01 00:00:21 2007 +0000
+  files:       foo
+  description:
+  addfoo2
+  
+  committer: test <test@example.org>
+  
+  
+  changeset:   0:0735477b0224
+  user:        test <test@example.org>
+  date:        Mon Jan 01 00:00:20 2007 +0000
+  files:       foo
+  description:
+  addfoo
+  
+  
+
+--sourceorder should fail
+
+  $ hg convert --sourcesort git-repo4 git-repo4-sourcesort-hg
+  initializing destination git-repo4-sourcesort-hg repository
+  abort: --sourcesort is not supported by this data source
+  [255]
+
+damage git repository and convert again
+
+  $ cat > damage.py <<EOF
+  > import os
+  > for root, dirs, files in os.walk('git-repo4/.git/objects'):
+  >     if files:
+  >         path = os.path.join(root, files[0])
+  >         os.remove(path)
+  >         break
+  > EOF
+  $ python damage.py
+  $ hg convert git-repo4 git-repo4-broken-hg 2>&1 | \
+  >     grep 'abort:' | sed 's/abort:.*/abort:/g'
+  abort: