Browse Source

reset_head(): remove action parameter

The only use of the action parameter is to setup the error messages
for unpack_trees(). All but two cases pass either "checkout" or
"reset". The case that passes "reset --hard" would be better passing
"reset" so that the error messages match the builtin reset command
like all the other callers that are doing a reset. The case that
passes "Fast-forwarded" is only updating HEAD and so the parameter is
unused in that case as it does not call unpack_trees(). The value to
pass to setup_unpack_trees_porcelain() can be determined by checking
whether flags contains RESET_HEAD_HARD without the caller having to
specify it.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Phillip Wood 3 years ago committed by Junio C Hamano
parent
commit
1946d45844
  1. 14
      builtin/rebase.c
  2. 5
      reset.c
  3. 2
      reset.h
  4. 3
      sequencer.c

14
builtin/rebase.c

@ -583,7 +583,7 @@ static int move_to_original_branch(struct rebase_options *opts)
opts->head_name, oid_to_hex(&opts->onto->object.oid)); opts->head_name, oid_to_hex(&opts->onto->object.oid));
strbuf_addf(&head_reflog, "rebase finished: returning to %s", strbuf_addf(&head_reflog, "rebase finished: returning to %s",
opts->head_name); opts->head_name);
ret = reset_head(the_repository, NULL, "", opts->head_name, ret = reset_head(the_repository, NULL, opts->head_name,
RESET_HEAD_REFS_ONLY, RESET_HEAD_REFS_ONLY,
orig_head_reflog.buf, head_reflog.buf, orig_head_reflog.buf, head_reflog.buf,
DEFAULT_REFLOG_ACTION); DEFAULT_REFLOG_ACTION);
@ -674,7 +674,7 @@ static int run_am(struct rebase_options *opts)
free(rebased_patches); free(rebased_patches);
strvec_clear(&am.args); strvec_clear(&am.args);


