Mercurial > hg
diff hgext/largefiles/reposetup.py @ 30191:328545c7d8a1 stable
largefiles: fix 'deleted' files sometimes persistently appearing with R status
A code snippet that has been around since largefiles was introduced was wrong:
Standins no longer found in lfdirstate has *not* been removed -
they have probably just been deleted ... or not created.
This wrong reporting did that 'up -C' didn't undo the change and didn't sync
the two dirstates.
Instead of reporting such files as removed, propagate the deletion to the
standin file and report the file as deleted.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Mon, 17 Oct 2016 17:12:24 +0200 |
parents | cc497d2830b0 |
children | 3afde791dce1 |
line wrap: on
line diff
--- a/hgext/largefiles/reposetup.py Sun Oct 16 02:29:45 2016 +0200 +++ b/hgext/largefiles/reposetup.py Mon Oct 17 17:12:24 2016 +0200 @@ -164,8 +164,8 @@ # files from lfdirstate unsure, s = lfdirstate.status(match, [], False, listclean, False) - (modified, added, removed, clean) = (s.modified, s.added, - s.removed, s.clean) + (modified, added, removed, deleted, clean) = ( + s.modified, s.added, s.removed, s.deleted, s.clean) if parentworking: for lfile in unsure: standin = lfutil.standin(lfile) @@ -206,14 +206,18 @@ removed = [lfile for lfile in removed if lfutil.standin(lfile) in ctx1] - # Standins no longer found in lfdirstate has been - # removed + # Standins no longer found in lfdirstate have been deleted for standin in ctx1.walk(lfutil.getstandinmatcher(self)): lfile = lfutil.splitstandin(standin) if not match(lfile): continue if lfile not in lfdirstate: - removed.append(lfile) + deleted.append(lfile) + # Sync "largefile has been removed" back to the + # standin. Removing a file as a side effect of + # running status is gross, but the alternatives (if + # any) are worse. + self.wvfs.unlink(standin) # Filter result lists result = list(result) @@ -237,7 +241,7 @@ normals = [[fn for fn in filelist if not lfutil.isstandin(fn)] for filelist in result] - lfstatus = (modified, added, removed, s.deleted, [], [], + lfstatus = (modified, added, removed, deleted, [], [], clean) result = [sorted(list1 + list2) for (list1, list2) in zip(normals, lfstatus)]