From: Christian Couder <chriscool@tuxfamily.org>
To: peff@peff.net
Cc: gitster@pobox.com, git@vger.kernel.org, mhagger@alum.mit.edu
Subject: Re: [PATCH v1 1/3] replace: add --graft option
Date: Sun, 01 Jun 2014 18:06:26 +0200 (CEST) [thread overview]
Message-ID: <20140601.180626.1114637687965252195.chriscool@tuxfamily.org> (raw)
In-Reply-To: <20140523195153.GB19088@sigill.intra.peff.net>
From: Jeff King <peff@peff.net>
> On Thu, May 22, 2014 at 11:33:04PM +0200, Christian Couder wrote:
>
>> The usage string for this option is:
>>
>> git replace [-f] --graft <commit> [<parent>...]
>>
>> First we create a new commit that is the same as <commit>
>> except that its parents are [<parents>...]
>>
>> Then we create a replace ref that replace <commit> with
>> the commit we just created.
>>
>> With this new option, it should be straightforward to
>> convert grafts to replace refs, with something like:
>>
>> cat .git/info/grafts | while read line
>> do git replace --graft $line; done
>
> I think this script at the end should end up in the documentation or a
> contrib script (probably the former, as it is short enough that somebody
> might just cut-and-paste).
>
> The graft file ignores comments and blank lines, so maybe "grep '^[^#]'"
> would be in order.
>
> And maybe it's just me, but I think spacing it like:
>
> grep '^[^#]' .git/info/grafts |
> while read line; do
> git replace --graft $line
> done
>
> is more readable (I think some would even argue for putting the "do" on
> a separate line).
Thanks, I used something like that in the contrib script.
>> + /* make sure the commit is not corrupt */
>> + if (parse_commit_buffer(commit, buf.buf, buf.len))
>> + die(_("Could not parse commit: '%s'"), old_ref);
>
> I guess the checks here are sufficient to make...
>
>> + /* find existing parents */
>> + parent_start = buf.buf;
>> + parent_start += 46; /* "tree " + "hex sha1" + "\n" */
>> + parent_end = parent_start;
>> +
>> + while (starts_with(parent_end, "parent "))
>> + parent_end += 48; /* "parent " + "hex sha1" + "\n" */
>
> ...this number-based parsing safe, though it would miss removing a stray
> parent line elsewhere in the commit.
Yeah, but I don't think that it is a problem.
Those parent lines are not standard in the first place, because they
are not parsed by parse_commit_buffer(). And I don't think this option
should mess with non standard stuff.
> It still feels rather magical to
> me, as we are depending on unspoken format guarantees defined inside
> parse_commit_buffer.
My opinion is that we are depending on the standard way to parse
headers, and that's good. I think it would be "black magic" to mess
with non standard stuff.
> I'd prefer something like the line-based parser I
> showed in the other thread, but I suppose it may just be a matter of
> preference.
Yeah probably.
Thanks,
Christian.
next prev parent reply other threads:[~2014-06-01 16:06 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-22 21:33 [PATCH v1 0/3] Add --graft option to git replace Christian Couder
2014-05-22 21:33 ` [PATCH v1 1/3] replace: add --graft option Christian Couder
2014-05-23 19:27 ` Junio C Hamano
2014-05-23 19:51 ` Jeff King
2014-05-23 20:05 ` Junio C Hamano
2014-05-23 20:28 ` Jeff King
2014-05-23 21:22 ` Junio C Hamano
2014-05-23 22:59 ` Eric Sunshine
2014-06-01 16:06 ` Christian Couder [this message]
2014-05-22 21:33 ` [PATCH v1 2/3] replace: add test for --graft Christian Couder
2014-05-22 21:33 ` [PATCH v1 3/3] Documentation: replace: add --graft option Christian Couder
2014-05-23 17:06 ` Jakub Narębski
2014-05-23 18:26 ` Junio C Hamano
2014-05-23 16:59 ` [PATCH v1 0/3] Add --graft option to git replace Junio C Hamano
2014-05-27 19:05 ` Christian Couder
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=20140601.180626.1114637687965252195.chriscool@tuxfamily.org \
--to=chriscool@tuxfamily.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
/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 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 NNTP newsgroup(s).