lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794)
authorMatt Harbison <matt_harbison@yahoo.com>
Mon, 26 Mar 2018 22:18:36 -0400
changeset 37138 4d63f3bc1e1a
parent 37137 db90a5793103
child 37139 aa55c5354b8f
lfs: respect narrowmatcher when testing to add 'lfs' requirement (issue5794) There's a similar test in lfs.wrapper.convertsink(), but I didn't update that because I don't think that the sink repo in a convert can be narrow. It seems reasonable that a narrow clone of an LFS repo may not necessarily be an LFS repo. The only potential issue is that LFS has a hard requirement for changegroup v3, which that extension enables. The use of treemanifest will enable changegroup v3 in narrow clones, because allsupportedversions() in changegroup.py preserves it when it sees a 'treemanifest' requirement. But I don't see where changegroup v3 is enabled for a flat manifest.
hgext/lfs/__init__.py
tests/test-narrow-commit.t
--- a/hgext/lfs/__init__.py	Tue Mar 20 18:02:16 2018 -0700
+++ b/hgext/lfs/__init__.py	Mon Mar 26 22:18:36 2018 -0400
@@ -226,9 +226,11 @@
                     s = repo.set('%n:%n', _bin(kwargs[r'node']), _bin(last))
                 else:
                     s = repo.set('%n', _bin(kwargs[r'node']))
+            match = repo.narrowmatch()
             for ctx in s:
                 # TODO: is there a way to just walk the files in the commit?
-                if any(ctx[f].islfs() for f in ctx.files() if f in ctx):
+                if any(ctx[f].islfs() for f in ctx.files()
+                       if f in ctx and match(f)):
                     repo.requirements.add('lfs')
                     repo._writerequirements()
                     repo.prepushoutgoinghooks.add('lfs', wrapper.prepush)
--- a/tests/test-narrow-commit.t	Tue Mar 20 18:02:16 2018 -0700
+++ b/tests/test-narrow-commit.t	Mon Mar 26 22:18:36 2018 -0400
@@ -28,7 +28,11 @@
 
   $ cd ..
 
-  $ hg clone --narrow ssh://user@dummy/master narrow --include inside
+(The lfs extension does nothing here, but this test ensures that its hook that
+determines whether to add the lfs requirement, respects the narrow boundaries.)
+
+  $ hg --config extensions.lfs= clone --narrow ssh://user@dummy/master narrow \
+  >    --include inside
   requesting all changes
   adding changesets
   adding manifests