X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=builtin-reset.c;h=79424bb26efb4525b6bc2080e639b51d59eaabd9;hb=cde2ed25ad764260aaa08a9ed3fbd997723c6b76;hp=af0037ec6e3456ccd688da6375c76db4a59f099a;hpb=df4a824341f34b1d2d890ce3e9dd7f6df6475953;p=git.git diff --git a/builtin-reset.c b/builtin-reset.c index af0037ec6..79424bb26 100644 --- a/builtin-reset.c +++ b/builtin-reset.c @@ -17,9 +17,13 @@ #include "diffcore.h" #include "tree.h" #include "branch.h" +#include "parse-options.h" -static const char builtin_reset_usage[] = -"git-reset [--mixed | --soft | --hard] [-q] [] [ [--] ...]"; +static const char * const git_reset_usage[] = { + "git-reset [--mixed | --soft | --hard] [-q] []", + "git-reset [--mixed] [--] ...", + NULL +}; static char *args_to_str(const char **argv) { @@ -63,14 +67,10 @@ static int reset_index_file(const unsigned char *sha1, int is_hard_reset) static void print_new_head_line(struct commit *commit) { - const char *hex, *dots = "...", *body; + const char *hex, *body; hex = find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV); - if (!hex) { - hex = sha1_to_hex(commit->object.sha1); - dots = ""; - } - printf("HEAD is now at %s%s", hex, dots); + printf("HEAD is now at %s", hex); body = strstr(commit->buffer, "\n\n"); if (body) { const char *eol; @@ -169,40 +169,31 @@ static const char *reset_type_names[] = { "mixed", "soft", "hard", NULL }; int cmd_reset(int argc, const char **argv, const char *prefix) { - int i = 1, reset_type = NONE, update_ref_status = 0, quiet = 0; + int i = 0, reset_type = NONE, update_ref_status = 0, quiet = 0; const char *rev = "HEAD"; unsigned char sha1[20], *orig = NULL, sha1_orig[20], *old_orig = NULL, sha1_old_orig[20]; struct commit *commit; char *reflog_action, msg[1024]; + const struct option options[] = { + OPT_SET_INT(0, "mixed", &reset_type, + "reset HEAD and index", MIXED), + OPT_SET_INT(0, "soft", &reset_type, "reset only HEAD", SOFT), + OPT_SET_INT(0, "hard", &reset_type, + "reset HEAD, index and working tree", HARD), + OPT_BOOLEAN('q', NULL, &quiet, + "disable showing new HEAD in hard reset"), + OPT_END() + }; git_config(git_default_config); + argc = parse_options(argc, argv, options, git_reset_usage, + PARSE_OPT_KEEP_DASHDASH); reflog_action = args_to_str(argv); setenv("GIT_REFLOG_ACTION", reflog_action, 0); - while (i < argc) { - if (!strcmp(argv[i], "--mixed")) { - reset_type = MIXED; - i++; - } - else if (!strcmp(argv[i], "--soft")) { - reset_type = SOFT; - i++; - } - else if (!strcmp(argv[i], "--hard")) { - reset_type = HARD; - i++; - } - else if (!strcmp(argv[i], "-q")) { - quiet = 1; - i++; - } - else - break; - } - - if (i < argc && argv[i][0] != '-') + if (i < argc && strcmp(argv[i], "--")) rev = argv[i++]; if (get_sha1(rev, sha1)) @@ -215,8 +206,6 @@ int cmd_reset(int argc, const char **argv, const char *prefix) if (i < argc && !strcmp(argv[i], "--")) i++; - else if (i < argc && argv[i][0] == '-') - usage(builtin_reset_usage); /* git reset tree [--] paths... can be used to * load chosen paths from the tree into the index without