diff options
author | Glen Choo <chooglen@google.com> | 2022-01-18 16:00:55 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-01-18 16:22:57 -0800 |
commit | 135a12bc1472290ca6b9a4c2f06c838a1495a612 (patch) | |
tree | f35a1c2886cda9e518476eb325d8c672c4d4b26a /builtin/fetch.c | |
parent | fetch: use goto cleanup in cmd_fetch() (diff) | |
download | tgif-135a12bc1472290ca6b9a4c2f06c838a1495a612.tar.xz |
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>
Diffstat (limited to 'builtin/fetch.c')
-rw-r--r-- | builtin/fetch.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c index eab73d7417..06e514b07e 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2133,6 +2133,17 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) 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); if (fetch_write_commit_graph > 0 || (fetch_write_commit_graph < 0 && |