]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule: suppress checking for file name and ref ambiguity for object ids
authorOrgad Shaneh <orgads@gmail.com>
Sun, 6 Sep 2020 20:53:55 +0000 (20:53 +0000)
committerJunio C Hamano <gitster@pobox.com>
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 <orgads@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
submodule.c

index 3cbcf40dfc50583cb05d9ca9c50c01a16a5c23c8..e48710e42373bdf17bfa9df20bfb81be01b58dae 100644 (file)
@@ -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"));