Mercurial > hg
diff tests/test-import-bypass.t @ 14611:adbf5e7df96d
import: add --bypass option
This feature is more a way to test patching without a working directory than
something people asked about. Adding a --rev option to specify the parent patch
revision would make it a little more useful.
What this change introduces is patch.repobackend class which let patches be
applied against repository revisions. The caller must supply a filestore object
to receive patched content, which can be turned into a memctx with
patch.makememctx() helper.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Tue, 14 Jun 2011 23:26:35 +0200 |
parents | |
children | 7c26ce9edbd2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-import-bypass.t Tue Jun 14 23:26:35 2011 +0200 @@ -0,0 +1,261 @@ + $ echo "[extensions]" >> $HGRCPATH + $ echo "purge=" >> $HGRCPATH + $ echo "graphlog=" >> $HGRCPATH + + $ shortlog() { + > hg glog --template '{rev}:{node|short} {author} {date|hgdate} - {branch} - {desc|firstline}\n' + > } + +Test --bypass with other options + + $ hg init repo-options + $ cd repo-options + $ echo a > a + $ hg ci -Am adda + adding a + $ echo a >> a + $ hg branch foo + marked working directory as branch foo + $ hg ci -Am changea + $ hg export . > ../test.diff + $ hg up null + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + +Test importing an existing revision + + $ hg import --bypass --exact ../test.diff + applying ../test.diff + $ shortlog + o 1:4e322f7ce8e3 test 0 0 - foo - changea + | + o 0:07f494440405 test 0 0 - default - adda + + +Test failure without --exact + + $ hg import --bypass ../test.diff + applying ../test.diff + unable to find 'a' for patching + abort: patch failed to apply + [255] + $ hg st + $ shortlog + o 1:4e322f7ce8e3 test 0 0 - foo - changea + | + o 0:07f494440405 test 0 0 - default - adda + + +Test --user, --date and --message + + $ hg up 0 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg import --bypass --u test2 -d '1 0' -m patch2 ../test.diff + applying ../test.diff + $ cat .hg/last-message.txt + patch2 (no-eol) + $ shortlog + o 2:2e127d1da504 test2 1 0 - default - patch2 + | + | o 1:4e322f7ce8e3 test 0 0 - foo - changea + |/ + @ 0:07f494440405 test 0 0 - default - adda + + $ hg rollback + repository tip rolled back to revision 1 (undo commit) + working directory now based on revision 0 + +Test --import-branch + + $ hg import --bypass --import-branch ../test.diff + applying ../test.diff + $ shortlog + o 1:4e322f7ce8e3 test 0 0 - foo - changea + | + @ 0:07f494440405 test 0 0 - default - adda + + $ hg rollback + repository tip rolled back to revision 1 (undo commit) + working directory now based on revision 0 + +Test --strip + + $ hg import --bypass --strip 0 - <<EOF + > # HG changeset patch + > # User test + > # Date 0 0 + > # Branch foo + > # Node ID 4e322f7ce8e3e4203950eac9ece27bf7e45ffa6c + > # Parent 07f4944404050f47db2e5c5071e0e84e7a27bba9 + > changea + > + > diff -r 07f494440405 -r 4e322f7ce8e3 a + > --- a Thu Jan 01 00:00:00 1970 +0000 + > +++ a Thu Jan 01 00:00:00 1970 +0000 + > @@ -1,1 +1,2 @@ + > a + > +a + > EOF + applying patch from stdin + $ hg rollback + repository tip rolled back to revision 1 (undo commit) + working directory now based on revision 0 + +Test unsupported combinations + + $ hg import --bypass --no-commit ../test.diff + abort: cannot use --no-commit with --bypass + [255] + $ hg import --bypass --similarity 50 ../test.diff + abort: cannot use --similarity with --bypass + [255] + +Test commit editor + + $ hg diff -c 1 > ../test.diff + $ HGEDITOR=cat hg import --bypass ../test.diff + applying ../test.diff + + + HG: Enter commit message. Lines beginning with 'HG:' are removed. + HG: Leave message empty to abort commit. + HG: -- + HG: user: test + HG: branch 'default' + HG: changed a + abort: empty commit message + [255] + +Test patch.eol is handled + + $ python -c 'file("a", "wb").write("a\r\n")' + $ hg ci -m makeacrlf + $ hg import -m 'should fail because of eol' --bypass ../test.diff + applying ../test.diff + patching file a + Hunk #1 FAILED at 0 + abort: patch failed to apply + [255] + $ hg --config patch.eol=auto import -d '0 0' -m 'test patch.eol' --bypass ../test.diff + applying ../test.diff + $ shortlog + o 3:d7805b4d2cb3 test 0 0 - default - test patch.eol + | + @ 2:872023de769d test 0 0 - default - makeacrlf + | + | o 1:4e322f7ce8e3 test 0 0 - foo - changea + |/ + o 0:07f494440405 test 0 0 - default - adda + + +Test applying multiple patches + + $ hg up -qC 0 + $ echo e > e + $ hg ci -Am adde + adding e + created new head + $ hg export . > ../patch1.diff + $ hg up -qC 1 + $ echo f > f + $ hg ci -Am addf + adding f + $ hg export . > ../patch2.diff + $ cd .. + $ hg clone -r1 repo-options repo-multi1 + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + updating to branch foo + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd repo-multi1 + $ hg up 0 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg import --bypass ../patch1.diff ../patch2.diff + applying ../patch1.diff + applying ../patch2.diff + applied 16581080145e + $ shortlog + o 3:bc8ca3f8a7c4 test 0 0 - default - addf + | + o 2:16581080145e test 0 0 - default - adde + | + | o 1:4e322f7ce8e3 test 0 0 - foo - changea + |/ + @ 0:07f494440405 test 0 0 - default - adda + + +Test applying multiple patches with --exact + + $ cd .. + $ hg clone -r1 repo-options repo-multi2 + adding changesets + adding manifests + adding file changes + added 2 changesets with 2 changes to 1 files + updating to branch foo + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd repo-multi2 + $ hg import --bypass --exact ../patch1.diff ../patch2.diff + applying ../patch1.diff + applying ../patch2.diff + applied 16581080145e + $ shortlog + o 3:d60cb8989666 test 0 0 - foo - addf + | + | o 2:16581080145e test 0 0 - default - adde + | | + @ | 1:4e322f7ce8e3 test 0 0 - foo - changea + |/ + o 0:07f494440405 test 0 0 - default - adda + + + $ cd .. + +Test complicated patch with --exact + + $ hg init repo-exact + $ cd repo-exact + $ echo a > a + $ echo c > c + $ echo d > d + $ echo e > e + $ echo f > f + $ chmod +x f + $ ln -s c linkc + $ hg ci -Am t + adding a + adding c + adding d + adding e + adding f + adding linkc + $ hg cp a aa1 + $ echo b >> a + $ echo b > b + $ hg add b + $ hg cp a aa2 + $ echo aa >> aa2 + $ chmod +x e + $ chmod -x f + $ ln -s a linka + $ hg rm d + $ hg rm linkc + $ hg mv c cc + $ hg ci -m patch + $ hg export --git . > ../test.diff + $ hg up -C null + 0 files updated, 0 files merged, 7 files removed, 0 files unresolved + $ hg purge + $ hg st + $ hg import --bypass --exact ../test.diff + applying ../test.diff + +The patch should have matched the exported revision and generated no additional +data. If not, diff both heads to debug it. + + $ shortlog + o 1:2978fd5c8aa4 test 0 0 - default - patch + | + o 0:a0e19e636a43 test 0 0 - default - t +