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:f248da0d4c3e
0:9eca13a34789
f248da0d4c3e tip
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
9eca13a34789
9eca13a34789+
reverting file1
9eca13a34789
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
f248da0d4c3e tip
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
merge: warning: conflicts during merge
merging file1
merging file1 failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
There are unresolved merges with locally modified files.
diff -r f248da0d4c3e file1
--- a/file1
+++ b/file1
@@ -1,3 +1,7 @@ added file1
added file1
another line of text
+<<<<<<<
+changed file1 different
+=======
changed file1
+>>>>>>>
M file1
f248da0d4c3e+ tip
reverting file1
f248da0d4c3e tip
f248da0d4c3e tip
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
f248da0d4c3e tip