reset.c: finish entire cmd_reset() whether or not pathspec is given
By not returning from inside the "if (pathspec)" block, we can let the pathspec-aware and pathspec-less code share a bit more, making it easier to make future changes that should affect both cases. This also highlights the similarity between read_from_tree() and reset_index(). Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
bc41bf422e
commit
3bbf2f20f6
@ -309,19 +309,6 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
die(_("%s reset is not allowed in a bare repository"),
|
die(_("%s reset is not allowed in a bare repository"),
|
||||||
_(reset_type_names[reset_type]));
|
_(reset_type_names[reset_type]));
|
||||||
|
|
||||||
if (pathspec) {
|
|
||||||
struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
|
|
||||||
int index_fd = hold_locked_index(lock, 1);
|
|
||||||
if (read_from_tree(pathspec, sha1))
|
|
||||||
return 1;
|
|
||||||
update_index_refresh(
|
|
||||||
quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN);
|
|
||||||
if (write_cache(index_fd, active_cache, active_nr) ||
|
|
||||||
commit_locked_index(lock))
|
|
||||||
return error("Could not write new index file.");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Soft reset does not touch the index file nor the working tree
|
/* Soft reset does not touch the index file nor the working tree
|
||||||
* at all, but requires them in a good order. Other resets reset
|
* at all, but requires them in a good order. Other resets reset
|
||||||
* the index file to the tree object we are switching to. */
|
* the index file to the tree object we are switching to. */
|
||||||
@ -331,11 +318,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
if (reset_type != SOFT) {
|
if (reset_type != SOFT) {
|
||||||
struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
|
struct lock_file *lock = xcalloc(1, sizeof(struct lock_file));
|
||||||
int newfd = hold_locked_index(lock, 1);
|
int newfd = hold_locked_index(lock, 1);
|
||||||
|
if (pathspec) {
|
||||||
|
if (read_from_tree(pathspec, sha1))
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
int err = reset_index(sha1, reset_type, quiet);
|
int err = reset_index(sha1, reset_type, quiet);
|
||||||
if (reset_type == KEEP && !err)
|
if (reset_type == KEEP && !err)
|
||||||
err = reset_index(sha1, MIXED, quiet);
|
err = reset_index(sha1, MIXED, quiet);
|
||||||
if (err)
|
if (err)
|
||||||
die(_("Could not reset index file to revision '%s'."), rev);
|
die(_("Could not reset index file to revision '%s'."), rev);
|
||||||
|
}
|
||||||
|
|
||||||
if (reset_type == MIXED) /* Report what has not been updated. */
|
if (reset_type == MIXED) /* Report what has not been updated. */
|
||||||
update_index_refresh(
|
update_index_refresh(
|
||||||
@ -346,14 +338,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
die(_("Could not write new index file."));
|
die(_("Could not write new index file."));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Any resets update HEAD to the head being switched to,
|
if (!pathspec) {
|
||||||
* saving the previous head in ORIG_HEAD before. */
|
/* Any resets without paths update HEAD to the head being
|
||||||
|
* switched to, saving the previous head in ORIG_HEAD before. */
|
||||||
update_ref_status = update_refs(rev, sha1);
|
update_ref_status = update_refs(rev, sha1);
|
||||||
|
|
||||||
if (reset_type == HARD && !update_ref_status && !quiet)
|
if (reset_type == HARD && !update_ref_status && !quiet)
|
||||||
print_new_head_line(commit);
|
print_new_head_line(commit);
|
||||||
|
|
||||||
remove_branch_state();
|
remove_branch_state();
|
||||||
|
}
|
||||||
|
|
||||||
return update_ref_status;
|
return update_ref_status;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user