git.99rst.org
/
git.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
| inline |
side by side
(parent:
3a238e5
)
submodule: suppress checking for file name and ref ambiguity for object ids
author
Orgad Shaneh
<redacted>
Sun, 6 Sep 2020 20:53:55 +0000
(20:53 +0000)
committer
Junio C Hamano
<redacted>
Sun, 6 Sep 2020 21:44:41 +0000
(14:44 -0700)
The argv argument of collect_changed_submodules() contains only object ids
(the objects references of all the refs).
Notify setup_revisions() that the input is not filenames by passing
assume_dashdash, so it can avoid redundant stat for each ref.
Also suppress refname_ambiguity flag to avoid filesystem lookups for
each object. Similar logic can be found in cat-file, pack-objects and more.
This change reduces the time for git fetch in my repo from 25s to 6s.
Signed-off-by: Orgad Shaneh <redacted>
Signed-off-by: Junio C Hamano <redacted>
submodule.c
patch
|
blob
|
history
diff --git
a/submodule.c
b/submodule.c
index 3cbcf40dfc50583cb05d9ca9c50c01a16a5c23c8..e48710e42373bdf17bfa9df20bfb81be01b58dae 100644
(file)
--- a/
submodule.c
+++ b/
submodule.c
@@
-840,9
+840,16
@@
static void collect_changed_submodules(struct repository *r,
{
struct rev_info rev;
const struct commit *commit;
+ int save_warning;
+ struct setup_revision_opt s_r_opt = {
+ .assume_dashdash = 1,
+ };
+ save_warning = warn_on_object_refname_ambiguity;
+ warn_on_object_refname_ambiguity = 0;
repo_init_revisions(r, &rev, NULL);
- setup_revisions(argv->nr, argv->v, &rev, NULL);
+ setup_revisions(argv->nr, argv->v, &rev, &s_r_opt);
+ warn_on_object_refname_ambiguity = save_warning;
if (prepare_revision_walk(&rev))
die(_("revision walk setup failed"));
git clone https://git.99rst.org/PROJECT