This time ones that are prefixed with =, ", ', or `. This appears to
be the last of them.
Details
Details
Diff Detail
Diff Detail
- Repository
- rHG Mercurial
- Lint
Lint Skipped - Unit
Unit Tests Skipped
( )
This time ones that are prefixed with =, ", ', or `. This appears to
be the last of them.
Lint Skipped |
Unit Tests Skipped |
Path | Packages | |||
---|---|---|---|---|
M | tests/test-bookmarks-pushpull.t (2 lines) | |||
M | tests/test-bundle2-exchange.t (4 lines) | |||
M | tests/test-bundle2-format.t (2 lines) | |||
M | tests/test-bundle2-remote-changegroup.t (2 lines) | |||
M | tests/test-clone.t (2 lines) | |||
M | tests/test-clonebundles.t (2 lines) | |||
M | tests/test-filebranch.t (2 lines) | |||
M | tests/test-http-branchmap.t (2 lines) | |||
M | tests/test-init.t (14 lines) | |||
M | tests/test-largefiles-wireproto.t (2 lines) | |||
M | tests/test-merge1.t (2 lines) | |||
M | tests/test-merge6.t (2 lines) | |||
M | tests/test-rename-merge2.t (204 lines) | |||
M | tests/test-revset.t (4 lines) | |||
M | tests/test-ssh-bundle1.t (38 lines) | |||
M | tests/test-ssh-clone-r.t (10 lines) | |||
M | tests/test-ssh.t (38 lines) | |||
M | tests/test-subrepo-relative-path.t (4 lines) | |||
M | tests/test-treemanifest.t (2 lines) | |||
M | tests/test-wireproto.t (8 lines) |
adding file changes | adding file changes | ||||
added 1 changesets with 1 changes to 1 files | added 1 changesets with 1 changes to 1 files | ||||
$ cat >> .hg/hgrc << EOF | $ cat >> .hg/hgrc << EOF | ||||
> [paths] | > [paths] | ||||
> local=../issue4455-dest/ | > local=../issue4455-dest/ | ||||
> ssh=ssh://user@dummy/issue4455-dest | > ssh=ssh://user@dummy/issue4455-dest | ||||
> http=http://localhost:$HGPORT/ | > http=http://localhost:$HGPORT/ | ||||
> [ui] | > [ui] | ||||
> ssh=python "$TESTDIR/dummyssh" | > ssh=$PYTHON "$TESTDIR/dummyssh" | ||||
> EOF | > EOF | ||||
$ cat >> ../issue4455-dest/.hg/hgrc << EOF | $ cat >> ../issue4455-dest/.hg/hgrc << EOF | ||||
> [hooks] | > [hooks] | ||||
> prepushkey=false | > prepushkey=false | ||||
> [web] | > [web] | ||||
> push_ssl = false | > push_ssl = false | ||||
> allow_push = * | > allow_push = * | ||||
> EOF | > EOF |
> hg debuglock | > hg debuglock | ||||
> EOF | > EOF | ||||
$ cat >> $HGRCPATH << EOF | $ cat >> $HGRCPATH << EOF | ||||
> [experimental] | > [experimental] | ||||
> evolution=createmarkers,exchange | > evolution=createmarkers,exchange | ||||
> bundle2-output-capture=True | > bundle2-output-capture=True | ||||
> [ui] | > [ui] | ||||
> ssh=python "$TESTDIR/dummyssh" | > ssh=$PYTHON "$TESTDIR/dummyssh" | ||||
> logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} | > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} | ||||
> [web] | > [web] | ||||
> push_ssl = false | > push_ssl = false | ||||
> allow_push = * | > allow_push = * | ||||
> [phases] | > [phases] | ||||
> publish=False | > publish=False | ||||
> [hooks] | > [hooks] | ||||
> pretxnclose.tip = hg log -r tip -T "pre-close-tip:{node|short} {phase} {bookmarks}\n" | > pretxnclose.tip = hg log -r tip -T "pre-close-tip:{node|short} {phase} {bookmarks}\n" | ||||
remote: wlock: free | remote: wlock: free | ||||
abort: Clown phase push failed | abort: Clown phase push failed | ||||
[255] | [255] | ||||
Test lazily acquiring the lock during unbundle | Test lazily acquiring the lock during unbundle | ||||
$ cp $TESTTMP/hgrc.orig $HGRCPATH | $ cp $TESTTMP/hgrc.orig $HGRCPATH | ||||
$ cat >> $HGRCPATH <<EOF | $ cat >> $HGRCPATH <<EOF | ||||
> [ui] | > [ui] | ||||
> ssh=python "$TESTDIR/dummyssh" | > ssh=$PYTHON "$TESTDIR/dummyssh" | ||||
> EOF | > EOF | ||||
$ cat >> $TESTTMP/locktester.py <<EOF | $ cat >> $TESTTMP/locktester.py <<EOF | ||||
> import os | > import os | ||||
> from mercurial import extensions, bundle2, util | > from mercurial import extensions, bundle2, util | ||||
> def checklock(orig, repo, *args, **kwargs): | > def checklock(orig, repo, *args, **kwargs): | ||||
> if repo.svfs.lexists("lock"): | > if repo.svfs.lexists("lock"): | ||||
> raise util.Abort("Lock should not be taken") | > raise util.Abort("Lock should not be taken") |
> ui.write('parts count: %i\n' % count) | > ui.write('parts count: %i\n' % count) | ||||
> EOF | > EOF | ||||
$ cat >> $HGRCPATH << EOF | $ cat >> $HGRCPATH << EOF | ||||
> [extensions] | > [extensions] | ||||
> bundle2=$TESTTMP/bundle2.py | > bundle2=$TESTTMP/bundle2.py | ||||
> [experimental] | > [experimental] | ||||
> evolution=createmarkers | > evolution=createmarkers | ||||
> [ui] | > [ui] | ||||
> ssh=python "$TESTDIR/dummyssh" | > ssh=$PYTHON "$TESTDIR/dummyssh" | ||||
> logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} | > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} | ||||
> [web] | > [web] | ||||
> push_ssl = false | > push_ssl = false | ||||
> allow_push = * | > allow_push = * | ||||
> [phases] | > [phases] | ||||
> publish=False | > publish=False | ||||
> EOF | > EOF | ||||
Start a simple HTTP server to serve bundles | Start a simple HTTP server to serve bundles | ||||
$ $PYTHON "$TESTDIR/dumbhttp.py" -p $HGPORT --pid dumb.pid | $ $PYTHON "$TESTDIR/dumbhttp.py" -p $HGPORT --pid dumb.pid | ||||
$ cat dumb.pid >> $DAEMON_PIDS | $ cat dumb.pid >> $DAEMON_PIDS | ||||
$ cat >> $HGRCPATH << EOF | $ cat >> $HGRCPATH << EOF | ||||
> [ui] | > [ui] | ||||
> ssh=python "$TESTDIR/dummyssh" | > ssh=$PYTHON "$TESTDIR/dummyssh" | ||||
> logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} | > logtemplate={rev}:{node|short} {phase} {author} {bookmarks} {desc|firstline} | ||||
> EOF | > EOF | ||||
$ hg init repo | $ hg init repo | ||||
$ hg -R repo unbundle $TESTDIR/bundles/rebase.hg | $ hg -R repo unbundle $TESTDIR/bundles/rebase.hg | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests |
Test that auto sharing doesn't cause failure of "hg clone local remote" | Test that auto sharing doesn't cause failure of "hg clone local remote" | ||||
$ cd $TESTTMP | $ cd $TESTTMP | ||||
$ hg -R a id -r 0 | $ hg -R a id -r 0 | ||||
acb14030fe0a | acb14030fe0a | ||||
$ hg id -R remote -r 0 | $ hg id -R remote -r 0 | ||||
abort: repository remote not found! | abort: repository remote not found! | ||||
[255] | [255] | ||||
$ hg --config share.pool=share -q clone -e "python \"$TESTDIR/dummyssh\"" a ssh://user@dummy/remote | $ hg --config share.pool=share -q clone -e "$PYTHON \"$TESTDIR/dummyssh\"" a ssh://user@dummy/remote | ||||
$ hg -R remote id -r 0 | $ hg -R remote id -r 0 | ||||
acb14030fe0a | acb14030fe0a | ||||
Cloning into pooled storage doesn't race (issue5104) | Cloning into pooled storage doesn't race (issue5104) | ||||
$ HGPOSTLOCKDELAY=2.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace1 > race1.log 2>&1 & | $ HGPOSTLOCKDELAY=2.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace1 > race1.log 2>&1 & | ||||
$ HGPRELOCKDELAY=1.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace2 > race2.log 2>&1 | $ HGPRELOCKDELAY=1.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace2 > race2.log 2>&1 | ||||
$ wait | $ wait |
adding file changes | adding file changes | ||||
added 2 changesets with 2 changes to 2 files | added 2 changesets with 2 changes to 2 files | ||||
finished applying clone bundle | finished applying clone bundle | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
Feature works over SSH | Feature works over SSH | ||||
$ hg clone -U -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/server ssh-full-clone | $ hg clone -U -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/server ssh-full-clone | ||||
applying clone bundle from http://localhost:$HGPORT1/full.hg | applying clone bundle from http://localhost:$HGPORT1/full.hg | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 2 changesets with 2 changes to 2 files | added 2 changesets with 2 changes to 2 files | ||||
finished applying clone bundle | finished applying clone bundle | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found |
This test makes sure that we don't mark a file as merged with its ancestor | This test makes sure that we don't mark a file as merged with its ancestor | ||||
when we do a merge. | when we do a merge. | ||||
$ cat <<EOF > merge | $ cat <<EOF > merge | ||||
> import sys, os | > import sys, os | ||||
> print "merging for", os.path.basename(sys.argv[1]) | > print "merging for", os.path.basename(sys.argv[1]) | ||||
> EOF | > EOF | ||||
$ HGMERGE="python ../merge"; export HGMERGE | $ HGMERGE="$PYTHON ../merge"; export HGMERGE | ||||
Creating base: | Creating base: | ||||
$ hg init a | $ hg init a | ||||
$ cd a | $ cd a | ||||
$ echo 1 > foo | $ echo 1 > foo | ||||
$ echo 1 > bar | $ echo 1 > bar | ||||
$ echo 1 > baz | $ echo 1 > baz |
> sys.stderr = StdoutWrapper(sys.stderr) | > sys.stderr = StdoutWrapper(sys.stderr) | ||||
> | > | ||||
> myui = ui.ui.load() | > myui = ui.ui.load() | ||||
> repo = hg.repository(myui, 'a') | > repo = hg.repository(myui, 'a') | ||||
> commands.serve(myui, repo, stdio=True, cmdserver=False) | > commands.serve(myui, repo, stdio=True, cmdserver=False) | ||||
> EOF | > EOF | ||||
$ echo baz >> b/foo | $ echo baz >> b/foo | ||||
$ hg -R b ci -m baz | $ hg -R b ci -m baz | ||||
$ hg push -R b -e 'python oldhg' ssh://dummy/ --encoding latin1 | $ hg push -R b -e '$PYTHON oldhg' ssh://dummy/ --encoding latin1 | ||||
pushing to ssh://dummy/ | pushing to ssh://dummy/ | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files |
test failure | test failure | ||||
$ hg init local | $ hg init local | ||||
abort: repository local already exists! | abort: repository local already exists! | ||||
[255] | [255] | ||||
init+push to remote2 | init+push to remote2 | ||||
$ hg init -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote2 | $ hg init -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote2 | ||||
$ hg incoming -R remote2 local | $ hg incoming -R remote2 local | ||||
comparing with local | comparing with local | ||||
changeset: 0:08b9e9f63b32 | changeset: 0:08b9e9f63b32 | ||||
tag: tip | tag: tip | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: init | summary: init | ||||
$ hg push -R local -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote2 | $ hg push -R local -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote2 | ||||
pushing to ssh://user@dummy/remote2 | pushing to ssh://user@dummy/remote2 | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files | ||||
clone to remote1 | clone to remote1 | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remote1 | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remote1 | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files | ||||
The largefiles extension doesn't crash | The largefiles extension doesn't crash | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remotelf --config extensions.largefiles= | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remotelf --config extensions.largefiles= | ||||
The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !) | The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !) | ||||
The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !) | The fsmonitor extension is incompatible with the largefiles extension and has been disabled. (fsmonitor !) | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files | ||||
init to existing repo | init to existing repo | ||||
$ hg init -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote1 | $ hg init -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote1 | ||||
abort: repository remote1 already exists! | abort: repository remote1 already exists! | ||||
abort: could not create remote repo! | abort: could not create remote repo! | ||||
[255] | [255] | ||||
clone to existing repo | clone to existing repo | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remote1 | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remote1 | ||||
abort: repository remote1 already exists! | abort: repository remote1 already exists! | ||||
abort: could not create remote repo! | abort: could not create remote repo! | ||||
[255] | [255] | ||||
output of dummyssh | output of dummyssh | ||||
$ cat dummylog | $ cat dummylog | ||||
Got arguments 1:user@dummy 2:hg init remote2 | Got arguments 1:user@dummy 2:hg init remote2 | ||||
revlogv1 | revlogv1 | ||||
store | store | ||||
clone bookmarks | clone bookmarks | ||||
$ hg -R local bookmark test | $ hg -R local bookmark test | ||||
$ hg -R local bookmarks | $ hg -R local bookmarks | ||||
* test 0:08b9e9f63b32 | * test 0:08b9e9f63b32 | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remote-bookmarks | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" local ssh://user@dummy/remote-bookmarks | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files | ||||
exporting bookmark test | exporting bookmark test | ||||
$ hg -R remote-bookmarks bookmarks | $ hg -R remote-bookmarks bookmarks | ||||
test 0:08b9e9f63b32 | test 0:08b9e9f63b32 |
Please enable it in your Mercurial config file. | Please enable it in your Mercurial config file. | ||||
[255] | [255] | ||||
used all HGPORTs, kill all daemons | used all HGPORTs, kill all daemons | ||||
$ killdaemons.py | $ killdaemons.py | ||||
#endif | #endif | ||||
vanilla clients locked out from largefiles ssh repos | vanilla clients locked out from largefiles ssh repos | ||||
$ hg --config extensions.largefiles=! clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5 | $ hg --config extensions.largefiles=! clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/r4 r5 | ||||
remote: | remote: | ||||
remote: This repository uses the largefiles extension. | remote: This repository uses the largefiles extension. | ||||
remote: | remote: | ||||
remote: Please enable it in your Mercurial config file. | remote: Please enable it in your Mercurial config file. | ||||
remote: | remote: | ||||
remote: - | remote: - | ||||
abort: remote error | abort: remote error | ||||
(check previous remote output) | (check previous remote output) |
$ cat <<EOF > merge | $ cat <<EOF > merge | ||||
> import sys, os | > import sys, os | ||||
> | > | ||||
> try: | > try: | ||||
> import msvcrt | > import msvcrt | ||||
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | > msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) | ||||
> msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) | > msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) | ||||
> except ImportError: | > except ImportError: | ||||
> pass | > pass | ||||
> | > | ||||
> print "merging for", os.path.basename(sys.argv[1]) | > print "merging for", os.path.basename(sys.argv[1]) | ||||
> EOF | > EOF | ||||
$ HGMERGE="python ../merge"; export HGMERGE | $ HGMERGE="$PYTHON ../merge"; export HGMERGE | ||||
$ hg init t | $ hg init t | ||||
$ cd t | $ cd t | ||||
$ echo This is file a1 > a | $ echo This is file a1 > a | ||||
$ hg add a | $ hg add a | ||||
$ hg commit -m "commit #0" | $ hg commit -m "commit #0" | ||||
$ echo This is file b1 > b | $ echo This is file b1 > b | ||||
$ hg add b | $ hg add b |
$ cat <<EOF > merge | $ cat <<EOF > merge | ||||
> import sys, os | > import sys, os | ||||
> print "merging for", os.path.basename(sys.argv[1]) | > print "merging for", os.path.basename(sys.argv[1]) | ||||
> EOF | > EOF | ||||
$ HGMERGE="python ../merge"; export HGMERGE | $ HGMERGE="$PYTHON ../merge"; export HGMERGE | ||||
$ hg init A1 | $ hg init A1 | ||||
$ cd A1 | $ cd A1 | ||||
$ echo This is file foo1 > foo | $ echo This is file foo1 > foo | ||||
$ echo This is file bar1 > bar | $ echo This is file bar1 > bar | ||||
$ hg add foo bar | $ hg add foo bar | ||||
$ hg commit -m "commit text" | $ hg commit -m "commit text" | ||||
> # working dir | > # working dir | ||||
> echo local > rev | > echo local > rev | ||||
> if [ "$3" != "" ] ; then $3 ; fi | > if [ "$3" != "" ] ; then $3 ; fi | ||||
> | > | ||||
> # merge | > # merge | ||||
> echo "--------------" | > echo "--------------" | ||||
> echo "test L:$1 R:$2 W:$3 - $4" | > echo "test L:$1 R:$2 W:$3 - $4" | ||||
> echo "--------------" | > echo "--------------" | ||||
> hg merge -y --debug --traceback --tool="python ../merge" | > hg merge -y --debug --traceback --tool="$PYTHON ../merge" | ||||
> | > | ||||
> echo "--------------" | > echo "--------------" | ||||
> hg status -camC -X rev | > hg status -camC -X rev | ||||
> | > | ||||
> hg ci -m "merge" | > hg ci -m "merge" | ||||
> | > | ||||
> echo "--------------" | > echo "--------------" | ||||
> echo | > echo | ||||
checking for directory renames | checking for directory renames | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: e300d1c794ec+, remote: 4ce40f5aca24 | ancestor: 924404dff337, local: e300d1c794ec+, remote: 4ce40f5aca24 | ||||
preserving a for resolve of b | preserving a for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: remote copied from a -> m (premerge) | b: remote copied from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging a and b to b | merging a and b to b | ||||
my b@e300d1c794ec+ other b@4ce40f5aca24 ancestor a@924404dff337 | my b@e300d1c794ec+ other b@4ce40f5aca24 ancestor a@924404dff337 | ||||
premerge successful | premerge successful | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@e300d1c794ec+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | my rev@e300d1c794ec+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@e300d1c794ec+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | my rev@e300d1c794ec+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
a | a | ||||
C a | C a | ||||
-------------- | -------------- | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: f4db7e329e71 | ancestor: 924404dff337, local: 86a2aa42fc76+, remote: f4db7e329e71 | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
a: remote is newer -> g | a: remote is newer -> g | ||||
getting a | getting a | ||||
b: local copied/moved from a -> m (premerge) | b: local copied/moved from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b and a to b | merging b and a to b | ||||
my b@86a2aa42fc76+ other a@f4db7e329e71 ancestor a@924404dff337 | my b@86a2aa42fc76+ other a@f4db7e329e71 ancestor a@924404dff337 | ||||
premerge successful | premerge successful | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@86a2aa42fc76+ other rev@f4db7e329e71 ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@f4db7e329e71 ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@86a2aa42fc76+ other rev@f4db7e329e71 ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@f4db7e329e71 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 2 files merged, 0 files removed, 0 files unresolved | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M a | M a | ||||
M b | M b | ||||
a | a | ||||
-------------- | -------------- | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: e300d1c794ec+, remote: bdb19105162a | ancestor: 924404dff337, local: e300d1c794ec+, remote: bdb19105162a | ||||
preserving a for resolve of b | preserving a for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
removing a | removing a | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: remote moved from a -> m (premerge) | b: remote moved from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging a and b to b | merging a and b to b | ||||
my b@e300d1c794ec+ other b@bdb19105162a ancestor a@924404dff337 | my b@e300d1c794ec+ other b@bdb19105162a ancestor a@924404dff337 | ||||
premerge successful | premerge successful | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@e300d1c794ec+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@e300d1c794ec+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@e300d1c794ec+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@e300d1c794ec+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
a | a | ||||
-------------- | -------------- | ||||
checking for directory renames | checking for directory renames | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 02963e448370+, remote: f4db7e329e71 | ancestor: 924404dff337, local: 02963e448370+, remote: f4db7e329e71 | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: local copied/moved from a -> m (premerge) | b: local copied/moved from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b and a to b | merging b and a to b | ||||
my b@02963e448370+ other a@f4db7e329e71 ancestor a@924404dff337 | my b@02963e448370+ other a@f4db7e329e71 ancestor a@924404dff337 | ||||
premerge successful | premerge successful | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@02963e448370+ other rev@f4db7e329e71 ancestor rev@924404dff337 | my rev@02963e448370+ other rev@f4db7e329e71 ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@02963e448370+ other rev@f4db7e329e71 ancestor rev@924404dff337 | my rev@02963e448370+ other rev@f4db7e329e71 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
a | a | ||||
-------------- | -------------- | ||||
checking for directory renames | checking for directory renames | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 94b33a1b7f2d+, remote: 4ce40f5aca24 | ancestor: 924404dff337, local: 94b33a1b7f2d+, remote: 4ce40f5aca24 | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
b: remote created -> g | b: remote created -> g | ||||
getting b | getting b | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@94b33a1b7f2d+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | my rev@94b33a1b7f2d+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@94b33a1b7f2d+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | my rev@94b33a1b7f2d+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 1 files merged, 0 files removed, 0 files unresolved | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
C a | C a | ||||
-------------- | -------------- | ||||
src: 'a' -> dst: 'b' | src: 'a' -> dst: 'b' | ||||
checking for directory renames | checking for directory renames | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 97c705ade336 | ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 97c705ade336 | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@86a2aa42fc76+ other rev@97c705ade336 ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@97c705ade336 ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@86a2aa42fc76+ other rev@97c705ade336 ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@97c705ade336 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
C a | C a | ||||
C b | C b | ||||
-------------- | -------------- | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 94b33a1b7f2d+, remote: bdb19105162a | ancestor: 924404dff337, local: 94b33a1b7f2d+, remote: bdb19105162a | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
a: other deleted -> r | a: other deleted -> r | ||||
removing a | removing a | ||||
b: remote created -> g | b: remote created -> g | ||||
getting b | getting b | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@94b33a1b7f2d+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@94b33a1b7f2d+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@94b33a1b7f2d+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@94b33a1b7f2d+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 1 files merged, 1 files removed, 0 files unresolved | 1 files updated, 1 files merged, 1 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
-------------- | -------------- | ||||
$ tm "nm a b" " " " " "8 nothing" | $ tm "nm a b" " " " " "8 nothing" | ||||
created new head | created new head | ||||
-------------- | -------------- | ||||
test L:nm a b R: W: - 8 nothing | test L:nm a b R: W: - 8 nothing | ||||
-------------- | -------------- | ||||
searching for copies back to rev 1 | searching for copies back to rev 1 | ||||
unmatched files in local: | unmatched files in local: | ||||
b | b | ||||
all copies found (* = to merge, ! = divergent, % = renamed and deleted): | all copies found (* = to merge, ! = divergent, % = renamed and deleted): | ||||
src: 'a' -> dst: 'b' | src: 'a' -> dst: 'b' | ||||
checking for directory renames | checking for directory renames | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 02963e448370+, remote: 97c705ade336 | ancestor: 924404dff337, local: 02963e448370+, remote: 97c705ade336 | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@02963e448370+ other rev@97c705ade336 ancestor rev@924404dff337 | my rev@02963e448370+ other rev@97c705ade336 ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@02963e448370+ other rev@97c705ade336 ancestor rev@924404dff337 | my rev@02963e448370+ other rev@97c705ade336 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
C b | C b | ||||
-------------- | -------------- | ||||
$ tm "um a b" "um a b" " " "9 do merge with ancestor in a" | $ tm "um a b" "um a b" " " "9 do merge with ancestor in a" | ||||
created new head | created new head | ||||
-------------- | -------------- | ||||
test L:um a b R:um a b W: - 9 do merge with ancestor in a | test L:um a b R:um a b W: - 9 do merge with ancestor in a | ||||
-------------- | -------------- | ||||
searching for copies back to rev 1 | searching for copies back to rev 1 | ||||
unmatched files new in both: | unmatched files new in both: | ||||
b | b | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 62e7bf090eba+, remote: 49b6d8032493 | ancestor: 924404dff337, local: 62e7bf090eba+, remote: 49b6d8032493 | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: both renamed from a -> m (premerge) | b: both renamed from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@62e7bf090eba+ other b@49b6d8032493 ancestor a@924404dff337 | my b@62e7bf090eba+ other b@49b6d8032493 ancestor a@924404dff337 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@62e7bf090eba+ other rev@49b6d8032493 ancestor rev@924404dff337 | my rev@62e7bf090eba+ other rev@49b6d8032493 ancestor rev@924404dff337 | ||||
b: both renamed from a -> m (merge) | b: both renamed from a -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@62e7bf090eba+ other b@49b6d8032493 ancestor a@924404dff337 | my b@62e7bf090eba+ other b@49b6d8032493 ancestor a@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@62e7bf090eba+ other rev@49b6d8032493 ancestor rev@924404dff337 | my rev@62e7bf090eba+ other rev@49b6d8032493 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
-------------- | -------------- | ||||
ancestor: 924404dff337, local: 02963e448370+, remote: fe905ef2c33e | ancestor: 924404dff337, local: 02963e448370+, remote: fe905ef2c33e | ||||
note: possible conflict - a was renamed multiple times to: | note: possible conflict - a was renamed multiple times to: | ||||
b | b | ||||
c | c | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
c: remote created -> g | c: remote created -> g | ||||
getting c | getting c | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@02963e448370+ other rev@fe905ef2c33e ancestor rev@924404dff337 | my rev@02963e448370+ other rev@fe905ef2c33e ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@02963e448370+ other rev@fe905ef2c33e ancestor rev@924404dff337 | my rev@02963e448370+ other rev@fe905ef2c33e ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 1 files merged, 0 files removed, 0 files unresolved | 1 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M c | M c | ||||
C b | C b | ||||
-------------- | -------------- | ||||
$ tm "nc a b" "up b " " " "12 merge b no ancestor" | $ tm "nc a b" "up b " " " "12 merge b no ancestor" | ||||
created new head | created new head | ||||
-------------- | -------------- | ||||
test L:nc a b R:up b W: - 12 merge b no ancestor | test L:nc a b R:up b W: - 12 merge b no ancestor | ||||
-------------- | -------------- | ||||
searching for copies back to rev 1 | searching for copies back to rev 1 | ||||
unmatched files new in both: | unmatched files new in both: | ||||
b | b | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: af30c7647fc7 | ancestor: 924404dff337, local: 86a2aa42fc76+, remote: af30c7647fc7 | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@86a2aa42fc76+ other b@af30c7647fc7 ancestor b@000000000000 | my b@86a2aa42fc76+ other b@af30c7647fc7 ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@86a2aa42fc76+ other rev@af30c7647fc7 ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@af30c7647fc7 ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@86a2aa42fc76+ other b@af30c7647fc7 ancestor b@000000000000 | my b@86a2aa42fc76+ other b@af30c7647fc7 ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@86a2aa42fc76+ other rev@af30c7647fc7 ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@af30c7647fc7 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
C a | C a | ||||
-------------- | -------------- | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 59318016310c+, remote: bdb19105162a | ancestor: 924404dff337, local: 59318016310c+, remote: bdb19105162a | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
a: other deleted -> r | a: other deleted -> r | ||||
removing a | removing a | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 1 files removed, 0 files unresolved | 0 files updated, 2 files merged, 1 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
-------------- | -------------- | ||||
$ tm "nc a b" "up a b" " " "14 merge b no ancestor" | $ tm "nc a b" "up a b" " " "14 merge b no ancestor" | ||||
created new head | created new head | ||||
-------------- | -------------- | ||||
test L:nc a b R:up a b W: - 14 merge b no ancestor | test L:nc a b R:up a b W: - 14 merge b no ancestor | ||||
-------------- | -------------- | ||||
searching for copies back to rev 1 | searching for copies back to rev 1 | ||||
unmatched files new in both: | unmatched files new in both: | ||||
b | b | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a | ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
a: remote is newer -> g | a: remote is newer -> g | ||||
getting a | getting a | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 2 files merged, 0 files removed, 0 files unresolved | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M a | M a | ||||
M b | M b | ||||
-------------- | -------------- | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 59318016310c+, remote: bdb19105162a | ancestor: 924404dff337, local: 59318016310c+, remote: bdb19105162a | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
a: other deleted -> r | a: other deleted -> r | ||||
removing a | removing a | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | my b@59318016310c+ other b@bdb19105162a ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@59318016310c+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 1 files removed, 0 files unresolved | 0 files updated, 2 files merged, 1 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
-------------- | -------------- | ||||
$ tm "nc a b" "up a b" " " "16 get a, merge b no ancestor" | $ tm "nc a b" "up a b" " " "16 get a, merge b no ancestor" | ||||
created new head | created new head | ||||
-------------- | -------------- | ||||
test L:nc a b R:up a b W: - 16 get a, merge b no ancestor | test L:nc a b R:up a b W: - 16 get a, merge b no ancestor | ||||
-------------- | -------------- | ||||
searching for copies back to rev 1 | searching for copies back to rev 1 | ||||
unmatched files new in both: | unmatched files new in both: | ||||
b | b | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a | ancestor: 924404dff337, local: 86a2aa42fc76+, remote: 8dbce441892a | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
a: remote is newer -> g | a: remote is newer -> g | ||||
getting a | getting a | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | my b@86a2aa42fc76+ other b@8dbce441892a ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | my rev@86a2aa42fc76+ other rev@8dbce441892a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 2 files merged, 0 files removed, 0 files unresolved | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M a | M a | ||||
M b | M b | ||||
-------------- | -------------- | ||||
$ tm "up a b" "nc a b" " " "17 keep a, merge b no ancestor" | $ tm "up a b" "nc a b" " " "17 keep a, merge b no ancestor" | ||||
created new head | created new head | ||||
-------------- | -------------- | ||||
test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor | test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor | ||||
-------------- | -------------- | ||||
searching for copies back to rev 1 | searching for copies back to rev 1 | ||||
unmatched files new in both: | unmatched files new in both: | ||||
b | b | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 0b76e65c8289+, remote: 4ce40f5aca24 | ancestor: 924404dff337, local: 0b76e65c8289+, remote: 4ce40f5aca24 | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor b@000000000000 | my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor b@000000000000 | my b@0b76e65c8289+ other b@4ce40f5aca24 ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | my rev@0b76e65c8289+ other rev@4ce40f5aca24 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
C a | C a | ||||
-------------- | -------------- | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
a: prompt deleted/changed -> m (premerge) | a: prompt deleted/changed -> m (premerge) | ||||
picked tool ':prompt' for a (binary False symlink False changedelete True) | picked tool ':prompt' for a (binary False symlink False changedelete True) | ||||
other [merge rev] changed a which local [working copy] deleted | other [merge rev] changed a which local [working copy] deleted | ||||
use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u | use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@02963e448370+ other b@8dbce441892a ancestor b@000000000000 | my b@02963e448370+ other b@8dbce441892a ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337 | my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@02963e448370+ other b@8dbce441892a ancestor b@000000000000 | my b@02963e448370+ other b@8dbce441892a ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337 | my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 1 files unresolved | 0 files updated, 2 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
-------------- | -------------- | ||||
M a | M a | ||||
M b | M b | ||||
abort: unresolved merge conflicts (see 'hg help resolve') | abort: unresolved merge conflicts (see 'hg help resolve') | ||||
-------------- | -------------- | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
a: prompt changed/deleted -> m (premerge) | a: prompt changed/deleted -> m (premerge) | ||||
picked tool ':prompt' for a (binary False symlink False changedelete True) | picked tool ':prompt' for a (binary False symlink False changedelete True) | ||||
local [working copy] changed a which other [merge rev] deleted | local [working copy] changed a which other [merge rev] deleted | ||||
use (c)hanged version, (d)elete, or leave (u)nresolved? u | use (c)hanged version, (d)elete, or leave (u)nresolved? u | ||||
b: both created -> m (premerge) | b: both created -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b | merging b | ||||
my b@0b76e65c8289+ other b@bdb19105162a ancestor b@000000000000 | my b@0b76e65c8289+ other b@bdb19105162a ancestor b@000000000000 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
b: both created -> m (merge) | b: both created -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@0b76e65c8289+ other b@bdb19105162a ancestor b@000000000000 | my b@0b76e65c8289+ other b@bdb19105162a ancestor b@000000000000 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337 | my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 1 files unresolved | 0 files updated, 2 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
-------------- | -------------- | ||||
M b | M b | ||||
C a | C a | ||||
abort: unresolved merge conflicts (see 'hg help resolve') | abort: unresolved merge conflicts (see 'hg help resolve') | ||||
-------------- | -------------- | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: e300d1c794ec+, remote: 49b6d8032493 | ancestor: 924404dff337, local: e300d1c794ec+, remote: 49b6d8032493 | ||||
preserving a for resolve of b | preserving a for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
removing a | removing a | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: remote moved from a -> m (premerge) | b: remote moved from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging a and b to b | merging a and b to b | ||||
my b@e300d1c794ec+ other b@49b6d8032493 ancestor a@924404dff337 | my b@e300d1c794ec+ other b@49b6d8032493 ancestor a@924404dff337 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@e300d1c794ec+ other rev@49b6d8032493 ancestor rev@924404dff337 | my rev@e300d1c794ec+ other rev@49b6d8032493 ancestor rev@924404dff337 | ||||
b: remote moved from a -> m (merge) | b: remote moved from a -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@e300d1c794ec+ other b@49b6d8032493 ancestor a@924404dff337 | my b@e300d1c794ec+ other b@49b6d8032493 ancestor a@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@e300d1c794ec+ other rev@49b6d8032493 ancestor rev@924404dff337 | my rev@e300d1c794ec+ other rev@49b6d8032493 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
a | a | ||||
-------------- | -------------- | ||||
checking for directory renames | checking for directory renames | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 62e7bf090eba+, remote: f4db7e329e71 | ancestor: 924404dff337, local: 62e7bf090eba+, remote: f4db7e329e71 | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
starting 4 threads for background file closing (?) | starting 4 threads for background file closing (?) | ||||
b: local copied/moved from a -> m (premerge) | b: local copied/moved from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b and a to b | merging b and a to b | ||||
my b@62e7bf090eba+ other a@f4db7e329e71 ancestor a@924404dff337 | my b@62e7bf090eba+ other a@f4db7e329e71 ancestor a@924404dff337 | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@62e7bf090eba+ other rev@f4db7e329e71 ancestor rev@924404dff337 | my rev@62e7bf090eba+ other rev@f4db7e329e71 ancestor rev@924404dff337 | ||||
b: local copied/moved from a -> m (merge) | b: local copied/moved from a -> m (merge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
my b@62e7bf090eba+ other a@f4db7e329e71 ancestor a@924404dff337 | my b@62e7bf090eba+ other a@f4db7e329e71 ancestor a@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/b* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/b* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@62e7bf090eba+ other rev@f4db7e329e71 ancestor rev@924404dff337 | my rev@62e7bf090eba+ other rev@f4db7e329e71 ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
0 files updated, 2 files merged, 0 files removed, 0 files unresolved | 0 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
a | a | ||||
-------------- | -------------- | ||||
resolving manifests | resolving manifests | ||||
branchmerge: True, force: False, partial: False | branchmerge: True, force: False, partial: False | ||||
ancestor: 924404dff337, local: 02963e448370+, remote: 2b958612230f | ancestor: 924404dff337, local: 02963e448370+, remote: 2b958612230f | ||||
preserving b for resolve of b | preserving b for resolve of b | ||||
preserving rev for resolve of rev | preserving rev for resolve of rev | ||||
c: remote created -> g | c: remote created -> g | ||||
getting c | getting c | ||||
b: local copied/moved from a -> m (premerge) | b: local copied/moved from a -> m (premerge) | ||||
picked tool 'python ../merge' for b (binary False symlink False changedelete False) | picked tool '* ../merge' for b (binary False symlink False changedelete False) (glob) | ||||
merging b and a to b | merging b and a to b | ||||
my b@02963e448370+ other a@2b958612230f ancestor a@924404dff337 | my b@02963e448370+ other a@2b958612230f ancestor a@924404dff337 | ||||
premerge successful | premerge successful | ||||
rev: versions differ -> m (premerge) | rev: versions differ -> m (premerge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
merging rev | merging rev | ||||
my rev@02963e448370+ other rev@2b958612230f ancestor rev@924404dff337 | my rev@02963e448370+ other rev@2b958612230f ancestor rev@924404dff337 | ||||
rev: versions differ -> m (merge) | rev: versions differ -> m (merge) | ||||
picked tool 'python ../merge' for rev (binary False symlink False changedelete False) | picked tool '* ../merge' for rev (binary False symlink False changedelete False) (glob) | ||||
my rev@02963e448370+ other rev@2b958612230f ancestor rev@924404dff337 | my rev@02963e448370+ other rev@2b958612230f ancestor rev@924404dff337 | ||||
launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob) | launching merge tool: * ../merge *$TESTTMP/t/t/rev* * * (glob) | ||||
merge tool returned: 0 | merge tool returned: 0 | ||||
1 files updated, 2 files merged, 0 files removed, 0 files unresolved | 1 files updated, 2 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | (branch merge, don't forget to commit) | ||||
-------------- | -------------- | ||||
M b | M b | ||||
a | a | ||||
M c | M c | ||||
-------------- | -------------- |
None) | None) | ||||
define) | define) | ||||
hg: parse error: missing argument | hg: parse error: missing argument | ||||
[255] | [255] | ||||
test that chained `or` operations never eat up stack (issue4624) | test that chained `or` operations never eat up stack (issue4624) | ||||
(uses `0:1` instead of `0` to avoid future optimization of trivial revisions) | (uses `0:1` instead of `0` to avoid future optimization of trivial revisions) | ||||
$ hg log -T '{rev}\n' -r `python -c "print '+'.join(['0:1'] * 500)"` | $ hg log -T '{rev}\n' -r `$PYTHON -c "print '+'.join(['0:1'] * 500)"` | ||||
0 | 0 | ||||
1 | 1 | ||||
test that repeated `-r` options never eat up stack (issue4565) | test that repeated `-r` options never eat up stack (issue4565) | ||||
(uses `-r 0::1` to avoid possible optimization at old-style parser) | (uses `-r 0::1` to avoid possible optimization at old-style parser) | ||||
$ hg log -T '{rev}\n' `python -c "for i in xrange(500): print '-r 0::1 ',"` | $ hg log -T '{rev}\n' `$PYTHON -c "for i in xrange(500): print '-r 0::1 ',"` | ||||
0 | 0 | ||||
1 | 1 | ||||
check that conversion to only works | check that conversion to only works | ||||
$ try --optimize '::3 - ::1' | $ try --optimize '::3 - ::1' | ||||
(minus | (minus | ||||
(dagrangepre | (dagrangepre | ||||
('symbol', '3')) | ('symbol', '3')) |
> | > | ||||
> [hooks] | > [hooks] | ||||
> changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog" | > changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog" | ||||
> EOF | > EOF | ||||
$ cd .. | $ cd .. | ||||
repo not found error | repo not found error | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local | ||||
remote: abort: repository nonexistent not found! | remote: abort: repository nonexistent not found! | ||||
abort: no suitable response from remote hg! | abort: no suitable response from remote hg! | ||||
[255] | [255] | ||||
non-existent absolute path | non-existent absolute path | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy//`pwd`/nonexistent local | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy//`pwd`/nonexistent local | ||||
remote: abort: repository /$TESTTMP/nonexistent not found! | remote: abort: repository /$TESTTMP/nonexistent not found! | ||||
abort: no suitable response from remote hg! | abort: no suitable response from remote hg! | ||||
[255] | [255] | ||||
clone remote via stream | clone remote via stream | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/remote local-stream | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/remote local-stream | ||||
streaming all changes | streaming all changes | ||||
4 files to transfer, 602 bytes of data | 4 files to transfer, 602 bytes of data | ||||
transferred 602 bytes in * seconds (*) (glob) | transferred 602 bytes in * seconds (*) (glob) | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
updating to branch default | updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd local-stream | $ cd local-stream | ||||
$ hg verify | $ hg verify | ||||
checking changesets | checking changesets | ||||
checking manifests | checking manifests | ||||
crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
checking files | checking files | ||||
2 files, 3 changesets, 2 total revisions | 2 files, 3 changesets, 2 total revisions | ||||
$ hg branches | $ hg branches | ||||
default 0:1160648e36ce | default 0:1160648e36ce | ||||
$ cd .. | $ cd .. | ||||
clone bookmarks via stream | clone bookmarks via stream | ||||
$ hg -R local-stream book mybook | $ hg -R local-stream book mybook | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/local-stream stream2 | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/local-stream stream2 | ||||
streaming all changes | streaming all changes | ||||
4 files to transfer, 602 bytes of data | 4 files to transfer, 602 bytes of data | ||||
transferred 602 bytes in * seconds (*) (glob) | transferred 602 bytes in * seconds (*) (glob) | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
updating to branch default | updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd stream2 | $ cd stream2 | ||||
$ hg book | $ hg book | ||||
mybook 0:1160648e36ce | mybook 0:1160648e36ce | ||||
$ cd .. | $ cd .. | ||||
$ rm -rf local-stream stream2 | $ rm -rf local-stream stream2 | ||||
clone remote via pull | clone remote via pull | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local | ||||
requesting all changes | requesting all changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 3 changesets with 2 changes to 2 files | added 3 changesets with 2 changes to 2 files | ||||
updating to branch default | updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
> [hooks] | > [hooks] | ||||
> changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog" | > changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog" | ||||
> EOF | > EOF | ||||
empty default pull | empty default pull | ||||
$ hg paths | $ hg paths | ||||
default = ssh://user@dummy/remote | default = ssh://user@dummy/remote | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
pull from wrong ssh URL | pull from wrong ssh URL | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist | ||||
pulling from ssh://user@dummy/doesnotexist | pulling from ssh://user@dummy/doesnotexist | ||||
remote: abort: repository doesnotexist not found! | remote: abort: repository doesnotexist not found! | ||||
abort: no suitable response from remote hg! | abort: no suitable response from remote hg! | ||||
[255] | [255] | ||||
local change | local change | ||||
$ echo bleah > foo | $ echo bleah > foo | ||||
parent: 0:1160648e36ce | parent: 0:1160648e36ce | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: add | summary: add | ||||
find incoming on the remote side | find incoming on the remote side | ||||
$ hg incoming -R ../remote -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/local | $ hg incoming -R ../remote -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/local | ||||
comparing with ssh://user@dummy/local | comparing with ssh://user@dummy/local | ||||
searching for changes | searching for changes | ||||
changeset: 3:a28a9d1a809c | changeset: 3:a28a9d1a809c | ||||
tag: tip | tag: tip | ||||
parent: 0:1160648e36ce | parent: 0:1160648e36ce | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: add | summary: add | ||||
find incoming on the remote side (using absolute path) | find incoming on the remote side (using absolute path) | ||||
$ hg incoming -R ../remote -e "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`" | $ hg incoming -R ../remote -e "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`" | ||||
comparing with ssh://user@dummy/$TESTTMP/local | comparing with ssh://user@dummy/$TESTTMP/local | ||||
searching for changes | searching for changes | ||||
changeset: 3:a28a9d1a809c | changeset: 3:a28a9d1a809c | ||||
tag: tip | tag: tip | ||||
parent: 0:1160648e36ce | parent: 0:1160648e36ce | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: add | summary: add | ||||
bleah | bleah | ||||
$ echo z > z | $ echo z > z | ||||
$ hg ci -A -m z z | $ hg ci -A -m z z | ||||
created new head | created new head | ||||
test pushkeys and bookmarks | test pushkeys and bookmarks | ||||
$ cd ../local | $ cd ../local | ||||
$ hg debugpushkey --config ui.ssh="python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces | $ hg debugpushkey --config ui.ssh="$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces | ||||
bookmarks | bookmarks | ||||
namespaces | namespaces | ||||
phases | phases | ||||
$ hg book foo -r 0 | $ hg book foo -r 0 | ||||
$ hg out -B | $ hg out -B | ||||
comparing with ssh://user@dummy/remote | comparing with ssh://user@dummy/remote | ||||
searching for changed bookmarks | searching for changed bookmarks | ||||
foo 1160648e36ce | foo 1160648e36ce | ||||
$ hg push -B foo | $ hg push -B foo | ||||
pushing to ssh://user@dummy/remote | pushing to ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
exporting bookmark foo | exporting bookmark foo | ||||
[1] | [1] | ||||
$ hg debugpushkey --config ui.ssh="python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks | $ hg debugpushkey --config ui.ssh="$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks | ||||
foo 1160648e36cec0054048a7edc4110c6f84fde594 | foo 1160648e36cec0054048a7edc4110c6f84fde594 | ||||
$ hg book -f foo | $ hg book -f foo | ||||
$ hg push --traceback | $ hg push --traceback | ||||
pushing to ssh://user@dummy/remote | pushing to ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
updating bookmark foo | updating bookmark foo | ||||
[1] | [1] | ||||
summary: z | summary: z | ||||
clone bookmarks | clone bookmarks | ||||
$ hg -R ../remote bookmark test | $ hg -R ../remote bookmark test | ||||
$ hg -R ../remote bookmarks | $ hg -R ../remote bookmarks | ||||
* test 4:6c0482d977a3 | * test 4:6c0482d977a3 | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks | ||||
requesting all changes | requesting all changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 6 changesets with 5 changes to 4 files (+1 heads) | added 6 changesets with 5 changes to 4 files (+1 heads) | ||||
updating to branch default | updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R local-bookmarks bookmarks | $ hg -R local-bookmarks bookmarks | ||||
$ cd .. | $ cd .. | ||||
hide outer repo | hide outer repo | ||||
$ hg init | $ hg init | ||||
Test remote paths with spaces (issue2983): | Test remote paths with spaces (issue2983): | ||||
$ hg init --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | $ hg init --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | ||||
$ touch "$TESTTMP/a repo/test" | $ touch "$TESTTMP/a repo/test" | ||||
$ hg -R 'a repo' commit -A -m "test" | $ hg -R 'a repo' commit -A -m "test" | ||||
adding test | adding test | ||||
$ hg -R 'a repo' tag tag | $ hg -R 'a repo' tag tag | ||||
$ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | $ hg id --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | ||||
73649e48688a | 73649e48688a | ||||
$ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO" | $ hg id --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO" | ||||
abort: unknown revision 'noNoNO'! | abort: unknown revision 'noNoNO'! | ||||
[255] | [255] | ||||
Test (non-)escaping of remote paths with spaces when cloning (issue3145): | Test (non-)escaping of remote paths with spaces when cloning (issue3145): | ||||
$ hg clone --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | $ hg clone --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | ||||
destination directory: a repo | destination directory: a repo | ||||
abort: destination 'a repo' is not empty | abort: destination 'a repo' is not empty | ||||
[255] | [255] | ||||
Test hg-ssh using a helper script that will restore PYTHONPATH (which might | Test hg-ssh using a helper script that will restore PYTHONPATH (which might | ||||
have been cleared by a hg.exe wrapper) and invoke hg-ssh with the right | have been cleared by a hg.exe wrapper) and invoke hg-ssh with the right | ||||
parameters: | parameters: | ||||
> def hook(ui, repo, **kwargs): | > def hook(ui, repo, **kwargs): | ||||
> ui.write('hook failure!\n') | > ui.write('hook failure!\n') | ||||
> ui.flush() | > ui.flush() | ||||
> return 1 | > return 1 | ||||
> EOF | > EOF | ||||
$ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc | $ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc | ||||
$ hg -q --config ui.ssh="python $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout | $ hg -q --config ui.ssh="$PYTHON $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout | ||||
$ cd hookout | $ cd hookout | ||||
$ touch hookfailure | $ touch hookfailure | ||||
$ hg -q commit -A -m 'remote hook failure' | $ hg -q commit -A -m 'remote hook failure' | ||||
$ hg --config ui.ssh="python $TESTDIR/dummyssh" push | $ hg --config ui.ssh="$PYTHON $TESTDIR/dummyssh" push | ||||
pushing to ssh://user@dummy/remote | pushing to ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files | ||||
remote: hook failure! | remote: hook failure! | ||||
remote: transaction abort! | remote: transaction abort! | ||||
remote: rollback completed | remote: rollback completed | ||||
remote: abort: pretxnchangegroup.fail hook failed | remote: abort: pretxnchangegroup.fail hook failed | ||||
[1] | [1] | ||||
abort during pull is properly reported as such | abort during pull is properly reported as such | ||||
$ echo morefoo >> ../remote/foo | $ echo morefoo >> ../remote/foo | ||||
$ hg -R ../remote commit --message "more foo to be pulled" | $ hg -R ../remote commit --message "more foo to be pulled" | ||||
$ cat >> ../remote/.hg/hgrc << EOF | $ cat >> ../remote/.hg/hgrc << EOF | ||||
> [extensions] | > [extensions] | ||||
> crash = ${TESTDIR}/crashgetbundler.py | > crash = ${TESTDIR}/crashgetbundler.py | ||||
> EOF | > EOF | ||||
$ hg --config ui.ssh="python $TESTDIR/dummyssh" pull | $ hg --config ui.ssh="$PYTHON $TESTDIR/dummyssh" pull | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
adding changesets | adding changesets | ||||
remote: abort: this is an exercise | remote: abort: this is an exercise | ||||
transaction abort! | transaction abort! | ||||
rollback completed | rollback completed | ||||
abort: stream ended unexpectedly (got 0 bytes, expected 4) | abort: stream ended unexpectedly (got 0 bytes, expected 4) | ||||
[255] | [255] |
(run 'hg heads' to see heads, 'hg merge' to merge) | (run 'hg heads' to see heads, 'hg merge' to merge) | ||||
$ hg up tip | $ hg up tip | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd .. | $ cd .. | ||||
clone remote via stream | clone remote via stream | ||||
$ for i in 0 1 2 3 4 5 6 7 8; do | $ for i in 0 1 2 3 4 5 6 7 8; do | ||||
> hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed -r "$i" ssh://user@dummy/remote test-"$i" | > hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" --uncompressed -r "$i" ssh://user@dummy/remote test-"$i" | ||||
> if cd test-"$i"; then | > if cd test-"$i"; then | ||||
> hg verify | > hg verify | ||||
> cd .. | > cd .. | ||||
> fi | > fi | ||||
> done | > done | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
$ hg verify | $ hg verify | ||||
checking changesets | checking changesets | ||||
checking manifests | checking manifests | ||||
crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
checking files | checking files | ||||
4 files, 9 changesets, 7 total revisions | 4 files, 9 changesets, 7 total revisions | ||||
$ cd .. | $ cd .. | ||||
$ cd test-1 | $ cd test-1 | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" -r 4 ssh://user@dummy/remote | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" -r 4 ssh://user@dummy/remote | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 1 changesets with 0 changes to 0 files (+1 heads) | added 1 changesets with 0 changes to 0 files (+1 heads) | ||||
(run 'hg heads' to see heads, 'hg merge' to merge) | (run 'hg heads' to see heads, 'hg merge' to merge) | ||||
$ hg verify | $ hg verify | ||||
checking changesets | checking changesets | ||||
checking manifests | checking manifests | ||||
crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
checking files | checking files | ||||
1 files, 3 changesets, 2 total revisions | 1 files, 3 changesets, 2 total revisions | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 6 changesets with 5 changes to 4 files | added 6 changesets with 5 changes to 4 files | ||||
(run 'hg update' to get a working copy) | (run 'hg update' to get a working copy) | ||||
$ cd .. | $ cd .. | ||||
$ cd test-2 | $ cd test-2 | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" -r 5 ssh://user@dummy/remote | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" -r 5 ssh://user@dummy/remote | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 2 changesets with 0 changes to 0 files (+1 heads) | added 2 changesets with 0 changes to 0 files (+1 heads) | ||||
(run 'hg heads' to see heads, 'hg merge' to merge) | (run 'hg heads' to see heads, 'hg merge' to merge) | ||||
$ hg verify | $ hg verify | ||||
checking changesets | checking changesets | ||||
checking manifests | checking manifests | ||||
crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
checking files | checking files | ||||
1 files, 5 changesets, 3 total revisions | 1 files, 5 changesets, 3 total revisions | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 4 changesets with 4 changes to 4 files | added 4 changesets with 4 changes to 4 files | ||||
(run 'hg update' to get a working copy) | (run 'hg update' to get a working copy) | ||||
$ hg verify | $ hg verify | ||||
checking changesets | checking changesets | ||||
checking manifests | checking manifests | ||||
crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
checking files | checking files | ||||
4 files, 9 changesets, 7 total revisions | 4 files, 9 changesets, 7 total revisions | ||||
$ cd .. | $ cd .. |
> | > | ||||
> [hooks] | > [hooks] | ||||
> changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog" | > changegroup = sh -c "printenv.py changegroup-in-remote 0 ../dummylog" | ||||
> EOF | > EOF | ||||
$ cd .. | $ cd .. | ||||
repo not found error | repo not found error | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local | ||||
remote: abort: repository nonexistent not found! | remote: abort: repository nonexistent not found! | ||||
abort: no suitable response from remote hg! | abort: no suitable response from remote hg! | ||||
[255] | [255] | ||||
non-existent absolute path | non-existent absolute path | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/nonexistent local | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/nonexistent local | ||||
remote: abort: repository $TESTTMP/nonexistent not found! | remote: abort: repository $TESTTMP/nonexistent not found! | ||||
abort: no suitable response from remote hg! | abort: no suitable response from remote hg! | ||||
[255] | [255] | ||||
clone remote via stream | clone remote via stream | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/remote local-stream | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/remote local-stream | ||||
streaming all changes | streaming all changes | ||||
4 files to transfer, 602 bytes of data | 4 files to transfer, 602 bytes of data | ||||
transferred 602 bytes in * seconds (*) (glob) | transferred 602 bytes in * seconds (*) (glob) | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
updating to branch default | updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd local-stream | $ cd local-stream | ||||
$ hg verify | $ hg verify | ||||
checking changesets | checking changesets | ||||
checking manifests | checking manifests | ||||
crosschecking files in changesets and manifests | crosschecking files in changesets and manifests | ||||
checking files | checking files | ||||
2 files, 3 changesets, 2 total revisions | 2 files, 3 changesets, 2 total revisions | ||||
$ hg branches | $ hg branches | ||||
default 0:1160648e36ce | default 0:1160648e36ce | ||||
$ cd .. | $ cd .. | ||||
clone bookmarks via stream | clone bookmarks via stream | ||||
$ hg -R local-stream book mybook | $ hg -R local-stream book mybook | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/local-stream stream2 | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/local-stream stream2 | ||||
streaming all changes | streaming all changes | ||||
4 files to transfer, 602 bytes of data | 4 files to transfer, 602 bytes of data | ||||
transferred 602 bytes in * seconds (*) (glob) | transferred 602 bytes in * seconds (*) (glob) | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
updating to branch default | updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ cd stream2 | $ cd stream2 | ||||
$ hg book | $ hg book | ||||
mybook 0:1160648e36ce | mybook 0:1160648e36ce | ||||
$ cd .. | $ cd .. | ||||
$ rm -rf local-stream stream2 | $ rm -rf local-stream stream2 | ||||
clone remote via pull | clone remote via pull | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local | ||||
requesting all changes | requesting all changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 3 changesets with 2 changes to 2 files | added 3 changesets with 2 changes to 2 files | ||||
updating to branch default | updating to branch default | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
> [hooks] | > [hooks] | ||||
> changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog" | > changegroup = sh -c "printenv.py changegroup-in-local 0 ../dummylog" | ||||
> EOF | > EOF | ||||
empty default pull | empty default pull | ||||
$ hg paths | $ hg paths | ||||
default = ssh://user@dummy/remote | default = ssh://user@dummy/remote | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
pull from wrong ssh URL | pull from wrong ssh URL | ||||
$ hg pull -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist | $ hg pull -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist | ||||
pulling from ssh://user@dummy/doesnotexist | pulling from ssh://user@dummy/doesnotexist | ||||
remote: abort: repository doesnotexist not found! | remote: abort: repository doesnotexist not found! | ||||
abort: no suitable response from remote hg! | abort: no suitable response from remote hg! | ||||
[255] | [255] | ||||
local change | local change | ||||
$ echo bleah > foo | $ echo bleah > foo | ||||
parent: 0:1160648e36ce | parent: 0:1160648e36ce | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: add | summary: add | ||||
find incoming on the remote side | find incoming on the remote side | ||||
$ hg incoming -R ../remote -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/local | $ hg incoming -R ../remote -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/local | ||||
comparing with ssh://user@dummy/local | comparing with ssh://user@dummy/local | ||||
searching for changes | searching for changes | ||||
changeset: 3:a28a9d1a809c | changeset: 3:a28a9d1a809c | ||||
tag: tip | tag: tip | ||||
parent: 0:1160648e36ce | parent: 0:1160648e36ce | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: add | summary: add | ||||
find incoming on the remote side (using absolute path) | find incoming on the remote side (using absolute path) | ||||
$ hg incoming -R ../remote -e "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`" | $ hg incoming -R ../remote -e "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`" | ||||
comparing with ssh://user@dummy/$TESTTMP/local | comparing with ssh://user@dummy/$TESTTMP/local | ||||
searching for changes | searching for changes | ||||
changeset: 3:a28a9d1a809c | changeset: 3:a28a9d1a809c | ||||
tag: tip | tag: tip | ||||
parent: 0:1160648e36ce | parent: 0:1160648e36ce | ||||
user: test | user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: add | summary: add | ||||
bleah | bleah | ||||
$ echo z > z | $ echo z > z | ||||
$ hg ci -A -m z z | $ hg ci -A -m z z | ||||
created new head | created new head | ||||
test pushkeys and bookmarks | test pushkeys and bookmarks | ||||
$ cd ../local | $ cd ../local | ||||
$ hg debugpushkey --config ui.ssh="python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces | $ hg debugpushkey --config ui.ssh="$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces | ||||
bookmarks | bookmarks | ||||
namespaces | namespaces | ||||
phases | phases | ||||
$ hg book foo -r 0 | $ hg book foo -r 0 | ||||
$ hg out -B | $ hg out -B | ||||
comparing with ssh://user@dummy/remote | comparing with ssh://user@dummy/remote | ||||
searching for changed bookmarks | searching for changed bookmarks | ||||
foo 1160648e36ce | foo 1160648e36ce | ||||
$ hg push -B foo | $ hg push -B foo | ||||
pushing to ssh://user@dummy/remote | pushing to ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
exporting bookmark foo | exporting bookmark foo | ||||
[1] | [1] | ||||
$ hg debugpushkey --config ui.ssh="python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks | $ hg debugpushkey --config ui.ssh="$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks | ||||
foo 1160648e36cec0054048a7edc4110c6f84fde594 | foo 1160648e36cec0054048a7edc4110c6f84fde594 | ||||
$ hg book -f foo | $ hg book -f foo | ||||
$ hg push --traceback | $ hg push --traceback | ||||
pushing to ssh://user@dummy/remote | pushing to ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
updating bookmark foo | updating bookmark foo | ||||
[1] | [1] | ||||
summary: z | summary: z | ||||
clone bookmarks | clone bookmarks | ||||
$ hg -R ../remote bookmark test | $ hg -R ../remote bookmark test | ||||
$ hg -R ../remote bookmarks | $ hg -R ../remote bookmarks | ||||
* test 4:6c0482d977a3 | * test 4:6c0482d977a3 | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks | ||||
requesting all changes | requesting all changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 6 changesets with 5 changes to 4 files (+1 heads) | added 6 changesets with 5 changes to 4 files (+1 heads) | ||||
updating to branch default | updating to branch default | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R local-bookmarks bookmarks | $ hg -R local-bookmarks bookmarks | ||||
$ cd .. | $ cd .. | ||||
hide outer repo | hide outer repo | ||||
$ hg init | $ hg init | ||||
Test remote paths with spaces (issue2983): | Test remote paths with spaces (issue2983): | ||||
$ hg init --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | $ hg init --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | ||||
$ touch "$TESTTMP/a repo/test" | $ touch "$TESTTMP/a repo/test" | ||||
$ hg -R 'a repo' commit -A -m "test" | $ hg -R 'a repo' commit -A -m "test" | ||||
adding test | adding test | ||||
$ hg -R 'a repo' tag tag | $ hg -R 'a repo' tag tag | ||||
$ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | $ hg id --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | ||||
73649e48688a | 73649e48688a | ||||
$ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO" | $ hg id --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO" | ||||
abort: unknown revision 'noNoNO'! | abort: unknown revision 'noNoNO'! | ||||
[255] | [255] | ||||
Test (non-)escaping of remote paths with spaces when cloning (issue3145): | Test (non-)escaping of remote paths with spaces when cloning (issue3145): | ||||
$ hg clone --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | $ hg clone --ssh "$PYTHON \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo" | ||||
destination directory: a repo | destination directory: a repo | ||||
abort: destination 'a repo' is not empty | abort: destination 'a repo' is not empty | ||||
[255] | [255] | ||||
Make sure hg is really paranoid in serve --stdio mode. It used to be | Make sure hg is really paranoid in serve --stdio mode. It used to be | ||||
possible to get a debugger REPL by specifying a repo named --debugger. | possible to get a debugger REPL by specifying a repo named --debugger. | ||||
$ hg -R --debugger serve --stdio | $ hg -R --debugger serve --stdio | ||||
abort: potentially unsafe serve --stdio invocation: ['-R', '--debugger', 'serve', '--stdio'] | abort: potentially unsafe serve --stdio invocation: ['-R', '--debugger', 'serve', '--stdio'] | ||||
> def hook(ui, repo, **kwargs): | > def hook(ui, repo, **kwargs): | ||||
> ui.write('hook failure!\n') | > ui.write('hook failure!\n') | ||||
> ui.flush() | > ui.flush() | ||||
> return 1 | > return 1 | ||||
> EOF | > EOF | ||||
$ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc | $ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc | ||||
$ hg -q --config ui.ssh="python $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout | $ hg -q --config ui.ssh="$PYTHON $TESTDIR/dummyssh" clone ssh://user@dummy/remote hookout | ||||
$ cd hookout | $ cd hookout | ||||
$ touch hookfailure | $ touch hookfailure | ||||
$ hg -q commit -A -m 'remote hook failure' | $ hg -q commit -A -m 'remote hook failure' | ||||
$ hg --config ui.ssh="python $TESTDIR/dummyssh" push | $ hg --config ui.ssh="$PYTHON $TESTDIR/dummyssh" push | ||||
pushing to ssh://user@dummy/remote | pushing to ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
remote: adding changesets | remote: adding changesets | ||||
remote: adding manifests | remote: adding manifests | ||||
remote: adding file changes | remote: adding file changes | ||||
remote: added 1 changesets with 1 changes to 1 files | remote: added 1 changesets with 1 changes to 1 files | ||||
remote: hook failure! | remote: hook failure! | ||||
remote: transaction abort! | remote: transaction abort! | ||||
remote: rollback completed | remote: rollback completed | ||||
remote: pretxnchangegroup.fail hook failed | remote: pretxnchangegroup.fail hook failed | ||||
abort: push failed on remote | abort: push failed on remote | ||||
[255] | [255] | ||||
abort during pull is properly reported as such | abort during pull is properly reported as such | ||||
$ echo morefoo >> ../remote/foo | $ echo morefoo >> ../remote/foo | ||||
$ hg -R ../remote commit --message "more foo to be pulled" | $ hg -R ../remote commit --message "more foo to be pulled" | ||||
$ cat >> ../remote/.hg/hgrc << EOF | $ cat >> ../remote/.hg/hgrc << EOF | ||||
> [extensions] | > [extensions] | ||||
> crash = ${TESTDIR}/crashgetbundler.py | > crash = ${TESTDIR}/crashgetbundler.py | ||||
> EOF | > EOF | ||||
$ hg --config ui.ssh="python $TESTDIR/dummyssh" pull | $ hg --config ui.ssh="$PYTHON $TESTDIR/dummyssh" pull | ||||
pulling from ssh://user@dummy/remote | pulling from ssh://user@dummy/remote | ||||
searching for changes | searching for changes | ||||
remote: abort: this is an exercise | remote: abort: this is an exercise | ||||
abort: pull failed on remote | abort: pull failed on remote | ||||
[255] | [255] |
path sub | path sub | ||||
source ../sub | source ../sub | ||||
revision 863c1745b441bd97a8c4a096e87793073f4fb215 | revision 863c1745b441bd97a8c4a096e87793073f4fb215 | ||||
$ killdaemons.py | $ killdaemons.py | ||||
subrepo paths with ssh urls | subrepo paths with ssh urls | ||||
$ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/cloned sshclone | $ hg clone -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/cloned sshclone | ||||
requesting all changes | requesting all changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 1 changesets with 3 changes to 3 files | added 1 changesets with 3 changes to 3 files | ||||
updating to branch default | updating to branch default | ||||
cloning subrepo sub from ssh://user@dummy/sub | cloning subrepo sub from ssh://user@dummy/sub | ||||
requesting all changes | requesting all changes | ||||
adding changesets | adding changesets | ||||
adding manifests | adding manifests | ||||
adding file changes | adding file changes | ||||
added 1 changesets with 1 changes to 1 files | added 1 changesets with 1 changes to 1 files | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg -R sshclone push -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/cloned | $ hg -R sshclone push -e "$PYTHON \"$TESTDIR/dummyssh\"" ssh://user@dummy/`pwd`/cloned | ||||
pushing to ssh://user@dummy/$TESTTMP/cloned | pushing to ssh://user@dummy/$TESTTMP/cloned | ||||
pushing subrepo sub to ssh://user@dummy/$TESTTMP/sub | pushing subrepo sub to ssh://user@dummy/$TESTTMP/sub | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
searching for changes | searching for changes | ||||
no changes found | no changes found | ||||
[1] | [1] | ||||
$ cat dummylog | $ cat dummylog | ||||
Got arguments 1:user@dummy 2:hg -R cloned serve --stdio | Got arguments 1:user@dummy 2:hg -R cloned serve --stdio | ||||
Got arguments 1:user@dummy 2:hg -R sub serve --stdio | Got arguments 1:user@dummy 2:hg -R sub serve --stdio | ||||
Got arguments 1:user@dummy 2:hg -R $TESTTMP/cloned serve --stdio | Got arguments 1:user@dummy 2:hg -R $TESTTMP/cloned serve --stdio | ||||
Got arguments 1:user@dummy 2:hg -R $TESTTMP/sub serve --stdio | Got arguments 1:user@dummy 2:hg -R $TESTTMP/sub serve --stdio |
#require killdaemons | #require killdaemons | ||||
$ cat << EOF >> $HGRCPATH | $ cat << EOF >> $HGRCPATH | ||||
> [format] | > [format] | ||||
> usegeneraldelta=yes | > usegeneraldelta=yes | ||||
> [ui] | > [ui] | ||||
> ssh=python "$TESTDIR/dummyssh" | > ssh=$PYTHON "$TESTDIR/dummyssh" | ||||
> EOF | > EOF | ||||
Set up repo | Set up repo | ||||
$ hg --config experimental.treemanifest=True init repo | $ hg --config experimental.treemanifest=True init repo | ||||
$ cd repo | $ cd repo | ||||
Requirements get set on init | Requirements get set on init |
* - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | * - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | ||||
* - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | * - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | ||||
* - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob) | * - - [*] "GET /?cmd=capabilities HTTP/1.1" 200 - (glob) | ||||
* - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | * - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | ||||
* - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | * - - [*] "GET /?cmd=debugwireargs&one=eins&two=zwei HTTP/1.1" 200 - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) | ||||
SSH (try to exercise the ssh functionality with a dummy script): | SSH (try to exercise the ssh functionality with a dummy script): | ||||
$ hg debugwireargs --ssh "python $TESTDIR/dummyssh" ssh://user@dummy/repo uno due tre quattro | $ hg debugwireargs --ssh "$PYTHON $TESTDIR/dummyssh" ssh://user@dummy/repo uno due tre quattro | ||||
uno due tre quattro None | uno due tre quattro None | ||||
$ hg debugwireargs --ssh "python $TESTDIR/dummyssh" ssh://user@dummy/repo eins zwei --four vier | $ hg debugwireargs --ssh "$PYTHON $TESTDIR/dummyssh" ssh://user@dummy/repo eins zwei --four vier | ||||
eins zwei None vier None | eins zwei None vier None | ||||
$ hg debugwireargs --ssh "python $TESTDIR/dummyssh" ssh://user@dummy/repo eins zwei | $ hg debugwireargs --ssh "$PYTHON $TESTDIR/dummyssh" ssh://user@dummy/repo eins zwei | ||||
eins zwei None None None | eins zwei None None None | ||||
$ hg debugwireargs --ssh "python $TESTDIR/dummyssh" ssh://user@dummy/repo eins zwei --five fuenf | $ hg debugwireargs --ssh "$PYTHON $TESTDIR/dummyssh" ssh://user@dummy/repo eins zwei --five fuenf | ||||
eins zwei None None None | eins zwei None None None | ||||
Explicitly kill daemons to let the test exit on Windows | Explicitly kill daemons to let the test exit on Windows | ||||
$ killdaemons.py | $ killdaemons.py | ||||