extend network protocol to stop clients from locking servers
now all repositories have capabilities slot, tuple with list of names.
if 'unbundle' capability present, repo supports push where client does
not need to lock server. repository classes that have unbundle capability
also have unbundle method.
implemented for ssh now, will be base for push over http.
unbundle protocol acts this way. server tells client what heads it
has during normal negotiate step. client starts unbundle by repeat
server's heads back to it. if server has new heads, abort immediately.
otherwise, transfer changes to server. once data transferred, server
locks and checks heads again. if heads same, changes can be added.
else someone else added heads, and server aborts.
if client wants to force server to add heads, sends special heads list of
'force'.
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
pulling from ../test-a
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
merge: warning: conflicts during merge
merging test.txt
merging test.txt failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:
hg update -C 1
hg merge 2
pulling from ../test-a
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
merge: warning: conflicts during merge
resolving manifests
force False allow True moddirstate True linear False
ancestor 055d847dd401 local 2eded9ab0a5c remote 84cf5750dd20
test.txt versions differ, resolve
merging test.txt
resolving test.txt
file test.txt: my fc3148072371 other d40249267ae3 ancestor 8fe46a3eb557
merging test.txt failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:
hg update -C 3
hg merge 4
one
<<<<<<<
two-point-five
=======
two-point-one
>>>>>>>
three
rev offset length base linkrev nodeid p1 p2
0 0 7 0 0 01365c4cca56 000000000000 000000000000
1 7 9 1 1 7b013192566a 01365c4cca56 000000000000
2 16 15 2 2 8fe46a3eb557 01365c4cca56 000000000000
3 31 27 2 3 fc3148072371 7b013192566a 8fe46a3eb557
4 58 25 4 4 d40249267ae3 8fe46a3eb557 000000000000
changeset: 4:a070d41e8360
tag: tip
parent: 2:faaea63e63a9
user: test
date: Mon Jan 12 13:46:40 1970 +0000
summary: two -> two-point-one
changeset: 3:451c744aabcc
parent: 1:e409be6afcc0
parent: 2:faaea63e63a9
user: test
date: Mon Jan 12 13:46:40 1970 +0000
summary: Merge 1
changeset: 2:faaea63e63a9
parent: 0:095c92b91f1a
user: test
date: Mon Jan 12 13:46:40 1970 +0000
summary: Numbers as words
changeset: 1:e409be6afcc0
user: test
date: Mon Jan 12 13:46:40 1970 +0000
summary: 2 -> 2.5
changeset: 0:095c92b91f1a
user: test
date: Mon Jan 12 13:46:40 1970 +0000
summary: Initial