# HG changeset patch # User Matt Harbison # Date 1497407081 14400 # Node ID d3ab31bf9c0e9cecef77f18d9648716be5fcfdb8 # 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 -r efebc9f52ecb -r d3ab31bf9c0e hgext/largefiles/overrides.py --- a/hgext/largefiles/overrides.py Mon Jun 12 11:24:21 2017 -0700 +++ b/hgext/largefiles/overrides.py Tue Jun 13 22:24:41 2017 -0400 @@ -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 -r efebc9f52ecb -r d3ab31bf9c0e tests/test-largefiles-misc.t --- a/tests/test-largefiles-misc.t Mon Jun 12 11:24:21 2017 -0700 +++ b/tests/test-largefiles-misc.t Tue Jun 13 22:24:41 2017 -0400 @@ -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