mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
resolve: use "other" changeset from merge state (issue4163)
We can use the "other" data from the recorded merge state instead of inferring what the other could be from working copy parent. This will allow resolve to fulfil its duty even when the second parent have been dropped. Most direct benefit is fixing a regression in backout.
This commit is contained in:
parent
f2a2751552
commit
3eab08d896
@ -4961,7 +4961,6 @@ def resolve(ui, repo, *pats, **opts):
|
||||
ms.mark(f, "u")
|
||||
else:
|
||||
wctx = repo[None]
|
||||
mctx = wctx.parents()[-1]
|
||||
|
||||
# backup pre-resolve (merge uses .orig for its own purposes)
|
||||
a = repo.wjoin(f)
|
||||
@ -4970,7 +4969,7 @@ def resolve(ui, repo, *pats, **opts):
|
||||
try:
|
||||
# resolve file
|
||||
ui.setconfig('ui', 'forcemerge', opts.get('tool', ''))
|
||||
if ms.resolve(f, wctx, mctx):
|
||||
if ms.resolve(f, wctx):
|
||||
ret = 1
|
||||
finally:
|
||||
ui.setconfig('ui', 'forcemerge', '')
|
||||
|
@ -186,11 +186,12 @@ class mergestate(object):
|
||||
def mark(self, dfile, state):
|
||||
self._state[dfile][0] = state
|
||||
self._dirty = True
|
||||
def resolve(self, dfile, wctx, octx):
|
||||
def resolve(self, dfile, wctx):
|
||||
if self[dfile] == 'r':
|
||||
return 0
|
||||
stateentry = self._state[dfile]
|
||||
state, hash, lfile, afile, anode, ofile, onode, flags = stateentry
|
||||
octx = self._repo[self._other]
|
||||
fcd = wctx[dfile]
|
||||
fco = octx[ofile]
|
||||
fca = self._repo.filectx(afile, fileid=anode)
|
||||
@ -641,7 +642,7 @@ def applyupdates(repo, actions, wctx, mctx, actx, overwrite):
|
||||
overwrite)
|
||||
continue
|
||||
audit(fd)
|
||||
r = ms.resolve(fd, wctx, mctx)
|
||||
r = ms.resolve(fd, wctx)
|
||||
if r is not None and r > 0:
|
||||
unresolved += 1
|
||||
else:
|
||||
|
@ -408,3 +408,93 @@ on branch1, so no file1 and file2:
|
||||
update: (current)
|
||||
|
||||
$ cd ..
|
||||
|
||||
|
||||
Test usage of `hg resolve` in case of conflict
|
||||
(issue4163)
|
||||
|
||||
$ hg init issue4163
|
||||
$ cd issue4163
|
||||
$ touch foo
|
||||
$ hg add foo
|
||||
$ cat > foo << EOF
|
||||
> one
|
||||
> two
|
||||
> three
|
||||
> four
|
||||
> five
|
||||
> six
|
||||
> seven
|
||||
> height
|
||||
> nine
|
||||
> ten
|
||||
> EOF
|
||||
$ hg ci -m 'initial'
|
||||
$ cat > foo << EOF
|
||||
> one
|
||||
> two
|
||||
> THREE
|
||||
> four
|
||||
> five
|
||||
> six
|
||||
> seven
|
||||
> height
|
||||
> nine
|
||||
> ten
|
||||
> EOF
|
||||
$ hg ci -m 'capital three'
|
||||
$ cat > foo << EOF
|
||||
> one
|
||||
> two
|
||||
> THREE
|
||||
> four
|
||||
> five
|
||||
> six
|
||||
> seven
|
||||
> height
|
||||
> nine
|
||||
> TEN
|
||||
> EOF
|
||||
$ hg ci -m 'capital ten'
|
||||
$ hg backout -r 'desc("capital three")' --tool internal:fail
|
||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
|
||||
use 'hg resolve' to retry unresolved file merges
|
||||
[1]
|
||||
$ hg status
|
||||
$ hg resolve -l # still unresolved
|
||||
U foo
|
||||
$ hg summary
|
||||
parent: 2:b71750c4b0fd tip
|
||||
capital ten
|
||||
branch: default
|
||||
commit: 1 unresolved (clean)
|
||||
update: (current)
|
||||
$ hg resolve --all --debug
|
||||
picked tool 'internal:merge' for foo (binary False symlink False)
|
||||
merging foo
|
||||
my foo@b71750c4b0fd+ other foo@a30dd8addae3 ancestor foo@913609522437
|
||||
premerge successful
|
||||
$ hg status
|
||||
M foo
|
||||
? foo.orig
|
||||
$ hg resolve -l
|
||||
R foo
|
||||
$ hg summary
|
||||
parent: 2:b71750c4b0fd tip
|
||||
capital ten
|
||||
branch: default
|
||||
commit: 1 modified, 1 unknown
|
||||
update: (current)
|
||||
$ cat foo
|
||||
one
|
||||
two
|
||||
three
|
||||
four
|
||||
five
|
||||
six
|
||||
seven
|
||||
height
|
||||
nine
|
||||
TEN
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user