Patchwork [misc,largefiles] largefiles: update sould only create a .orig backup of a largefile once

login
register
mail settings
Submitter Mads Kiilerich
Date April 13, 2014, 4:57 p.m.
Message ID <6dc5d7e3d42308b6439b.1397408248@localhost.localdomain>
Download mbox | patch
Permalink /patch/4316/
State Accepted
Headers show

Comments

Mads Kiilerich - April 13, 2014, 4:57 p.m.
# HG changeset patch
# User Mads Kiilerich <madski@unity3d.com>
# Date 1366304178 -7200
#      Thu Apr 18 18:56:18 2013 +0200
# Node ID 6dc5d7e3d42308b6439b9d5c1471527895db74f5
# Parent  07b55fef14409ca13429e22b55422e7eebc2d79b
largefiles: update sould only create a .orig backup of a largefile once

A .orig of a standin after the update do that a .orig of the actual largefile
is created. The .orig standin was however never removed again and the largefile
.orig was thus overwritten again and again.

The fix: remove the standin .orig when it is used.
Matt Mackall - April 16, 2014, 9:49 p.m.
On Sun, 2014-04-13 at 18:57 +0200, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski@unity3d.com>
> # Date 1366304178 -7200
> #      Thu Apr 18 18:56:18 2013 +0200
> # Node ID 6dc5d7e3d42308b6439b9d5c1471527895db74f5
> # Parent  07b55fef14409ca13429e22b55422e7eebc2d79b
> largefiles: update sould only create a .orig backup of a largefile once

Queued for default, thanks.
Matt Mackall - April 17, 2014, 3:11 p.m.
On Sun, 2014-04-13 at 18:57 +0200, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <madski@unity3d.com>
> # Date 1366304178 -7200
> #      Thu Apr 18 18:56:18 2013 +0200
> # Node ID 6dc5d7e3d42308b6439b9d5c1471527895db74f5
> # Parent  07b55fef14409ca13429e22b55422e7eebc2d79b
> largefiles: update sould only create a .orig backup of a largefile once

Queued for default, thanks.

Patch

diff --git a/hgext/largefiles/lfcommands.py b/hgext/largefiles/lfcommands.py
--- a/hgext/largefiles/lfcommands.py
+++ b/hgext/largefiles/lfcommands.py
@@ -440,6 +440,7 @@  def updatelfiles(ui, repo, filelist=None
                 if (os.path.exists(absstandin + '.orig') and
                     os.path.exists(abslfile)):
                     shutil.copyfile(abslfile, abslfile + '.orig')
+                    util.unlinkpath(absstandin + '.orig')
                 expecthash = lfutil.readstandin(repo, lfile)
                 if (expecthash != '' and
                     (not os.path.exists(abslfile) or
diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t
--- a/tests/test-largefiles.t
+++ b/tests/test-largefiles.t
@@ -1112,6 +1112,12 @@  Rollback on largefiles.
 
   $ echo mistake > sub2/large7
   $ hg revert sub2/large7
+  $ cat sub2/large7
+  large7
+  $ cat sub2/large7.orig
+  mistake
+  $ test ! -f .hglf/sub2/large7.orig
+
   $ hg -q update --clean -r null
   $ hg update --clean
   getting changed largefiles
@@ -1129,18 +1135,16 @@  Rollback on largefiles.
   large7
   $ cat sub2/large7.orig
   mistake
-  $ cat .hglf/sub2/large7.orig
-  9dbfb2c79b1c40981b258c3efa1b10b03f18ad31
+  $ test ! -f .hglf/sub2/large7.orig
 
-demonstrate misfeature: .orig file is overwritten on every update -C,
-also when clean:
+verify that largefile .orig file no longer is overwritten on every update -C:
   $ hg update --clean
   getting changed largefiles
   0 largefiles updated, 0 removed
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cat sub2/large7.orig
-  large7
-  $ rm sub2/large7.orig .hglf/sub2/large7.orig
+  mistake
+  $ rm sub2/large7.orig
 
 Now "update check" is happy.
   $ hg update --check 8