reset.c: extract function for updating {ORIG_,}HEAD
By extracting the code for updating the HEAD and ORIG_HEAD symbolic references to a separate function, we declutter cmd_reset() a bit and we make it clear that e.g. the four variables {,sha1_}{,old_}orig are only used by this code. Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
dca48cf520
commit
7bca0e451b
@ -240,16 +240,35 @@ static const char **parse_args(const char **argv, const char *prefix, const char
|
|||||||
return argv[0] ? get_pathspec(prefix, argv) : NULL;
|
return argv[0] ? get_pathspec(prefix, argv) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int update_refs(const char *rev, const unsigned char *sha1)
|
||||||
|
{
|
||||||
|
int update_ref_status;
|
||||||
|
struct strbuf msg = STRBUF_INIT;
|
||||||
|
unsigned char *orig = NULL, sha1_orig[20],
|
||||||
|
*old_orig = NULL, sha1_old_orig[20];
|
||||||
|
|
||||||
|
if (!get_sha1("ORIG_HEAD", sha1_old_orig))
|
||||||
|
old_orig = sha1_old_orig;
|
||||||
|
if (!get_sha1("HEAD", sha1_orig)) {
|
||||||
|
orig = sha1_orig;
|
||||||
|
set_reflog_message(&msg, "updating ORIG_HEAD", NULL);
|
||||||
|
update_ref(msg.buf, "ORIG_HEAD", orig, old_orig, 0, MSG_ON_ERR);
|
||||||
|
} else if (old_orig)
|
||||||
|
delete_ref("ORIG_HEAD", old_orig, 0);
|
||||||
|
set_reflog_message(&msg, "updating HEAD", rev);
|
||||||
|
update_ref_status = update_ref(msg.buf, "HEAD", sha1, orig, 0, MSG_ON_ERR);
|
||||||
|
strbuf_release(&msg);
|
||||||
|
return update_ref_status;
|
||||||
|
}
|
||||||
|
|
||||||
int cmd_reset(int argc, const char **argv, const char *prefix)
|
int cmd_reset(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
int reset_type = NONE, update_ref_status = 0, quiet = 0;
|
int reset_type = NONE, update_ref_status = 0, quiet = 0;
|
||||||
int patch_mode = 0;
|
int patch_mode = 0;
|
||||||
const char *rev;
|
const char *rev;
|
||||||
unsigned char sha1[20], *orig = NULL, sha1_orig[20],
|
unsigned char sha1[20];
|
||||||
*old_orig = NULL, sha1_old_orig[20];
|
|
||||||
const char **pathspec = NULL;
|
const char **pathspec = NULL;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
struct strbuf msg = STRBUF_INIT;
|
|
||||||
const struct option options[] = {
|
const struct option options[] = {
|
||||||
OPT__QUIET(&quiet, N_("be quiet, only report errors")),
|
OPT__QUIET(&quiet, N_("be quiet, only report errors")),
|
||||||
OPT_SET_INT(0, "mixed", &reset_type,
|
OPT_SET_INT(0, "mixed", &reset_type,
|
||||||
@ -333,17 +352,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
/* Any resets update HEAD to the head being switched to,
|
/* Any resets update HEAD to the head being switched to,
|
||||||
* saving the previous head in ORIG_HEAD before. */
|
* saving the previous head in ORIG_HEAD before. */
|
||||||
if (!get_sha1("ORIG_HEAD", sha1_old_orig))
|
update_ref_status = update_refs(rev, sha1);
|
||||||
old_orig = sha1_old_orig;
|
|
||||||
if (!get_sha1("HEAD", sha1_orig)) {
|
|
||||||
orig = sha1_orig;
|
|
||||||
set_reflog_message(&msg, "updating ORIG_HEAD", NULL);
|
|
||||||
update_ref(msg.buf, "ORIG_HEAD", orig, old_orig, 0, MSG_ON_ERR);
|
|
||||||
}
|
|
||||||
else if (old_orig)
|
|
||||||
delete_ref("ORIG_HEAD", old_orig, 0);
|
|
||||||
set_reflog_message(&msg, "updating HEAD", rev);
|
|
||||||
update_ref_status = update_ref(msg.buf, "HEAD", sha1, orig, 0, MSG_ON_ERR);
|
|
||||||
|
|
||||||
switch (reset_type) {
|
switch (reset_type) {
|
||||||
case HARD:
|
case HARD:
|
||||||
@ -360,7 +369,5 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
remove_branch_state();
|
remove_branch_state();
|
||||||
|
|
||||||
strbuf_release(&msg);
|
|
||||||
|
|
||||||
return update_ref_status;
|
return update_ref_status;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user