[PATCH 5 of 6] grep: invoke the file prefetch hook
Matt Harbison
mharbison72 at gmail.com
Sun Apr 15 06:44:09 UTC 2018
# HG changeset patch
# User Matt Harbison <matt_harbison at yahoo.com>
# Date 1523756443 14400
# Sat Apr 14 21:40:43 2018 -0400
# Node ID a3702d55eb1ca64fc220827482e9d3a17cbfbb57
# Parent 3b0c3d4939b56ca038dbbba17da424699a6b339d
grep: invoke the file prefetch hook
Because of the way `grep` works, I don't see an easy way to prefetch everything,
so this prefetches per revision as it walks. The message between the file/line
number and the matching line is a --verbose output. Since I don't expect this
to be used much with lfs content, I'm not going to worry about it.
I have no idea why the second test without an explicit file doesn't find the
match.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2553,6 +2553,8 @@ def grep(ui, repo, pattern, *pats, **opt
matches.setdefault(rev, {})
matches.setdefault(parent, {})
files = revfiles.setdefault(rev, [])
+ scmutil.fileprefetchhooks(ctx.repo(), [ctx], fns)
+
for fn in fns:
flog = getfile(fn)
try:
diff --git a/tests/test-lfs-serve.t b/tests/test-lfs-serve.t
--- a/tests/test-lfs-serve.t
+++ b/tests/test-lfs-serve.t
@@ -430,6 +430,34 @@ Only the files required by diff are pref
@@ -0,0 +1,1 @@
+this is an lfs file too
+Grep will prefetch files, as needed.
+
+ $ rm -r $TESTTMP/bulkfetch/.hg/store/lfs
+ $ hg -R $TESTTMP/bulkfetch grep -v lfs $TESTTMP/bulkfetch/lfs2.txt
+ lfs: assuming remote store: http://localhost:$HGPORT/.git/info/lfs
+ lfs: assuming remote store: http://localhost:$HGPORT/.git/info/lfs
+ lfs: downloading a82f1c5cea0d40e3bb3a849686bb4e6ae47ca27e614de55c1ed0325698ef68de (25 bytes)
+ lfs: processed: a82f1c5cea0d40e3bb3a849686bb4e6ae47ca27e614de55c1ed0325698ef68de
+ lfs: found a82f1c5cea0d40e3bb3a849686bb4e6ae47ca27e614de55c1ed0325698ef68de in the local lfs store
+ lfs2.txt:5:lfs: found a82f1c5cea0d40e3bb3a849686bb4e6ae47ca27e614de55c1ed0325698ef68de in the local lfs store
+ this is another lfs file
+ $ rm -r $TESTTMP/bulkfetch/.hg/store/lfs
+ $ hg -R $TESTTMP/bulkfetch grep -v lfs
+ lfs: assuming remote store: http://localhost:$HGPORT/.git/info/lfs
+ lfs: assuming remote store: http://localhost:$HGPORT/.git/info/lfs
+ lfs: downloading bed80f00180ac404b843628ab56a1c1984d6145c391cd1628a7dd7d2598d71fc (23 bytes)
+ lfs: processed: bed80f00180ac404b843628ab56a1c1984d6145c391cd1628a7dd7d2598d71fc
+ lfs: assuming remote store: http://localhost:$HGPORT/.git/info/lfs
+ lfs: downloading a82f1c5cea0d40e3bb3a849686bb4e6ae47ca27e614de55c1ed0325698ef68de (25 bytes)
+ lfs: processed: a82f1c5cea0d40e3bb3a849686bb4e6ae47ca27e614de55c1ed0325698ef68de
+ lfs: assuming remote store: http://localhost:$HGPORT/.git/info/lfs
+ lfs: need to transfer 2 objects (44 bytes)
+ lfs: downloading cf1b2787b74e66547d931b6ebe28ff63303e803cb2baa14a8f57c4383d875782 (20 bytes)
+ lfs: processed: cf1b2787b74e66547d931b6ebe28ff63303e803cb2baa14a8f57c4383d875782
+ lfs: downloading d96eda2c74b56e95cfb5ffb66b6503e198cc6fc4a09dc877de925feebc65786e (24 bytes)
+ lfs: processed: d96eda2c74b56e95cfb5ffb66b6503e198cc6fc4a09dc877de925feebc65786e
+ [1]
+
#endif
$ $PYTHON $TESTDIR/killdaemons.py $DAEMON_PIDS
More information about the Mercurial-devel
mailing list