git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Michael J Gruber <git@drmicha.warpmail.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCHv2] replace: parse revision argument for -d
Date: Fri, 9 Nov 2012 11:48:08 -0500	[thread overview]
Message-ID: <20121109164808.GE19725@sigill.intra.peff.net> (raw)
In-Reply-To: <24b0f81315ddab8cc37133d5b3bec8aec90ed652.1351516888.git.git@drmicha.warpmail.net>

On Mon, Oct 29, 2012 at 02:23:27PM +0100, Michael J Gruber wrote:

> '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.

>  	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.

> +		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

  reply	other threads:[~2012-11-09 16:48 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-26 13:33 [PATCH] replace: parse revision argument for -d Michael J Gruber
2012-10-26 15:25 ` Christian Couder
2012-10-29  6:58 ` Jeff King
2012-10-29  9:02   ` Michael J Gruber
2012-10-29  9:04     ` Jeff King
2012-10-29 10:08       ` Michael J Gruber
2012-10-29 13:23         ` [PATCHv2] " Michael J Gruber
2012-11-09 16:48           ` Jeff King [this message]
2012-11-12  8:51             ` Michael J Gruber
2012-11-12 14:18               ` [PATCHv3] " Michael J Gruber
2012-11-12 20:42                 ` Jeff King
2012-11-13 10:25                   ` Michael J Gruber
2012-11-13 10:34                     ` [PATCHv4] " Michael J Gruber
2012-11-13 13:37                       ` Jeff King
2012-11-13 10:30                 ` Notes in format-patch (was: Re: [PATCHv3] replace: parse revision argument for -d) Michael J Gruber
2012-11-13 13:38                   ` Jeff King
2012-11-13 16:29                   ` Notes in format-patch Junio C Hamano
2012-11-13 16:56                     ` Junio C Hamano
2012-11-13 17:26                       ` Junio C Hamano
2012-11-13 18:09                         ` Junio C Hamano
2012-11-14  9:17                           ` Michael J Gruber
2012-11-14 13:15                             ` Junio C Hamano

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121109164808.GE19725@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@drmicha.warpmail.net \
    --cc=git@vger.kernel.org \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).