Patchwork [3,of,3] largefiles: don't prompt for normal/largefile changes when doing plain updates

login
register
mail settings
Submitter Mads Kiilerich
Date Oct. 24, 2013, 6:34 p.m.
Message ID <427ce5633c1c8a723977.1382639681@localhost.localdomain>
Download mbox | patch
Permalink /patch/2821/
State Accepted
Commit 427ce5633c1c8a7239778e36561f527421ea93d3
Headers show

Comments

Mads Kiilerich - Oct. 24, 2013, 6:34 p.m.
# HG changeset patch
# User Mads Kiilerich <madski@unity3d.com>
# Date 1382639639 -28800
#      Fri Oct 25 02:33:59 2013 +0800
# Branch stable
# Node ID 427ce5633c1c8a7239778e36561f527421ea93d3
# Parent  593207462618527668e30d3423254bafa09eb9ad
largefiles: don't prompt for normal/largefile changes when doing plain updates

We used to get like:

  $ hg up -r 2
  foo has been turned into a normal file
  keep as (l)argefile or use (n)ormal file? l
  getting changed largefiles
  0 largefiles updated, 0 removed
  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
  $ cat foo
  cat: foo: No such file or directory
  [1]

- which both asked the wrong question and did the wrong thing.

Instead, skip this conflict resolution when the local conflicting file has been
scheduled for removal and there thus is no conflict.
Matt Mackall - Oct. 25, 2013, 8:17 p.m.
On Fri, 2013-10-25 at 02:34 +0800, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski@unity3d.com>
> # Date 1382639639 -28800
> #      Fri Oct 25 02:33:59 2013 +0800
> # Branch stable
> # Node ID 427ce5633c1c8a7239778e36561f527421ea93d3
> # Parent  593207462618527668e30d3423254bafa09eb9ad
> largefiles: don't prompt for normal/largefile changes when doing plain updates

These are queued for stable, thanks.

Patch

diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -374,6 +374,7 @@  def overridemanifestmerge(origfn, repo, 
     if overwrite:
         return actions
 
+    removes = set(a[0] for a in actions if a[1] == 'r')
     processed = []
 
     for action in actions:
@@ -381,7 +382,7 @@  def overridemanifestmerge(origfn, repo, 
 
         splitstandin = lfutil.splitstandin(f)
         if (m == "g" and splitstandin is not None and
-            splitstandin in p1):
+            splitstandin in p1 and splitstandin not in removes):
             # Case 1: normal file in the working copy, largefile in
             # the second parent
             lfile = splitstandin
@@ -394,7 +395,8 @@  def overridemanifestmerge(origfn, repo, 
                 processed.append((standin, "g", (p2.flags(standin),), msg))
             else:
                 processed.append((standin, "r", None, msg))
-        elif m == "g" and lfutil.standin(f) in p1:
+        elif (m == "g" and
+            lfutil.standin(f) in p1 and lfutil.standin(f) not in removes):
             # Case 2: largefile in the working copy, normal file in
             # the second parent
             standin = lfutil.standin(f)
diff --git a/tests/test-issue3084.t b/tests/test-issue3084.t
--- a/tests/test-issue3084.t
+++ b/tests/test-issue3084.t
@@ -109,4 +109,31 @@  Largefile in the working copy, keeping t
   $ cat foo
   large
 
+Whatever ... commit something so we can invoke merge when updating
+
+  $ hg commit -m '3: Merge'
+
+Updating from largefile to normal - no reason to prompt
+
+  $ hg up -r 2
+  getting changed largefiles
+  0 largefiles updated, 0 removed
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ cat foo
+  normal
+
+(the update above used to leave the working dir in a very weird state - clean it
+  $ hg up -qr null
+  $ hg up -qr 2
+)
+
+Updating from normal to largefile - no reason to prompt
+
+  $ hg up -r 3
+  getting changed largefiles
+  1 largefiles updated, 0 removed
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ cat foo
+  large
+
   $ cd ..