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 32827 d3ab31bf9c0e
parent 32795 efebc9f52ecb
child 32945 0ce2cbebd749
child 32987 74930cf4a10e
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