From: Jeff King Date: Fri, 23 May 2014 19:51:53 GMT Subject: Re: [PATCH v1 1/3] replace: add --graft option Message-ID: <20140523195153.GB19088@sigill.intra.peff.net> In-Reply-To: <20140522213307.27162.14455.chriscool@tuxfamily.org> On Thu, May 22, 2014 at 11:33:04PM +0200, Christian Couder wrote: > The usage string for this option is: > > git replace [-f] --graft [...] > > First we create a new commit that is the same as > except that its parents are [...] > > Then we create a replace ref that replace 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). > + /* 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. It still feels rather magical to me, as we are depending on unspoken format guarantees defined inside parse_commit_buffer. 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. -Peff