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

Re: [RFC/PATCH 4/4] replace: add --edit option

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 7, 2014, 01:57 UTC
Message-ID
<CAPig+cQi+7md4P2OXJDDcs7VMkMEsUHaEz5wsaDOyu4ppk2uAg@mail.gmail.com>
In-Reply-To
<20140306175117.GD30691@sigill.intra.peff.net>
On Thu, Mar 6, 2014 at 12:51 PM, Jeff King <peff@peff.net> wrote:
Show 55 quoted lines
> This allows you to run:
>
>     git replace --edit SHA1
>
> to get dumped in an editor with the contents of the object
> for SHA1. The result is then read back in and used as a
> "replace" object for SHA1. The writing/reading is
> type-aware, so you get to edit "ls-tree" output rather than
> the binary tree format.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> diff --git a/builtin/replace.c b/builtin/replace.c
> index a090302..3ed5f75 100644
> --- a/builtin/replace.c
> +++ b/builtin/replace.c
> @@ -176,6 +177,105 @@ static int replace_object(const char *object_ref, const char *replace_ref, int f
>         return replace_object_sha1(object_ref, object, replace_ref, repl, force);
>  }
>
> +/*
> + * Read a previously-exported (and possibly edited) object back from "filename",
> + * interpreting it as "type", and writing the result to the object database.
> + * The sha1 of the written object is returned via sha1.
> + */
> +static void import_object(unsigned char *sha1, enum object_type type,
> +                         const char *filename)
> +{
> +       int fd;
> +
> +       fd = open(filename, O_RDONLY);
> +       if (fd < 0)
> +               die_errno("unable to open %s for reading", filename);
> +
> +       if (type == OBJ_TREE) {
> +               const char *argv[] = { "mktree", NULL };
> +               struct child_process cmd = { argv };
> +               struct strbuf result = STRBUF_INIT;
> +
> +               cmd.argv = argv;
> +               cmd.git_cmd = 1;
> +               cmd.in = fd;
> +               cmd.out = -1;
> +
> +               if (start_command(&cmd))
> +                       die("unable to spawn mktree");
> +
> +               if (strbuf_read(&result, cmd.out, 41) < 0)
> +                       die_errno("unable to read from mktree");
> +               close(cmd.out);
> +
> +               if (finish_command(&cmd))
> +                       die("mktree reported failure");
> +               if (get_sha1_hex(result.buf, sha1) < 0)
> +                       die("mktree did not return an object name");
strbuf_release(&result);
Show 18 quoted lines
> +       } else {
> +               struct stat st;
> +               int flags = HASH_FORMAT_CHECK | HASH_WRITE_OBJECT;
> +
> +               if (fstat(fd, &st) < 0)
> +                       die_errno("unable to fstat %s", filename);
> +               if (index_fd(sha1, fd, &st, type, NULL, flags) < 0)
> +                       die("unable to write object to database");
> +               /* index_fd close()s fd for us */
> +       }
> +
> +       /*
> +        * No need to close(fd) here; both run-command and index-fd
> +        * will have done it for us.
> +        */
> +}
> --
> 1.8.5.2.500.g8060133
Previous: Jeff KingNext: Jeff King
Message 18 of 35 in “disable grafts during fetch/push/bundle”
  1. disable grafts during fetch/push/bundleJeff King, Mar 4, 2014
  2. Junio C HamanoMar 4, 2014
  3. Jeff KingMar 5, 2014
  4. Junio C HamanoMar 5, 2014
  5. Jeff KingMar 5, 2014
  6. Junio C HamanoMar 5, 2014
  7. Jeff KingMar 5, 2014
  8. Junio C HamanoMar 5, 2014
  9. Michael HaggertyMar 6, 2014
  10. Christian CouderMar 6, 2014
  11. Jeff KingMar 6, 2014
  12. Michael HaggertyMar 6, 2014
  13. Jeff KingMar 6, 2014
  14. 1/4 replace: refactor command-mode determinationJeff King, Mar 6, 2014
  15. 2/4 replace: use OPT_CMDMODE to handle modesJeff King, Mar 6, 2014
  16. 3/4 replace: factor object resolution out of replace_objectJeff King, Mar 6, 2014
  17. 4/4 replace: add --edit optionJeff King, Mar 6, 2014
  18. Eric SunshineMar 7, 2014
  19. Jeff KingMar 7, 2014
  20. Junio C HamanoMar 6, 2014
  21. Jeff KingMar 6, 2014
  22. Philip OakleyMar 6, 2014
  23. Michael HaggertyMar 6, 2014
  24. Junio C HamanoMar 6, 2014
  25. Christian CouderMar 7, 2014
  26. Jeff KingMar 7, 2014
  27. Junio C HamanoMar 19, 2014
  28. Jeff KingMar 21, 2014
  29. Philip OakleyMar 6, 2014
  30. Eric SunshineMar 4, 2014
  31. Jeff KingMar 5, 2014
  32. Eric SunshineMar 5, 2014
  33. Jeff KingMar 5, 2014
  34. Eric SunshineMar 5, 2014
  35. Jeff KingMar 6, 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.