From: Jeff King Date: Mon, 29 Oct 2012 09:04:19 GMT Subject: Re: [PATCH] replace: parse revision argument for -d Message-ID: <20121029090419.GA29464@sigill.intra.peff.net> In-Reply-To: <508E4637.2060903@drmicha.warpmail.net> On Mon, Oct 29, 2012 at 10:02:47AM +0100, Michael J Gruber wrote: > Jeff King venit, vidit, dixit 29.10.2012 07:58: > > On Fri, Oct 26, 2012 at 03:33:27PM +0200, Michael J Gruber wrote: > > > >> for (p = argv; *p; p++) { > >> - if (snprintf(ref, sizeof(ref), "refs/replace/%s", *p) > >> + q = *p; > >> + if (get_sha1(q, sha1)) > >> + warning("Failed to resolve '%s' as a valid ref; taking it literally.", q); > >> + else > >> + q = sha1_to_hex(sha1); > > > > Doesn't get_sha1 already handle this for 40-byte sha1s (and for anything > > else, it would not work anyway)? > > What is "this"??? > > So far, "git replace -d " only accepts a full sha1, because it uses > it literally as a ref name "resf/replace/" without resolving anything. > > The patch makes it so that gets resolved to a sha1 even if it is > abbreviated, and then it gets used. > > Or do you mean the warning? Sorry, yeah, I meant the warning and fallback. If I understand correctly, the fallback will never work unless we are fed a 40-byte sha1. But get_sha1 should always return a 40-byte sha1 without doing any further processing. -Peff