largefiles: avoid a crash when archiving a subrepo with largefiles disabled stable
authorMatt Harbison <matt_harbison@yahoo.com>
Tue, 13 Jun 2017 22:24:41 -0400
branchstable
changeset 32145 d3ab31bf9c0e
parent 32144 efebc9f52ecb
child 32146 74930cf4a10e
child 32963 0ce2cbebd749
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.
hgext/largefiles/overrides.py
tests/test-largefiles-misc.t
--- 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