From: Jonathan Nieder <jrnieder@gmail.com>
To: Thore Husfeldt <thore.husfeldt@gmail.com>
Cc: git@vger.kernel.org, Scott Chacon <schacon@gmail.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>,
Junio C Hamano <gitster@pobox.com>,
Jakub Narebski <jnareb@gmail.com>,
Sverre Rabbelier <srabbelier@gmail.com>
Subject: [RFC/PATCH] reset: accept "git reset <removed file>"
Date: Mon, 18 Oct 2010 17:48:40 -0500 [thread overview]
Message-ID: <20101018224840.GA9729@burratino> (raw)
In-Reply-To: <20101018211522.GA7655@burratino>
Suppose I try to use "git reset" to un-add an new, unwanted file:
echo hello >foo.c
git add foo.c
rm foo.c; # bad file! bad!
git reset foo.c
The file foo.c does not exist on disk, so "git reset" rejects the
request with
fatal: ambiguous argument 'foo.c': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Git can do better: since foo.c is not a revision and has an entry in
the index, it is clear the request refers to a path and not a rev.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
Jonathan Nieder wrote:
> Ah, this is a kind of obnoxious thing! For a newly added file,
>
> git reset -- <path>
>
> ought to un-add it, but it doesn't.
Err, yes it does. Probably I was thinking of
rm <path>
git reset <path>
producing an "ambiguous argument" message.
builtin/reset.c | 8 +++++++-
t/t7102-reset.sh | 34 ++++++++++++++++++++++++++++++++--
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/builtin/reset.c b/builtin/reset.c
index 0037be4..7d23d75 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -295,7 +295,13 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
rev = argv[i++];
} else {
/* Otherwise we treat this as a filename */
- verify_filename(prefix, argv[i]);
+ const char *name = argv[i];
+ if (prefix)
+ name = prefix_filename(prefix, strlen(prefix), name);
+ if (read_cache() < 0)
+ die("Could not read index");
+ if (cache_name_pos(name, strlen(name)) < 0)
+ verify_filename(prefix, argv[i]);
}
}
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index b8cf260..69d125e 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -5,7 +5,7 @@
test_description='git reset
-Documented tests for git reset'
+Miscellaneous tests for git reset'
. ./test-lib.sh
@@ -441,6 +441,15 @@ test_expect_success 'disambiguation (1)' '
'
+test_expect_success "disambiguation (1')" '
+
+ git reset --hard &&
+ git reset secondfile &&
+ git diff --exit-code &&
+ git diff --cached --exit-code
+
+'
+
test_expect_success 'disambiguation (2)' '
git reset --hard &&
@@ -448,11 +457,18 @@ test_expect_success 'disambiguation (2)' '
git add secondfile &&
rm -f secondfile &&
test_must_fail git reset secondfile &&
- test -n "$(git diff --cached --name-only -- secondfile)" &&
+ test -z "$(git diff --cached --name-only)" &&
test ! -f secondfile
'
+test_expect_success "disambiguation (2')" '
+
+ git reset --hard &&
+ test_must_fail git reset doesnotexist
+
+'
+
test_expect_success 'disambiguation (3)' '
git reset --hard &&
@@ -465,6 +481,13 @@ test_expect_success 'disambiguation (3)' '
'
+test_expect_success "disambiguation (3')" '
+
+ git reset --hard &&
+ git reset HEAD doesnotexist
+
+'
+
test_expect_success 'disambiguation (4)' '
git reset --hard &&
@@ -476,4 +499,11 @@ test_expect_success 'disambiguation (4)' '
test ! -f secondfile
'
+test_expect_success "disambiguation (4')" '
+
+ git reset --hard &&
+ git reset -- doesnotexist
+
+'
+
test_done
--
1.7.2.3
next prev parent reply other threads:[~2010-10-18 22:52 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-18 20:45 Git terminology: remote, add, track, stage, etc Thore Husfeldt
2010-10-18 21:15 ` Jonathan Nieder
2010-10-18 22:48 ` Jonathan Nieder [this message]
2010-10-18 23:56 ` [RFC/PATCH] reset: accept "git reset <removed file>" Junio C Hamano
2010-10-19 0:23 ` Jonathan Nieder
2010-10-19 17:34 ` Junio C Hamano
2010-10-19 22:34 ` Jonathan Nieder
2010-10-18 21:35 ` Git terminology: remote, add, track, stage, etc Sverre Rabbelier
2010-10-19 0:03 ` Junio C Hamano
2010-10-19 17:51 ` Ramkumar Ramachandra
2010-10-19 18:28 ` Jonathan Nieder
2010-10-19 18:34 ` Sverre Rabbelier
2010-10-19 18:43 ` Thore Husfeldt
2010-10-19 19:04 ` User manual: "You cannot check out these remote-tracking branches" Jonathan Nieder
2010-10-19 20:52 ` Matthieu Moy
2010-10-19 19:15 ` Git terminology: remote, add, track, stage, etc Nicolas Pitre
2010-10-19 19:20 ` Junio C Hamano
2010-10-19 22:10 ` [RFC/PATCH 0/4] reset: be more flexible about <rev> Jonathan Nieder
2010-10-19 22:11 ` [WIP/PATCH 1/4] reset -p: accept "git reset -p <tree>" Jonathan Nieder
2010-10-19 22:12 ` [PATCH 2/4] reset: accept "git reset <tree> <path>" Jonathan Nieder
2010-10-19 22:13 ` [PATCH 3/4] reset: accept "git reset -- <path>" from unborn branch Jonathan Nieder
2010-10-19 22:14 ` [PATCH 4/4] reset: accept "git reset HEAD " Jonathan Nieder
2010-10-19 23:08 ` Junio C Hamano
2010-10-19 23:26 ` Jonathan Nieder
2010-10-27 15:03 ` Git terminology: remote, add, track, stage, etc Ramkumar Ramachandra
2010-10-27 15:16 ` Drew Northup
2010-10-27 16:08 ` Matthieu Moy
2010-10-28 15:20 ` Ramkumar Ramachandra
2010-10-28 18:25 ` Matthieu Moy
2010-10-18 21:41 ` Matthieu Moy
2010-10-19 4:49 ` Miles Bader
2010-10-19 7:19 ` Wincent Colaiuta
2010-10-19 7:48 ` Miles Bader
2010-10-19 8:05 ` Wincent Colaiuta
2010-10-19 15:09 ` Eugene Sajine
2010-10-22 20:16 ` Paul Bolle
2010-10-22 21:00 ` Eugene Sajine
2010-10-22 21:46 ` Drew Northup
2010-10-20 9:53 ` Thore Husfeldt
2010-10-20 11:34 ` Matthieu Moy
2010-10-20 14:01 ` Drew Northup
2010-10-18 21:57 ` Jakub Narebski
2010-10-19 8:05 ` Matthijs Kooijman
2010-10-19 8:27 ` Jakub Narebski
2010-10-19 17:30 ` Thore Husfeldt
2010-10-19 20:57 ` Jakub Narebski
2010-10-21 8:44 ` Michael Haggerty
2010-10-21 11:20 ` Drew Northup
2010-10-21 12:31 ` Thore Husfeldt
2010-10-21 12:56 ` Drew Northup
2010-10-21 14:06 ` Thore Husfeldt
2010-10-21 20:06 ` Drew Northup
2010-10-22 4:07 ` Miles Bader
2010-10-22 11:51 ` Drew Northup
2010-10-19 14:39 ` [PATCH v3] Porcelain scripts: Rewrite cryptic "needs update" error message Ramkumar Ramachandra
2010-10-27 14:55 ` Ramkumar Ramachandra
2010-11-05 22:38 ` Junio C Hamano
2011-02-12 23:14 ` Ævar Arnfjörð Bjarmason
2010-10-19 21:53 ` Git terminology: remote, add, track, stage, etc Drew Northup
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101018224840.GA9729@burratino \
--to=jrnieder@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=schacon@gmail.com \
--cc=srabbelier@gmail.com \
--cc=thore.husfeldt@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).