# HG changeset patch # User Matt Mackall # Date 1285539406 18000 # Node ID f11793a8c107603639fe5f2ab76783035e3cec32 # Parent 00e7a7fdae7ded0c322574f49d434a7d20aeb6cb tests: unify test-convert-git diff -r 00e7a7fdae7d -r f11793a8c107 tests/test-convert-git --- 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 <&1 | \ - grep 'abort:' | sed 's/abort:.*/abort:/g' - -true diff -r 00e7a7fdae7d -r f11793a8c107 tests/test-convert-git.out --- 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 -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 -date: Mon Jan 01 00:00:21 2007 +0000 -files: foo -description: -addfoo2 - -committer: test - - -changeset: 0:0735477b0224 -user: test -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: diff -r 00e7a7fdae7d -r f11793a8c107 tests/test-convert-git.t --- /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 + 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 + date: Mon Jan 01 00:00:21 2007 +0000 + files: foo + description: + addfoo2 + + committer: test + + + changeset: 0:0735477b0224 + user: test + 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 < 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: