From patchwork Wed Jun 14 04:29:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [STABLE] largefiles: avoid a crash when archiving a subrepo with largefiles disabled From: Matt Harbison X-Patchwork-Id: 21367 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Wed, 14 Jun 2017 00:29:15 -0400 # HG changeset patch # User Matt Harbison # Date 1497407081 14400 # Tue Jun 13 22:24:41 2017 -0400 # Branch stable # Node ID ae904143fdc12bd46cac831ee20a666adc879339 # Parent efebc9f52ecbbbe90fcb83c6a6202f2ec948bbc5 largefiles: avoid a crash when archiving a subrepo with largefiles disabled This path is also used for extdiff, which is how I crossed paths with it. Without this, an AttributeError occurs looking for 'lfstatus' on localrepository. See also d414c28db84d. The other archive method is for the archival.py override, so it doesn't need to be special cased like this. (It looks like it is only called for the top level repo.) Likewise, the transplant override is also for commands.py. The other overrides set lfstatus before examining it. diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py +++ b/hgext/largefiles/overrides.py @@ -1009,7 +1009,8 @@ archiver.done() def hgsubrepoarchive(orig, repo, archiver, prefix, match=None, decode=True): - if not repo._repo.lfstatus: + lfenabled = util.safehasattr(repo._repo, '_largefilesenabled') + if not lfenabled or not repo._repo.lfstatus: return orig(repo, archiver, prefix, match, decode) repo._get(repo._state + ('hg',)) diff --git a/tests/test-largefiles-misc.t b/tests/test-largefiles-misc.t --- a/tests/test-largefiles-misc.t +++ b/tests/test-largefiles-misc.t @@ -1075,6 +1075,10 @@ $ hg -R subrepo-root status -S M large M no-largefiles/normal1 + $ hg -R subrepo-root extdiff -p echo -S --config extensions.extdiff= + "*\\no-largefiles\\normal1" "*\\no-largefiles\\normal1" (glob) (windows !) + */no-largefiles/normal1 */no-largefiles/normal1 (glob) (no-windows !) + [1] $ hg -R subrepo-root revert --all reverting subrepo-root/.hglf/large (glob) reverting subrepo no-largefiles