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

Re: [PATCH v6 02/10] replace: add --graft option

From
Christian Couder <christian.couder@gmail.com>
Date
Jul 10, 2014, 09:30 UTC
Message-ID
<CAP8UFD2X7j2TGEQfX3h8CfiZypJ5tVPqaZ2bNE0k1-jbeJj=Zw@mail.gmail.com>
In-Reply-To
<xmqqsima7f3r.fsf@gitster.dls.corp.google.com>
On Wed, Jul 9, 2014 at 4:59 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 25 quoted lines
> Christian Couder <chriscool@tuxfamily.org> writes:
>
>> +static void replace_parents(struct strbuf *buf, int argc, const char **argv)
>> +{
>> +     struct strbuf new_parents = STRBUF_INIT;
>> +     const char *parent_start, *parent_end;
>> +     int i;
>> +
>> +     /* 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" */
>> +
>> +     /* prepare new parents */
>> +     for (i = 1; i < argc; i++) {
>
> It looks somewhat strange that both replace_parents() and
> create_graft() take familiar-looking <argc, argv> pair, but one
> ignores argv[0] and uses the remainder and the other uses argv[0].
> Shouldn't this function consume argv[] starting from [0] for
> consistency?  You'd obviously need to update the caller to adjust
> the arguments it gives to this function.
Ok, will do.
Show 24 quoted lines
>> +static int create_graft(int argc, const char **argv, int force)
>> +{
>> +     unsigned char old[20], new[20];
>> +     const char *old_ref = argv[0];
>> +...
>> +
>> +     replace_parents(&buf, argc, argv);
>> +
>> +     if (write_sha1_file(buf.buf, buf.len, commit_type, new))
>> +             die(_("could not write replacement commit for: '%s'"), old_ref);
>> +
>> +     strbuf_release(&buf);
>> +
>> +     if (!hashcmp(old, new))
>> +             return error("new commit is the same as the old one: '%s'", sha1_to_hex(old));
>
> Is this really an error?  It may be a warning-worthy situation for a
> user or a script to end up doing a no-op graft, e.g.
>
>         git replace --graft HEAD HEAD^
>
> but I wonder if it is more convenient to signal an error (like this
> patch does) or just ignore the request and return without adding the
> replace ref.

As the user might expect that a new replace ref was created on success (0 exit code), and as we should at least warn if we would create a commit that is the same as an existing one, I think it is just simpler to error out in this case.

Though maybe we could use a special exit code (for example 2) in this case, so that the user might more easily ignore this error in a script.

> Other than these two points, looks good to me.

Thanks, Christian.

Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 26 in “Add --graft option to git replace”
  1. 00/10 Add --graft option to git replaceChristian Couder, Jul 7, 2014
  2. 01/10 replace: cleanup redirection style in testsChristian Couder, Jul 7, 2014
  3. 02/10 replace: add --graft optionChristian Couder, Jul 7, 2014
  4. Junio C HamanoJul 9, 2014
  5. Christian CouderJul 10, 2014
  6. Junio C HamanoJul 10, 2014
  7. Junio C HamanoJul 10, 2014
  8. Christian CouderJul 11, 2014
  9. Junio C HamanoJul 11, 2014
  10. Christian CouderJul 11, 2014
  11. Junio C HamanoJul 11, 2014
  12. Jeff KingJul 11, 2014
  13. 03/10 replace: add test for --graftChristian Couder, Jul 7, 2014
  14. Junio C HamanoJul 7, 2014
  15. Christian CouderJul 8, 2014
  16. 04/10 Documentation: replace: add --graft optionChristian Couder, Jul 7, 2014
  17. 05/10 contrib: add convert-grafts-to-replace-refs.shChristian Couder, Jul 7, 2014
  18. 06/10 replace: remove signature when using --graftChristian Couder, Jul 7, 2014
  19. 07/10 replace: add test for --graft with signed commitChristian Couder, Jul 7, 2014
  20. 08/10 commit: add for_each_mergetag()Christian Couder, Jul 7, 2014
  21. Junio C HamanoJul 7, 2014
  22. Christian CouderJul 8, 2014
  23. 09/10 replace: check mergetags when using --graftChristian Couder, Jul 7, 2014
  24. Junio C HamanoJul 7, 2014
  25. Christian CouderJul 8, 2014
  26. 10/10 replace: add test for --graft with a mergetagChristian Couder, Jul 7, 2014

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.