git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3] cherry-pick: make sure all input objects are commits

From
Junio C Hamano <gitster@pobox.com>
Date
May 9, 2013, 20:27 UTC
Message-ID
<7vsj1v99ve.fsf@alter.siamese.dyndns.org>
In-Reply-To
<7vy5bo7x62.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 24 quoted lines
> Miklos Vajna <vmiklos@suse.cz> writes:
>
>> When a single argument was a non-commit, the error message used to be:
>>
>> 	fatal: BUG: expected exactly one commit from walk
>>
>> For multiple arguments, when none of the arguments was a commit, the error was:
>>
>> 	fatal: empty commit set passed
>>
>> Finally, when some of the arguments were non-commits, we ignored those
>> arguments.  Fix this bug and make sure all arguments are commits, and
>> for the first non-commit, error out with:
>>
>> 	fatal: <name>: Can't cherry-pick a <type>
>>
>> Signed-off-by: Miklos Vajna <vmiklos@suse.cz>
>
> This turns out to be an irritatingly stupid change.  While I am
> rebuilding a privately tagged tip of 'maint', I am seeing:
>
> 	fatal: v1.8.2.3: Can't cherry-pick a tag
>
> You would want to reject non committish, not non commit.

I'd apply this before -rc2. I _think_ it is also OK to just let lookup_commit_reference_gently() barf with its standard message

	error: Object %s is a %s, not a commit

without an extra sha1_object_info() call in the error codepath, but I did not bother, as this is meant to be an emergency fix.

-- >8 --
Subject: cherry-pick: picking a tag that resolves to a commit is OK

Earlier, 21246dbb9e0a (cherry-pick: make sure all input objects are commits, 2013-04-11) tried to catch an unlikely "git cherry-pick $blob" as an error, but broke a more important use case to cherry-pick a tag that points at a commit.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 sequencer.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sequencer.c b/sequencer.c
index 61fdb68..f2c9d98 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -1077,10 +1077,10 @@ int sequencer_pick_revisions(struct replay_opts *opts)
 			continue;
 
 		if (!get_sha1(name, sha1)) {
-			enum object_type type = sha1_object_info(sha1, NULL);
-
-			if (type > 0 && type != OBJ_COMMIT)
+			if (!lookup_commit_reference_gently(sha1, 1)) {
+				enum object_type type = sha1_object_info(sha1, NULL);
 				die(_("%s: can't cherry-pick a %s"), name, typename(type));
+			}
 		} else
 			die(_("%s: bad revision"), name);
 	}
Previous: Junio C HamanoNext: Miklos Vajna
Message 16 of 17 in “cherry-pick: better error message when the parameter is a non-commit”
  1. cherry-pick: better error message when the parameter is a non-commitMiklos Vajna, Apr 3, 2013
  2. Miklos VajnaApr 8, 2013
  3. Junio C HamanoApr 8, 2013
  4. Junio C HamanoApr 8, 2013
  5. cherry-pick: make sure all input objects are commitsMiklos Vajna, Apr 11, 2013
  6. Ramkumar RamachandraApr 11, 2013
  7. Miklos VajnaApr 11, 2013
  8. Ramkumar RamachandraApr 11, 2013
  9. cherry-pick: make sure all input objects are commitsMiklos Vajna, Apr 11, 2013
  10. Ramkumar RamachandraApr 11, 2013
  11. Thomas RastApr 15, 2013
  12. Junio C HamanoApr 15, 2013
  13. Junio C HamanoApr 15, 2013
  14. Michael HaggertyApr 16, 2013
  15. Junio C HamanoMay 9, 2013
  16. Junio C HamanoMay 9, 2013
  17. Miklos VajnaMay 10, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.