Merge branch 'jc/maint-reset' into maint
* jc/maint-reset: Allow "git-reset path" when unambiguous
This commit is contained in:
commit
4df0d7af6b
@ -194,8 +194,40 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
reflog_action = args_to_str(argv);
|
reflog_action = args_to_str(argv);
|
||||||
setenv("GIT_REFLOG_ACTION", reflog_action, 0);
|
setenv("GIT_REFLOG_ACTION", reflog_action, 0);
|
||||||
|
|
||||||
if (i < argc && strcmp(argv[i], "--"))
|
/*
|
||||||
rev = argv[i++];
|
* Possible arguments are:
|
||||||
|
*
|
||||||
|
* git reset [-opts] <rev> <paths>...
|
||||||
|
* git reset [-opts] <rev> -- <paths>...
|
||||||
|
* git reset [-opts] -- <paths>...
|
||||||
|
* git reset [-opts] <paths>...
|
||||||
|
*
|
||||||
|
* At this point, argv[i] points immediately after [-opts].
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (i < argc) {
|
||||||
|
if (!strcmp(argv[i], "--")) {
|
||||||
|
i++; /* reset to HEAD, possibly with paths */
|
||||||
|
} else if (i + 1 < argc && !strcmp(argv[i+1], "--")) {
|
||||||
|
rev = argv[i];
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Otherwise, argv[i] could be either <rev> or <paths> and
|
||||||
|
* has to be unambigous.
|
||||||
|
*/
|
||||||
|
else if (!get_sha1(argv[i], sha1)) {
|
||||||
|
/*
|
||||||
|
* Ok, argv[i] looks like a rev; it should not
|
||||||
|
* be a filename.
|
||||||
|
*/
|
||||||
|
verify_non_filename(prefix, argv[i]);
|
||||||
|
rev = argv[i++];
|
||||||
|
} else {
|
||||||
|
/* Otherwise we treat this as a filename */
|
||||||
|
verify_filename(prefix, argv[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (get_sha1(rev, sha1))
|
if (get_sha1(rev, sha1))
|
||||||
die("Failed to resolve '%s' as a valid ref.", rev);
|
die("Failed to resolve '%s' as a valid ref.", rev);
|
||||||
@ -205,9 +237,6 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||||||
die("Could not parse object '%s'.", rev);
|
die("Could not parse object '%s'.", rev);
|
||||||
hashcpy(sha1, commit->object.sha1);
|
hashcpy(sha1, commit->object.sha1);
|
||||||
|
|
||||||
if (i < argc && !strcmp(argv[i], "--"))
|
|
||||||
i++;
|
|
||||||
|
|
||||||
/* git reset tree [--] paths... can be used to
|
/* git reset tree [--] paths... can be used to
|
||||||
* load chosen paths from the tree into the index without
|
* load chosen paths from the tree into the index without
|
||||||
* affecting the working tree nor HEAD. */
|
* affecting the working tree nor HEAD. */
|
||||||
|
@ -428,4 +428,51 @@ test_expect_success '--mixed refreshes the index' '
|
|||||||
test_cmp expect output
|
test_cmp expect output
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'disambiguation (1)' '
|
||||||
|
|
||||||
|
git reset --hard &&
|
||||||
|
>secondfile &&
|
||||||
|
git add secondfile &&
|
||||||
|
test_must_fail git reset secondfile &&
|
||||||
|
test -z "$(git diff --cached --name-only)" &&
|
||||||
|
test -f secondfile &&
|
||||||
|
test ! -s secondfile
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'disambiguation (2)' '
|
||||||
|
|
||||||
|
git reset --hard &&
|
||||||
|
>secondfile &&
|
||||||
|
git add secondfile &&
|
||||||
|
rm -f secondfile &&
|
||||||
|
test_must_fail git reset secondfile &&
|
||||||
|
test -n "$(git diff --cached --name-only -- secondfile)" &&
|
||||||
|
test ! -f secondfile
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'disambiguation (3)' '
|
||||||
|
|
||||||
|
git reset --hard &&
|
||||||
|
>secondfile &&
|
||||||
|
git add secondfile &&
|
||||||
|
rm -f secondfile &&
|
||||||
|
test_must_fail git reset HEAD secondfile &&
|
||||||
|
test -z "$(git diff --cached --name-only)" &&
|
||||||
|
test ! -f secondfile
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'disambiguation (4)' '
|
||||||
|
|
||||||
|
git reset --hard &&
|
||||||
|
>secondfile &&
|
||||||
|
git add secondfile &&
|
||||||
|
rm -f secondfile &&
|
||||||
|
test_must_fail git reset -- secondfile &&
|
||||||
|
test -z "$(git diff --cached --name-only)" &&
|
||||||
|
test ! -f secondfile
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user