fetch: skip tasks related to fetching objects
cmd_fetch() does the following with the assumption that objects are fetched: * Run gc * Write commit graphs (if enabled by fetch.writeCommitGraph=true) However, neither of these tasks makes sense if objects are not fetched e.g. `git fetch --negotiate-only` never fetches objects. Speed up cmd_fetch() by bailing out early if we know for certain that objects will not be fetched. cmd_fetch() can bail out early whenever objects are not fetched, but for now this only considers --negotiate-only. The same optimization does not apply to `git fetch --dry-run` because that actually fetches objects; the dry run refers to not updating refs. Signed-off-by: Glen Choo <chooglen@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
bec587d4c1
commit
135a12bc14
@ -2133,6 +2133,17 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
|||||||
strvec_clear(&options);
|
strvec_clear(&options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Skip irrelevant tasks because we know objects were not
|
||||||
|
* fetched.
|
||||||
|
*
|
||||||
|
* NEEDSWORK: as a future optimization, we can return early
|
||||||
|
* whenever objects were not fetched e.g. if we already have all
|
||||||
|
* of them.
|
||||||
|
*/
|
||||||
|
if (negotiate_only)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
prepare_repo_settings(the_repository);
|
prepare_repo_settings(the_repository);
|
||||||
if (fetch_write_commit_graph > 0 ||
|
if (fetch_write_commit_graph > 0 ||
|
||||||
(fetch_write_commit_graph < 0 &&
|
(fetch_write_commit_graph < 0 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user