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.
--- 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',))
--- 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