reset_head(the_repository, &opts->orig_head, "checkout", reset_head(the_repository, &opts->orig_head,
opts->head_name, 0, opts->head_name, 0,
"HEAD", NULL, DEFAULT_REFLOG_ACTION); "HEAD", NULL, DEFAULT_REFLOG_ACTION);
error(_("\ngit encountered an error while preparing the " error(_("\ngit encountered an error while preparing the "
@ -820,7 +820,7 @@ static int checkout_up_to_date(struct rebase_options *options)
strbuf_addf(&buf, "%s: checkout %s", strbuf_addf(&buf, "%s: checkout %s",
getenv(GIT_REFLOG_ACTION_ENVIRONMENT), getenv(GIT_REFLOG_ACTION_ENVIRONMENT),
options->switch_to); options->switch_to);
if (reset_head(the_repository, &options->orig_head, "checkout", if (reset_head(the_repository, &options->orig_head,
options->head_name, RESET_HEAD_RUN_POST_CHECKOUT_HOOK, options->head_name, RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
NULL, buf.buf, DEFAULT_REFLOG_ACTION) < 0) NULL, buf.buf, DEFAULT_REFLOG_ACTION) < 0)
ret = error(_("could not switch to %s"), options->switch_to); ret = error(_("could not switch to %s"), options->switch_to);
@ -1272,7 +1272,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
rerere_clear(the_repository, &merge_rr); rerere_clear(the_repository, &merge_rr);
string_list_clear(&merge_rr, 1); string_list_clear(&merge_rr, 1);


if (reset_head(the_repository, NULL, "reset", NULL, RESET_HEAD_HARD, if (reset_head(the_repository, NULL, NULL, RESET_HEAD_HARD,
NULL, NULL, DEFAULT_REFLOG_ACTION) < 0) NULL, NULL, DEFAULT_REFLOG_ACTION) < 0)
die(_("could not discard worktree changes")); die(_("could not discard worktree changes"));
remove_branch_state(the_repository, 0); remove_branch_state(the_repository, 0);
@ -1290,7 +1290,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)


if (read_basic_state(&options)) if (read_basic_state(&options))
exit(1); exit(1);
if (reset_head(the_repository, &options.orig_head, "reset", if (reset_head(the_repository, &options.orig_head,
options.head_name, RESET_HEAD_HARD, options.head_name, RESET_HEAD_HARD,
NULL, NULL, DEFAULT_REFLOG_ACTION) < 0) NULL, NULL, DEFAULT_REFLOG_ACTION) < 0)
die(_("could not move back to %s"), die(_("could not move back to %s"),
@ -1759,7 +1759,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)


strbuf_addf(&msg, "%s: checkout %s", strbuf_addf(&msg, "%s: checkout %s",
getenv(GIT_REFLOG_ACTION_ENVIRONMENT), options.onto_name); getenv(GIT_REFLOG_ACTION_ENVIRONMENT), options.onto_name);
if (reset_head(the_repository, &options.onto->object.oid, "checkout", NULL, if (reset_head(the_repository, &options.onto->object.oid, NULL,
RESET_HEAD_DETACH | RESET_ORIG_HEAD | RESET_HEAD_DETACH | RESET_ORIG_HEAD |
RESET_HEAD_RUN_POST_CHECKOUT_HOOK, RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
NULL, msg.buf, DEFAULT_REFLOG_ACTION)) NULL, msg.buf, DEFAULT_REFLOG_ACTION))
@ -1777,7 +1777,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
strbuf_addf(&msg, "rebase finished: %s onto %s", strbuf_addf(&msg, "rebase finished: %s onto %s",
options.head_name ? options.head_name : "detached HEAD", options.head_name ? options.head_name : "detached HEAD",
oid_to_hex(&options.onto->object.oid)); oid_to_hex(&options.onto->object.oid));
reset_head(the_repository, NULL, "Fast-forwarded", options.head_name, reset_head(the_repository, NULL, options.head_name,
RESET_HEAD_REFS_ONLY, "HEAD", msg.buf, RESET_HEAD_REFS_ONLY, "HEAD", msg.buf,
DEFAULT_REFLOG_ACTION); DEFAULT_REFLOG_ACTION);
strbuf_release(&msg); strbuf_release(&msg);

5
reset.c

@ -8,7 +8,7 @@
#include "tree.h" #include "tree.h"
#include "unpack-trees.h" #include "unpack-trees.h"


int reset_head(struct repository *r, struct object_id *oid, const char *action, int reset_head(struct repository *r, struct object_id *oid,
const char *switch_to_branch, unsigned flags, const char *switch_to_branch, unsigned flags,
const char *reflog_orig_head, const char *reflog_head, const char *reflog_orig_head, const char *reflog_head,
const char *default_reflog_action) const char *default_reflog_action)
@ -23,7 +23,7 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
struct lock_file lock = LOCK_INIT; struct lock_file lock = LOCK_INIT;
struct unpack_trees_options unpack_tree_opts = { 0 }; struct unpack_trees_options unpack_tree_opts = { 0 };
struct tree *tree; struct tree *tree;
const char *reflog_action; const char *action, *reflog_action;
struct strbuf msg = STRBUF_INIT; struct strbuf msg = STRBUF_INIT;
size_t prefix_len; size_t prefix_len;
struct object_id *old_orig = NULL, oid_old_orig; struct object_id *old_orig = NULL, oid_old_orig;
@ -50,6 +50,7 @@ int reset_head(struct repository *r, struct object_id *oid, const char *action,
if (refs_only) if (refs_only)
goto reset_head_refs; goto reset_head_refs;


action = reset_hard ? "reset" : "checkout";
setup_unpack_trees_porcelain(&unpack_tree_opts, action); setup_unpack_trees_porcelain(&unpack_tree_opts, action);
unpack_tree_opts.head_idx = 1; unpack_tree_opts.head_idx = 1;
unpack_tree_opts.src_index = r->index; unpack_tree_opts.src_index = r->index;

2
reset.h

@ -12,7 +12,7 @@
#define RESET_HEAD_REFS_ONLY (1<<3) #define RESET_HEAD_REFS_ONLY (1<<3)
#define RESET_ORIG_HEAD (1<<4) #define RESET_ORIG_HEAD (1<<4)


int reset_head(struct repository *r, struct object_id *oid, const char *action, int reset_head(struct repository *r, struct object_id *oid,
const char *switch_to_branch, unsigned flags, const char *switch_to_branch, unsigned flags,
const char *reflog_orig_head, const char *reflog_head, const char *reflog_orig_head, const char *reflog_head,
const char *default_reflog_action); const char *default_reflog_action);

3
sequencer.c

@ -4137,8 +4137,7 @@ void create_autostash(struct repository *r, const char *path,
path); path);
write_file(path, "%s", oid_to_hex(&oid)); write_file(path, "%s", oid_to_hex(&oid));
printf(_("Created autostash: %s\n"), buf.buf); printf(_("Created autostash: %s\n"), buf.buf);
if (reset_head(r, NULL, "reset --hard", if (reset_head(r, NULL, NULL, RESET_HEAD_HARD, NULL, NULL,
NULL, RESET_HEAD_HARD, NULL, NULL,
default_reflog_action) < 0) default_reflog_action) < 0)
die(_("could not reset --hard")); die(_("could not reset --hard"));



Loading…
Cancel
Save