--- a/hgext/largefiles/overrides.py Mon Dec 01 02:11:17 2014 +0100
+++ b/hgext/largefiles/overrides.py Mon Dec 01 02:11:29 2014 +0100
@@ -438,10 +438,18 @@
msg = _('remote turned local normal file %s into a largefile\n'
'use (l)argefile or keep (n)ormal file?'
'$$ &Largefile $$ &Normal file') % lfile
- if repo.ui.promptchoice(msg, 0) == 0:
+ if (# local has unchanged normal file, pick remote largefile
+ pas and lfile in pas[0] and
+ not pas[0][lfile].cmp(p1[lfile]) or
+ # if remote has unchanged largefile, pick local normal file
+ not (pas and standin in pas[0] and
+ not pas[0][standin].cmp(p2[standin])) and
+ # else, prompt
+ repo.ui.promptchoice(msg, 0) == 0
+ ): # pick remote largefile
actions['r'].append((lfile, None, msg))
newglist.append((standin, (p2.flags(standin),), msg))
- else:
+ else: # keep local normal file
actions['r'].append((standin, None, msg))
elif lfutil.standin(f) in p1 and lfutil.standin(f) not in removes:
# Case 2: largefile in the working copy, normal file in
@@ -451,7 +459,15 @@
msg = _('remote turned local largefile %s into a normal file\n'
'keep (l)argefile or use (n)ormal file?'
'$$ &Largefile $$ &Normal file') % lfile
- if repo.ui.promptchoice(msg, 0) == 0:
+ if (# if remote has unchanged normal file, pick local largefile
+ pas and f in pas[0] and
+ not pas[0][f].cmp(p2[f]) or
+ # if local has unchanged largefile, pick remote normal file
+ not (pas and standin in pas[0] and
+ not pas[0][standin].cmp(p1[standin])) and
+ # else, prompt
+ repo.ui.promptchoice(msg, 0) == 0
+ ): # keep local largefile
if branchmerge:
# largefile can be restored from standin safely
actions['r'].append((lfile, None, msg))
@@ -462,7 +478,7 @@
# linear-merge should treat this largefile as 're-added'
actions['a'].append((standin, None, msg))
- else:
+ else: # pick remote normal file
actions['r'].append((standin, None, msg))
newglist.append((lfile, (p2.flags(lfile),), msg))
else:
--- a/tests/test-issue3084.t Mon Dec 01 02:11:17 2014 +0100
+++ b/tests/test-issue3084.t Mon Dec 01 02:11:29 2014 +0100
@@ -264,8 +264,6 @@
$ hg merge -r large
local changed f which remote deleted
use (c)hanged version or (d)elete? c
- remote turned local normal file f into a largefile
- use (l)argefile or keep (n)ormal file? l
getting changed largefiles
1 largefiles updated, 0 removed
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
@@ -279,8 +277,6 @@
$ hg merge -r normal-same
remote changed f which local deleted
use (c)hanged version or leave (d)eleted? c
- remote turned local largefile f into a normal file
- keep (l)argefile or use (n)ormal file? l
getting changed largefiles
1 largefiles updated, 0 removed
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
@@ -393,14 +389,12 @@
$ hg merge -r normal
local changed .hglf/f which remote deleted
use (c)hanged version or (d)elete? c
- remote turned local largefile f into a normal file
- keep (l)argefile or use (n)ormal file? l
getting changed largefiles
- 1 largefiles updated, 0 removed
- 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ 0 largefiles updated, 0 removed
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat f
- large
+ normal
swap
@@ -408,14 +402,12 @@
$ hg merge -r large-same
remote changed .hglf/f which local deleted
use (c)hanged version or leave (d)eleted? c
- remote turned local normal file f into a largefile
- use (l)argefile or keep (n)ormal file? l
getting changed largefiles
- 1 largefiles updated, 0 removed
- 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ 0 largefiles updated, 0 removed
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ cat f
- large
+ normal
Ancestor: large Parent: large2 Parent: normal result: ?
(annoying extra prompt ... but it do not do any serious harm)