All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Ramkumar Ramachandra <artagnon@gmail.com>,
	Sverre Rabbelier <srabbelier@gmail.com>,
	Thore Husfeldt <thore.husfeldt@gmail.com>,
	git@vger.kernel.org, Scott Chacon <schacon@gmail.com>,
	Thomas Rast <trast@student.ethz.ch>
Subject: [PATCH 2/4] reset: accept "git reset <tree> <path>"
Date: Tue, 19 Oct 2010 17:12:44 -0500	[thread overview]
Message-ID: <20101019221244.GE32029@burratino> (raw)
In-Reply-To: <20101019221005.GC32029@burratino>

The <rev> argument in

	git reset --hard <rev>
	git reset --soft <rev>

needs to be a commit to be sensible.  But in

	git reset <rev> -- <path> <path> ...

using other trees can be useful.

For example, to apply changes from a branch that has the current
branch merged as a subtree:

	git reset master:gitk-git -- .

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 builtin/reset.c  |   11 ++++++-----
 t/t7102-reset.sh |   31 +++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/builtin/reset.c b/builtin/reset.c
index a52e6f8..2375472 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -306,15 +306,10 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
 	}
 
 	if (get_sha1(rev, sha1))
 		die("Failed to resolve '%s' as a valid ref.", rev);
 
-	commit = lookup_commit_reference(sha1);
-	if (!commit)
-		die("Could not parse object '%s'.", rev);
-	hashcpy(sha1, commit->object.sha1);
-
 	/* git reset tree [--] paths... can be used to
 	 * load chosen paths from the tree into the index without
 	 * affecting the working tree nor HEAD. */
 	if (i < argc) {
 		if (reset_type == MIXED)
@@ -323,10 +318,16 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
 			die("Cannot do %s reset with paths.",
 					reset_type_names[reset_type]);
 		return read_from_tree(prefix, argv + i, sha1,
 				quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN);
 	}
+
+	commit = lookup_commit_reference(sha1);
+	if (!commit)
+		die("Could not parse object '%s'.", rev);
+	hashcpy(sha1, commit->object.sha1);
+
 	if (reset_type == NONE)
 		reset_type = MIXED; /* by default */
 
 	if (reset_type != SOFT && reset_type != MIXED)
 		setup_work_tree();
diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh
index b8cf260..3e95da3 100755
--- a/t/t7102-reset.sh
+++ b/t/t7102-reset.sh
@@ -7,10 +7,18 @@ test_description='git reset
 
 Documented tests for git reset'
 
 . ./test-lib.sh
 
+test_exit_code () {
+	echo $1 >expect.code &&
+	shift &&
+	"$@"
+	echo $? >actual.code &&
+	test_cmp expect.code actual.code
+}
+
 test_expect_success 'creating initial files and commits' '
 	test_tick &&
 	echo "1st file" >first &&
 	git add first &&
 	git commit -m "create 1st file" &&
@@ -409,17 +417,40 @@ test_expect_success 'test resetting the index at give paths' '
 	test_must_fail git diff-index --cached --exit-code "$T" &&
 	test "$T" != "$U"
 
 '
 
+test_expect_success 'reset modified path from tree' '
+	echo hello >other &&
+	git reset --hard &&
+	git add other &&
+	T=$(git write-tree) &&
+	git rm -f other &&
+	test_exit_code 1 git reset $T other &&
+	git diff-index --cached --exit-code "$T"
+'
+
+test_expect_success 'try to reset from blob' '
+	git reset --hard &&
+	B=$(git rev-parse --verify HEAD:file1) &&
+	test_exit_code 128 git reset $B -- .
+'
+
 test_expect_success 'resetting an unmodified path is a no-op' '
 	git reset --hard &&
 	git reset -- file1 &&
 	git diff-files --exit-code &&
 	git diff-index --cached --exit-code HEAD
 '
 
+test_expect_success 'reset unmodified path from tree' '
+	git reset --hard &&
+	git reset HEAD^{tree} -- file1 &&
+	git diff-files --exit-code &&
+	git diff-index --cached --exit-code HEAD
+'
+
 cat > expect << EOF
 Unstaged changes after reset:
 M	file2
 EOF
 
-- 
1.7.2.3

  parent reply	other threads:[~2010-10-19 22:16 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   ` [RFC/PATCH] reset: accept "git reset <removed file>" Jonathan Nieder
2010-10-18 23:56     ` 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           ` Jonathan Nieder [this message]
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=20101019221244.GE32029@burratino \
    --to=jrnieder@gmail.com \
    --cc=artagnon@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=schacon@gmail.com \
    --cc=srabbelier@gmail.com \
    --cc=thore.husfeldt@gmail.com \
    --cc=trast@student.ethz.ch \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.