# HG changeset patch # User Mads Kiilerich # Date 2015-10-20 22:18:11 # Node ID b68797f244e4bb97021ba77531d3080b1abc1489 # Parent e82bce7ec843eff37e917d072c7c333146bb573f largefiles: fix explicit commit of normal/largefile switch Commit of corresponding normal/largefiles pairs would only commit the standin. That is usually fine, except if either the normal file or the standin is a remove while the other is an add. In that case it would either give duplicate colliding entries or lose the file. Instead, commit both filenames if one of them is a remove. diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py --- a/hgext/largefiles/lfutil.py +++ b/hgext/largefiles/lfutil.py @@ -562,8 +562,11 @@ def updatestandinsbymatch(repo, match): for f in match._files: fstandin = standin(f) - # ignore known largefiles and standins - if f in lfiles or fstandin in standins: + # For largefiles, only one of the normal and standin should be + # committed (except if one of them is a remove). + # Thus, skip plain largefile names but keep the standin. + if (f in lfiles or fstandin in standins) and \ + repo.dirstate[f] != 'r' and repo.dirstate[fstandin] != 'r': continue actualfiles.append(f) diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -1850,7 +1850,7 @@ the add and the remove is committed. .hglf/normal3 .hglf/sub2/large6 .hglf/sub2/large7 - normal3 + large4-renamed sub/normal4 $ cd ..