[PATCH v5 2/3] fetch: skip tasks related to fetching objects
- From
Glen Choo <chooglen@google.com>
- Date
- Jan 18, 2022, 18:54 UTC
- Message-ID
- <20220118185453.33710-3-chooglen@google.com>
- In-Reply-To
- <20220118185453.33710-1-chooglen@google.com>
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> --- builtin/fetch.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/builtin/fetch.c b/builtin/fetch.c index 0a625cb137..7bbff5a029 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2152,6 +2152,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 &&
-- 2.33.GIT