aboutsummaryrefslogtreecommitdiff
path: root/builtin/pull.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/pull.c')
-rw-r--r--builtin/pull.c293
1 files changed, 146 insertions, 147 deletions
diff --git a/builtin/pull.c b/builtin/pull.c
index 5ebd529620..7e67fdce97 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -119,148 +119,6 @@ static int opt_show_forced_updates = -1;
static const char *set_upstream;
static struct strvec opt_fetch = STRVEC_INIT;
-static struct option pull_options[] = {
- /* Shared options */
- OPT__VERBOSITY(&opt_verbosity),
- OPT_PASSTHRU(0, "progress", &opt_progress, NULL,
- N_("force progress reporting"),
- PARSE_OPT_NOARG),
- OPT_CALLBACK_F(0, "recurse-submodules",
- &recurse_submodules_cli, N_("on-demand"),
- N_("control for recursive fetching of submodules"),
- PARSE_OPT_OPTARG, option_fetch_parse_recurse_submodules),
-
- /* Options passed to git-merge or git-rebase */
- OPT_GROUP(N_("Options related to merging")),
- OPT_CALLBACK_F('r', "rebase", &opt_rebase,
- "(false|true|merges|interactive)",
- N_("incorporate changes by rebasing rather than merging"),
- PARSE_OPT_OPTARG, parse_opt_rebase),
- OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
- N_("do not show a diffstat at the end of the merge"),
- PARSE_OPT_NOARG | PARSE_OPT_NONEG),
- OPT_PASSTHRU(0, "stat", &opt_diffstat, NULL,
- N_("show a diffstat at the end of the merge"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "summary", &opt_diffstat, NULL,
- N_("(synonym to --stat)"),
- PARSE_OPT_NOARG | PARSE_OPT_HIDDEN),
- OPT_PASSTHRU(0, "compact-summary", &opt_diffstat, NULL,
- N_("show a compact-summary at the end of the merge"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "log", &opt_log, N_("n"),
- N_("add (at most <n>) entries from shortlog to merge commit message"),
- PARSE_OPT_OPTARG),
- OPT_PASSTHRU(0, "signoff", &opt_signoff, NULL,
- N_("add a Signed-off-by trailer"),
- PARSE_OPT_OPTARG),
- OPT_PASSTHRU(0, "squash", &opt_squash, NULL,
- N_("create a single commit instead of doing a merge"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "commit", &opt_commit, NULL,
- N_("perform a commit if the merge succeeds (default)"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "edit", &opt_edit, NULL,
- N_("edit message before committing"),
- PARSE_OPT_NOARG),
- OPT_CLEANUP(&cleanup_arg),
- OPT_PASSTHRU(0, "ff", &opt_ff, NULL,
- N_("allow fast-forward"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
- N_("abort if fast-forward is not possible"),
- PARSE_OPT_NOARG | PARSE_OPT_NONEG),
- OPT_PASSTHRU(0, "verify", &opt_verify, NULL,
- N_("control use of pre-merge-commit and commit-msg hooks"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
- N_("verify that the named commit has a valid GPG signature"),
- PARSE_OPT_NOARG),
- OPT_BOOL(0, "autostash", &opt_autostash,
- N_("automatically stash/stash pop before and after")),
- OPT_PASSTHRU_ARGV('s', "strategy", &opt_strategies, N_("strategy"),
- N_("merge strategy to use"),
- 0),
- OPT_PASSTHRU_ARGV('X', "strategy-option", &opt_strategy_opts,
- N_("option=value"),
- N_("option for selected merge strategy"),
- 0),
- OPT_PASSTHRU('S', "gpg-sign", &opt_gpg_sign, N_("key-id"),
- N_("GPG sign commit"),
- PARSE_OPT_OPTARG),
- OPT_SET_INT(0, "allow-unrelated-histories",
- &opt_allow_unrelated_histories,
- N_("allow merging unrelated histories"), 1),
-
- /* Options passed to git-fetch */
- OPT_GROUP(N_("Options related to fetching")),
- OPT_PASSTHRU(0, "all", &opt_all, NULL,
- N_("fetch from all remotes"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU('a', "append", &opt_append, NULL,
- N_("append to .git/FETCH_HEAD instead of overwriting"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "upload-pack", &opt_upload_pack, N_("path"),
- N_("path to upload pack on remote end"),
- 0),
- OPT__FORCE(&opt_force, N_("force overwrite of local branch"), 0),
- OPT_PASSTHRU('t', "tags", &opt_tags, NULL,
- N_("fetch all tags and associated objects"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU('p', "prune", &opt_prune, NULL,
- N_("prune remote-tracking branches no longer on remote"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU('j', "jobs", &max_children, N_("n"),
- N_("number of submodules pulled in parallel"),
- PARSE_OPT_OPTARG),
- OPT_BOOL(0, "dry-run", &opt_dry_run,
- N_("dry run")),
- OPT_PASSTHRU('k', "keep", &opt_keep, NULL,
- N_("keep downloaded pack"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "depth", &opt_depth, N_("depth"),
- N_("deepen history of shallow clone"),
- 0),
- OPT_PASSTHRU_ARGV(0, "shallow-since", &opt_fetch, N_("time"),
- N_("deepen history of shallow repository based on time"),
- 0),
- OPT_PASSTHRU_ARGV(0, "shallow-exclude", &opt_fetch, N_("ref"),
- N_("deepen history of shallow clone, excluding ref"),
- 0),
- OPT_PASSTHRU_ARGV(0, "deepen", &opt_fetch, N_("n"),
- N_("deepen history of shallow clone"),
- 0),
- OPT_PASSTHRU(0, "unshallow", &opt_unshallow, NULL,
- N_("convert to a complete repository"),
- PARSE_OPT_NONEG | PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "update-shallow", &opt_update_shallow, NULL,
- N_("accept refs that update .git/shallow"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU(0, "refmap", &opt_refmap, N_("refmap"),
- N_("specify fetch refmap"),
- PARSE_OPT_NONEG),
- OPT_PASSTHRU_ARGV('o', "server-option", &opt_fetch,
- N_("server-specific"),
- N_("option to transmit"),
- 0),
- OPT_PASSTHRU('4', "ipv4", &opt_ipv4, NULL,
- N_("use IPv4 addresses only"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU('6', "ipv6", &opt_ipv6, NULL,
- N_("use IPv6 addresses only"),
- PARSE_OPT_NOARG),
- OPT_PASSTHRU_ARGV(0, "negotiation-tip", &opt_fetch, N_("revision"),
- N_("report that we have only objects reachable from this object"),
- 0),
- OPT_BOOL(0, "show-forced-updates", &opt_show_forced_updates,
- N_("check for forced-updates on all updated branches")),
- OPT_PASSTHRU(0, "set-upstream", &set_upstream, NULL,
- N_("set upstream for git pull/fetch"),
- PARSE_OPT_NOARG),
-
- OPT_END()
-};
-
/**
* Pushes "-q" or "-v" switches into arr to match the opt_verbosity level.
*/
@@ -596,7 +454,7 @@ static int run_fetch(const char *repo, const char **refspecs)
} else if (*refspecs)
BUG("refspecs without repo?");
cmd.git_cmd = 1;
- cmd.close_object_store = 1;
+ cmd.odb_to_close = the_repository->objects;
return run_command(&cmd);
}
@@ -846,14 +704,14 @@ static int get_octopus_merge_base(struct object_id *merge_base,
if (get_octopus_merge_bases(revs, &result) < 0)
exit(128);
- free_commit_list(revs);
+ commit_list_free(revs);
reduce_heads_replace(&result);
if (!result)
return 1;
oidcpy(merge_base, &result->item->object.oid);
- free_commit_list(result);
+ commit_list_free(result);
return 0;
}
@@ -945,7 +803,7 @@ static int get_can_ff(struct object_id *orig_head,
commit_list_insert(head, &list);
merge_head = lookup_commit_reference(the_repository, orig_merge_head);
ret = repo_is_descendant_of(the_repository, merge_head, list);
- free_commit_list(list);
+ commit_list_free(list);
if (ret < 0)
exit(128);
return ret;
@@ -970,7 +828,7 @@ static int already_up_to_date(struct object_id *orig_head,
theirs = lookup_commit_reference(the_repository, &merge_heads->oid[i]);
commit_list_insert(theirs, &list);
ok = repo_is_descendant_of(the_repository, ours, list);
- free_commit_list(list);
+ commit_list_free(list);
if (ok < 0)
exit(128);
if (!ok)
@@ -1008,6 +866,147 @@ int cmd_pull(int argc,
int can_ff;
int divergent;
int ret;
+ static struct option pull_options[] = {
+ /* Shared options */
+ OPT__VERBOSITY(&opt_verbosity),
+ OPT_PASSTHRU(0, "progress", &opt_progress, NULL,
+ N_("force progress reporting"),
+ PARSE_OPT_NOARG),
+ OPT_CALLBACK_F(0, "recurse-submodules",
+ &recurse_submodules_cli, N_("on-demand"),
+ N_("control for recursive fetching of submodules"),
+ PARSE_OPT_OPTARG, option_fetch_parse_recurse_submodules),
+
+ /* Options passed to git-merge or git-rebase */
+ OPT_GROUP(N_("Options related to merging")),
+ OPT_CALLBACK_F('r', "rebase", &opt_rebase,
+ "(false|true|merges|interactive)",
+ N_("incorporate changes by rebasing rather than merging"),
+ PARSE_OPT_OPTARG, parse_opt_rebase),
+ OPT_PASSTHRU('n', NULL, &opt_diffstat, NULL,
+ N_("do not show a diffstat at the end of the merge"),
+ PARSE_OPT_NOARG | PARSE_OPT_NONEG),
+ OPT_PASSTHRU(0, "stat", &opt_diffstat, NULL,
+ N_("show a diffstat at the end of the merge"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "summary", &opt_diffstat, NULL,
+ N_("(synonym to --stat)"),
+ PARSE_OPT_NOARG | PARSE_OPT_HIDDEN),
+ OPT_PASSTHRU(0, "compact-summary", &opt_diffstat, NULL,
+ N_("show a compact-summary at the end of the merge"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "log", &opt_log, N_("n"),
+ N_("add (at most <n>) entries from shortlog to merge commit message"),
+ PARSE_OPT_OPTARG),
+ OPT_PASSTHRU(0, "signoff", &opt_signoff, NULL,
+ N_("add a Signed-off-by trailer"),
+ PARSE_OPT_OPTARG),
+ OPT_PASSTHRU(0, "squash", &opt_squash, NULL,
+ N_("create a single commit instead of doing a merge"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "commit", &opt_commit, NULL,
+ N_("perform a commit if the merge succeeds (default)"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "edit", &opt_edit, NULL,
+ N_("edit message before committing"),
+ PARSE_OPT_NOARG),
+ OPT_CLEANUP(&cleanup_arg),
+ OPT_PASSTHRU(0, "ff", &opt_ff, NULL,
+ N_("allow fast-forward"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
+ N_("abort if fast-forward is not possible"),
+ PARSE_OPT_NOARG | PARSE_OPT_NONEG),
+ OPT_PASSTHRU(0, "verify", &opt_verify, NULL,
+ N_("control use of pre-merge-commit and commit-msg hooks"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
+ N_("verify that the named commit has a valid GPG signature"),
+ PARSE_OPT_NOARG),
+ OPT_BOOL(0, "autostash", &opt_autostash,
+ N_("automatically stash/stash pop before and after")),
+ OPT_PASSTHRU_ARGV('s', "strategy", &opt_strategies, N_("strategy"),
+ N_("merge strategy to use"),
+ 0),
+ OPT_PASSTHRU_ARGV('X', "strategy-option", &opt_strategy_opts,
+ N_("option=value"),
+ N_("option for selected merge strategy"),
+ 0),
+ OPT_PASSTHRU('S', "gpg-sign", &opt_gpg_sign, N_("key-id"),
+ N_("GPG sign commit"),
+ PARSE_OPT_OPTARG),
+ OPT_SET_INT(0, "allow-unrelated-histories",
+ &opt_allow_unrelated_histories,
+ N_("allow merging unrelated histories"), 1),
+
+ /* Options passed to git-fetch */
+ OPT_GROUP(N_("Options related to fetching")),
+ OPT_PASSTHRU(0, "all", &opt_all, NULL,
+ N_("fetch from all remotes"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU('a', "append", &opt_append, NULL,
+ N_("append to .git/FETCH_HEAD instead of overwriting"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "upload-pack", &opt_upload_pack, N_("path"),
+ N_("path to upload pack on remote end"),
+ 0),
+ OPT__FORCE(&opt_force, N_("force overwrite of local branch"), 0),
+ OPT_PASSTHRU('t', "tags", &opt_tags, NULL,
+ N_("fetch all tags and associated objects"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU('p', "prune", &opt_prune, NULL,
+ N_("prune remote-tracking branches no longer on remote"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU('j', "jobs", &max_children, N_("n"),
+ N_("number of submodules pulled in parallel"),
+ PARSE_OPT_OPTARG),
+ OPT_BOOL(0, "dry-run", &opt_dry_run,
+ N_("dry run")),
+ OPT_PASSTHRU('k', "keep", &opt_keep, NULL,
+ N_("keep downloaded pack"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "depth", &opt_depth, N_("depth"),
+ N_("deepen history of shallow clone"),
+ 0),
+ OPT_PASSTHRU_ARGV(0, "shallow-since", &opt_fetch, N_("time"),
+ N_("deepen history of shallow repository based on time"),
+ 0),
+ OPT_PASSTHRU_ARGV(0, "shallow-exclude", &opt_fetch, N_("ref"),
+ N_("deepen history of shallow clone, excluding ref"),
+ 0),
+ OPT_PASSTHRU_ARGV(0, "deepen", &opt_fetch, N_("n"),
+ N_("deepen history of shallow clone"),
+ 0),
+ OPT_PASSTHRU(0, "unshallow", &opt_unshallow, NULL,
+ N_("convert to a complete repository"),
+ PARSE_OPT_NONEG | PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "update-shallow", &opt_update_shallow, NULL,
+ N_("accept refs that update .git/shallow"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU(0, "refmap", &opt_refmap, N_("refmap"),
+ N_("specify fetch refmap"),
+ PARSE_OPT_NONEG),
+ OPT_PASSTHRU_ARGV('o', "server-option", &opt_fetch,
+ N_("server-specific"),
+ N_("option to transmit"),
+ 0),
+ OPT_PASSTHRU('4', "ipv4", &opt_ipv4, NULL,
+ N_("use IPv4 addresses only"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU('6', "ipv6", &opt_ipv6, NULL,
+ N_("use IPv6 addresses only"),
+ PARSE_OPT_NOARG),
+ OPT_PASSTHRU_ARGV(0, "negotiation-tip", &opt_fetch, N_("revision"),
+ N_("report that we have only objects reachable from this object"),
+ 0),
+ OPT_BOOL(0, "show-forced-updates", &opt_show_forced_updates,
+ N_("check for forced-updates on all updated branches")),
+ OPT_PASSTHRU(0, "set-upstream", &set_upstream, NULL,
+ N_("set upstream for git pull/fetch"),
+ PARSE_OPT_NOARG),
+
+ OPT_END()
+ };
if (!getenv("GIT_REFLOG_ACTION"))
set_reflog_message(argc, argv);