diff options
-rw-r--r-- | Documentation/RelNotes/1.7.6.3.txt | 4 | ||||
-rw-r--r-- | Documentation/git.txt | 3 | ||||
-rw-r--r-- | builtin/fetch.c | 15 | ||||
-rw-r--r-- | submodule.c | 4 |
4 files changed, 19 insertions, 7 deletions
diff --git a/Documentation/RelNotes/1.7.6.3.txt b/Documentation/RelNotes/1.7.6.3.txt index c05efb2439..95971831b9 100644 --- a/Documentation/RelNotes/1.7.6.3.txt +++ b/Documentation/RelNotes/1.7.6.3.txt @@ -7,6 +7,10 @@ Fixes since v1.7.6.2 * "git -c var=value subcmd" misparsed the custom configuration when value contained an equal sign. + * "git fetch" had a major performance regression, wasting many + needless cycles in a repository where there is no submodules + present. This was especially bad, when there were many refs. + * "git reflog $refname" did not default to the "show" subcommand as the documentation advertised the command to do. diff --git a/Documentation/git.txt b/Documentation/git.txt index 651e155d1d..4ae21a3cc7 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -44,9 +44,10 @@ unreleased) version of git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.7.6.2/git.html[documentation for release 1.7.6.2] +* link:v1.7.6.3/git.html[documentation for release 1.7.6.3] * release notes for + link:RelNotes/1.7.6.3.txt[1.7.6.3], link:RelNotes/1.7.6.2.txt[1.7.6.2], link:RelNotes/1.7.6.1.txt[1.7.6.1], link:RelNotes/1.7.6.txt[1.7.6]. diff --git a/builtin/fetch.c b/builtin/fetch.c index 93c99385a9..e422ced929 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -941,6 +941,15 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); + if (recurse_submodules != RECURSE_SUBMODULES_OFF) { + if (recurse_submodules_default) { + int arg = parse_fetch_recurse_submodules_arg("--recurse-submodules-default", recurse_submodules_default); + set_config_fetch_recurse_submodules(arg); + } + gitmodules_config(); + git_config(submodule_config, NULL); + } + if (all) { if (argc == 1) die(_("fetch --all does not take a repository argument")); @@ -976,12 +985,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) { const char *options[10]; int num_options = 0; - if (recurse_submodules_default) { - int arg = parse_fetch_recurse_submodules_arg("--recurse-submodules-default", recurse_submodules_default); - set_config_fetch_recurse_submodules(arg); - } - gitmodules_config(); - git_config(submodule_config, NULL); add_options_to_argv(&num_options, options); result = fetch_populated_submodules(num_options, options, submodule_prefix, diff --git a/submodule.c b/submodule.c index 7a76edf911..ad86534ba1 100644 --- a/submodule.c +++ b/submodule.c @@ -481,6 +481,10 @@ void check_for_new_submodule_commits(unsigned char new_sha1[20]) const char *argv[] = {NULL, NULL, "--not", "--all", NULL}; int argc = ARRAY_SIZE(argv) - 1; + /* No need to check if there are no submodules configured */ + if (!config_name_for_path.nr) + return; + init_revisions(&rev, NULL); argv[1] = xstrdup(sha1_to_hex(new_sha1)); setup_revisions(argc, argv, &rev, NULL); |