##// END OF EJS Templates
httppeer: implement command executor for version 2 peer...
httppeer: implement command executor for version 2 peer Now that we have a new API for issuing commands which is compatible with wire protocol version 2, we can start using it with wire protocol version 2. This commit replaces our hacky implementation of _call() with something a bit more robust based on the new command executor interface. We now have proper support for issuing multiple commands per HTTP request. Each HTTP request maintains its own client reactor. The implementation is similar to the one in the legacy wire protocol. We use a ThreadPoolExecutor for spinning up a thread to read the HTTP response in the background. This allows responses to resolve in any order. While not implemented on the server yet, a client could use concurrent.futures.as_completed() with a collection of futures and handle responses as they arrive from the server. The return value from issued commands is still a simple list of raw or decoded CBOR data. This is still super hacky. We will want a rich data type for representing command responses. But at least this commit gets us one step closer to a proper peer implementation. Differential Revision: https://phab.mercurial-scm.org/D3297

File last commit:

r34943:2a774cae stable
r37669:950294e2 default
Show More
test-merge1.t
430 lines | 10.9 KiB | text/troff | Tads3Lexer
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cat <<EOF > merge
Augie Fackler
tests: clean up many print statements to be print functions instead...
r33687 > from __future__ import print_function
Pradeepkumar Gayam
tests: unify test-merge1
r11975 > import sys, os
>
> try:
> import msvcrt
> msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
> msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
> except ImportError:
> pass
>
Augie Fackler
tests: clean up many print statements to be print functions instead...
r33687 > print("merging for", os.path.basename(sys.argv[1]))
Pradeepkumar Gayam
tests: unify test-merge1
r11975 > EOF
Augie Fackler
tests: clean up even more direct `python` calls with $PYTHON...
r33286 $ HGMERGE="$PYTHON ../merge"; export HGMERGE
Pradeepkumar Gayam
tests: unify test-merge1
r11975
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482
Kostia Balytskyi
update: teach hg to override untracked dir with a tracked file on update...
r29480 Test interrupted updates by having a non-empty dir with the same name as one
of the files in a commit we're updating to
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482
Kostia Balytskyi
update: teach hg to override untracked dir with a tracked file on update...
r29480 $ mkdir b && touch b/nonempty
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482 $ hg up
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482 $ hg ci
Mark Thomas
merge: check for path conflicts when updating (issue5628)...
r34553 nothing changed
[1]
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482 $ hg sum
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 parent: 1:b8bb4a988f25 tip
commit #1
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482 branch: default
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 commit: (clean)
update: (current)
Gilles Moris
summary: move the parents phase marker to commit line (issue4688)...
r25382 phases: 2 draft
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943
The following line is commented out because the file doesn't exist at the moment, and some OSes error out even with `rm -f`.
$ rm b/nonempty
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482 $ hg up
Siddharth Agarwal
merge: disable path conflict checking by default (issue5716)...
r34943 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482 $ hg sum
parent: 1:b8bb4a988f25 tip
commit #1
branch: default
commit: (clean)
update: (current)
Gilles Moris
summary: move the parents phase marker to commit line (issue4688)...
r25382 phases: 2 draft
Matt Mackall
update: add tracking of interrupted updates (issue3113)...
r19482
Prepare a basic merge
$ hg up 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file c1 > c
$ hg add c
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
$ echo This is file b1 > b
no merges expected
$ hg merge -P 1
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 1:b8bb4a988f25
Pradeepkumar Gayam
tests: unify test-merge1
r11975 user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Pradeepkumar Gayam
tests: unify test-merge1
r11975 summary: commit #1
$ hg merge 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg diff --nodates
Martin Geisler
tests: remove unneeded -d flags...
r12156 diff -r 49035e18a8e6 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+This is file b1
$ hg status
M b
$ cd ..; rm -r t
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo This is file c1 > c
$ hg add c
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
$ echo This is file b2 > b
merge should fail
$ hg merge 1
Jordi Gutiérrez Hermoso
merge: report all files in _checkunknown...
r15894 b: untracked file differs
abort: untracked files in working directory differ from files in requested revision
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Siddharth Agarwal
merge: while checking for unknown files don't follow symlinks (issue5027)...
r27571
#if symlink
symlinks to directories should be treated as regular files (issue5027)
$ rm b
$ ln -s 'This is file b2' b
$ hg merge 1
b: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
symlinks shouldn't be followed
$ rm b
$ echo This is file b1 > .hg/b
$ ln -s .hg/b b
$ hg merge 1
b: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
$ rm b
$ echo This is file b2 > b
#endif
Siddharth Agarwal
merge: add options to warn or ignore on colliding unknown files...
r27657 bad config
$ hg merge 1 --config merge.checkunknown=x
abort: merge.checkunknown not valid ('x' is none of 'abort', 'ignore', 'warn')
[255]
this merge should fail
$ hg merge 1 --config merge.checkunknown=abort
b: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
this merge should warn
$ hg merge 1 --config merge.checkunknown=warn
b: replacing untracked file
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat b.orig
This is file b2
$ hg up --clean 2
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ mv b.orig b
this merge should silently ignore
$ cat b
This is file b2
$ hg merge 1 --config merge.checkunknown=ignore
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Siddharth Agarwal
merge: split up checks for unknown and ignored files that differ...
r27742 merge.checkignored
$ hg up --clean 1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ cat >> .hgignore << EOF
> remoteignored
> EOF
$ echo This is file localignored3 > localignored
$ echo This is file remoteignored3 > remoteignored
$ hg add .hgignore localignored remoteignored
$ hg commit -m "commit #3"
$ hg up 2
1 files updated, 0 files merged, 4 files removed, 0 files unresolved
$ cat >> .hgignore << EOF
> localignored
> EOF
$ hg add .hgignore
$ hg commit -m "commit #4"
remote .hgignore shouldn't be used for determining whether a file is ignored
$ echo This is file remoteignored4 > remoteignored
$ hg merge 3 --config merge.checkignored=ignore --config merge.checkunknown=abort
remoteignored: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
$ hg merge 3 --config merge.checkignored=abort --config merge.checkunknown=ignore
merging .hgignore
merging for .hgignore
3 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat remoteignored
This is file remoteignored3
$ cat remoteignored.orig
This is file remoteignored4
$ rm remoteignored.orig
local .hgignore should be used for that
$ hg up --clean 4
1 files updated, 0 files merged, 3 files removed, 0 files unresolved
$ echo This is file localignored4 > localignored
also test other conflicting files to see we output the full set of warnings
$ echo This is file b2 > b
$ hg merge 3 --config merge.checkignored=abort --config merge.checkunknown=abort
b: untracked file differs
localignored: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
$ hg merge 3 --config merge.checkignored=abort --config merge.checkunknown=ignore
localignored: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
$ hg merge 3 --config merge.checkignored=warn --config merge.checkunknown=abort
b: untracked file differs
abort: untracked files in working directory differ from files in requested revision
[255]
$ hg merge 3 --config merge.checkignored=warn --config merge.checkunknown=warn
b: replacing untracked file
localignored: replacing untracked file
merging .hgignore
merging for .hgignore
3 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat localignored
This is file localignored3
$ cat localignored.orig
This is file localignored4
$ rm localignored.orig
Siddharth Agarwal
merge: add options to warn or ignore on colliding unknown files...
r27657 $ cat b.orig
This is file b2
$ hg up --clean 2
Siddharth Agarwal
merge: split up checks for unknown and ignored files that differ...
r27742 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
Siddharth Agarwal
merge: add options to warn or ignore on colliding unknown files...
r27657 $ mv b.orig b
this merge of b should work
$ cat b
This is file b2
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ hg merge -f 1
Mads Kiilerich
util: flush stdout before calling external processes...
r13439 merging b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 merging for b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg diff --nodates
Martin Geisler
tests: remove unneeded -d flags...
r12156 diff -r 49035e18a8e6 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- /dev/null
+++ b/b
@@ -0,0 +1,1 @@
+This is file b2
$ hg status
M b
$ cd ..; rm -r t
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b22 > b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ hg update 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo This is file c1 > c
$ hg add c
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #3"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
Contents of b should be "this is file b1"
$ cat b
This is file b1
$ echo This is file b22 > b
merge fails
$ hg merge 2
Siddharth Agarwal
merge: standardize error message for dirty working dir
r19802 abort: uncommitted changes
Kevin Bullock
merge: make 'nothing to merge' aborts consistent...
r15619 (use 'hg status' to list changes)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Mads Kiilerich
tests: cleanup of echo statements left over from test conversion
r15243 merge expected!
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ hg merge -f 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg diff --nodates
Martin Geisler
tests: remove unneeded -d flags...
r12156 diff -r 85de557015a8 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- a/b
+++ b/b
@@ -1,1 +1,1 @@
-This is file b1
+This is file b22
$ hg status
M b
$ cd ..; rm -r t
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ cd t
$ echo This is file a1 > a
$ hg add a
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #0"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b1 > b
$ hg add b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #1"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ echo This is file b22 > b
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #2"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 $ hg update 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo This is file c1 > c
$ hg add c
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m "commit #3"
Pradeepkumar Gayam
tests: unify test-merge1
r11975 created new head
$ echo This is file b33 > b
merge of b should fail
$ hg merge 2
Siddharth Agarwal
merge: standardize error message for dirty working dir
r19802 abort: uncommitted changes
Kevin Bullock
merge: make 'nothing to merge' aborts consistent...
r15619 (use 'hg status' to list changes)
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Pradeepkumar Gayam
tests: unify test-merge1
r11975 merge of b expected
$ hg merge -f 2
Mads Kiilerich
util: flush stdout before calling external processes...
r13439 merging b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 merging for b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg diff --nodates
Martin Geisler
tests: remove unneeded -d flags...
r12156 diff -r 85de557015a8 b
Pradeepkumar Gayam
tests: unify test-merge1
r11975 --- a/b
+++ b/b
@@ -1,1 +1,1 @@
-This is file b1
+This is file b33
$ hg status
M b
Matt Mackall
merge: handle no file parent in backwards merge (issue2364)
r12664
Test for issue2364
$ hg up -qC .
$ hg rm b
$ hg ci -md
$ hg revert -r -2 b
$ hg up -q -- -2
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
FUJIWARA Katsunori
context: write dirstate out explicitly after marking files as clean...
r25753 Test that updated files are treated as "modified", when
'merge.update()' is aborted before 'merge.recordupdates()' (= parents
aren't changed), even if none of mode, size and timestamp of them
isn't changed on the filesystem (see also issue4583).
$ cat > $TESTTMP/abort.py <<EOF
Augie Fackler
tests: update test-merge1 to pass our import checker
r33970 > from __future__ import absolute_import
FUJIWARA Katsunori
context: write dirstate out explicitly after marking files as clean...
r25753 > # emulate aborting before "recordupdates()". in this case, files
> # are changed without updating dirstate
Augie Fackler
tests: update test-merge1 to pass our import checker
r33970 > from mercurial import (
> error,
> extensions,
> merge,
> )
FUJIWARA Katsunori
context: write dirstate out explicitly after marking files as clean...
r25753 > def applyupdates(orig, *args, **kwargs):
> orig(*args, **kwargs)
Pierre-Yves David
error: get Abort from 'error' instead of 'util'...
r26587 > raise error.Abort('intentional aborting')
FUJIWARA Katsunori
context: write dirstate out explicitly after marking files as clean...
r25753 > def extsetup(ui):
> extensions.wrapfunction(merge, "applyupdates", applyupdates)
> EOF
$ cat >> .hg/hgrc <<EOF
> [fakedirstatewritetime]
> # emulate invoking dirstate.write() via repo.status()
> # at 2000-01-01 00:00
> fakenow = 200001010000
> EOF
(file gotten from other revision)
$ hg update -q -C 2
$ echo 'THIS IS FILE B5' > b
$ hg commit -m 'commit #5'
$ hg update -q -C 3
$ cat b
This is file b1
$ touch -t 200001010000 b
$ hg debugrebuildstate
$ cat >> .hg/hgrc <<EOF
> [extensions]
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py
> abort = $TESTTMP/abort.py
> EOF
$ hg merge 5
abort: intentional aborting
[255]
$ cat >> .hg/hgrc <<EOF
> [extensions]
> fakedirstatewritetime = !
> abort = !
> EOF
$ cat b
THIS IS FILE B5
$ touch -t 200001010000 b
$ hg status -A b
M b
(file merged from other revision)
$ hg update -q -C 3
$ echo 'this is file b6' > b
$ hg commit -m 'commit #6'
created new head
$ cat b
this is file b6
$ touch -t 200001010000 b
$ hg debugrebuildstate
$ cat >> .hg/hgrc <<EOF
> [extensions]
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py
> abort = $TESTTMP/abort.py
> EOF
$ hg merge --tool internal:other 5
abort: intentional aborting
[255]
$ cat >> .hg/hgrc <<EOF
> [extensions]
> fakedirstatewritetime = !
> abort = !
> EOF
$ cat b
THIS IS FILE B5
$ touch -t 200001010000 b
$ hg status -A b
M b
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..