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

Re: [PATCHv2] replace: parse revision argument for -d

From
Jeff King <peff@peff.net>
Date
Nov 9, 2012, 16:48 UTC
Message-ID
<20121109164808.GE19725@sigill.intra.peff.net>
In-Reply-To
<24b0f81315ddab8cc37133d5b3bec8aec90ed652.1351516888.git.git@drmicha.warpmail.net>
On Mon, Oct 29, 2012 at 02:23:27PM +0100, Michael J Gruber wrote:
Show 10 quoted lines
> 'git replace' parses the revision arguments when it creates replacements
> (so that a sha1 can be abbreviated, e.g.) but not when deleting
> replacements.
> 
> Make it parse the arguments to 'replace -d' in the same way.
> 
> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> ---
> v2 has the simplified error check as per Jeff, and a reworded message.
> Comes with a free test case, too.

I noticed this today in my pile of "to look at" patches. Sorry for being slow.

Show 10 quoted lines
>  	for (p = argv; *p; p++) {
> -		if (snprintf(ref, sizeof(ref), "refs/replace/%s", *p)
> -					>= sizeof(ref)) {
> -			error("replace ref name too long: %.*s...", 50, *p);
> +		q = *p;
> +		if (get_sha1(q, sha1)) {
> +			error("Failed to resolve '%s' as a valid ref.", q);
>  			had_error = 1;
>  			continue;
>  		}
Looks reasonable.
Show 5 quoted lines
> +		q = sha1_to_hex(sha1);
> +		snprintf(ref, sizeof(ref), "refs/replace/%s", q);
>  		if (read_ref(ref, sha1)) {
> -			error("replace ref '%s' not found.", *p);
> +			error("replace ref '%s' not found.", q);

I worry a little about assuming that "q", which points to a static internal buffer of sha1_to_hex, is still valid after calling read_ref. We'll end up in resolve_ref, which might need to do considerable work (e.g., loading the whole packed refs file). Just grepping for sha1_to_hex, I don't think it is a problem currently, but it might be worth copying the value (you could even point into the "ref" buffer to avoid dealing with an extra allocation).

Other than that, it looks good to me.
-Peff
Previous: Michael J GruberNext: Michael J Gruber
Message 8 of 22 in “replace: parse revision argument for -d”
  1. replace: parse revision argument for -dMichael J Gruber, Oct 26, 2012
  2. Christian CouderOct 26, 2012
  3. Jeff KingOct 29, 2012
  4. Michael J GruberOct 29, 2012
  5. Jeff KingOct 29, 2012
  6. Michael J GruberOct 29, 2012
  7. [PATCHv2] replace: parse revision argument for -dMichael J Gruber, Oct 29, 2012
  8. Jeff KingNov 9, 2012
  9. Michael J GruberNov 12, 2012
  10. [PATCHv3] replace: parse revision argument for -dMichael J Gruber, Nov 12, 2012
  11. Jeff KingNov 12, 2012
  12. Michael J GruberNov 13, 2012
  13. [PATCHv4] replace: parse revision argument for -dMichael J Gruber, Nov 13, 2012
  14. Jeff KingNov 13, 2012
  15. Notes in format-patch (was: Re: [PATCHv3] replace: parse revision argument for -d)Michael J Gruber, Nov 13, 2012
  16. Jeff KingNov 13, 2012
  17. Junio C HamanoNov 13, 2012
  18. Junio C HamanoNov 13, 2012
  19. Junio C HamanoNov 13, 2012
  20. Junio C HamanoNov 13, 2012
  21. Michael J GruberNov 14, 2012
  22. Junio C HamanoNov 14, 2012

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.