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

Re: [PATCH/WIP v2 03/19] am: implement skeletal builtin am

From
Paul Tan <pyokagan@gmail.com>
Date
Jun 18, 2015, 08:44 UTC
Message-ID
<CACRoPnRfTCyTj=WnygzwSNu7s_2iGrtygPEh7u2d1Hqchd1ZxQ@mail.gmail.com>
In-Reply-To
<xmqqoakgamcj.fsf@gitster.dls.corp.google.com>
On Tue, Jun 16, 2015 at 1:54 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 15 quoted lines
> Paul Tan <pyokagan@gmail.com> writes:
>
>>> The scripted Porcelain is spawned after applying patches 1-3 from
>>> here, when you do not have _GIT_USE_BUILTIN_AM exported.  Haven't
>>> RUN_SETUP code did its thing by that time?
>>
>> Ah right, the RUN_SETUP code would have chdir()-ed to the working
>> directory root, so git-am.sh will be unable to find the original
>> working directory. To aid it, we would have to chdir() back to the
>> original working directory, and unset GIT_DIR.
>
> I do not think that is a correct workaround, though.  GIT_DIR may
> have come from the end user, i.e.
>
>         $ GIT_WORK_TREE=somewhere GIT_DIR=somewhere.else git am ...
Ah, forgot about that ><
Show 24 quoted lines
> As the RUN_SETUP|REQUIRE_WORK_TREE bit is merely a convenence in
> git.c, one workable way to keep these dual implementations is to do
> what built-in commands used to do before these were invented.
> Perhaps studying how cmd_diff(), which is run from git.c without
> either RUN_SETUP or NEED_WORK_TREE, and taking good bits from it
> would help.  I think the implementation roughly would look like
> this:
>
>         int cmd_am(int ac, const char **av, const char *prefix)
>         {
>                 /*
>                  * NEEDSWORK: once we retire the dual-mode
>                  * implementation, this preamble can be removed...
>                  */
>                 if (... want to do scripted ...) {
>                         ... spawn the scripted thing ...
>                 }
>                 prefix = setup_git_directory();
>                 setup_work_tree();
>                 /* ... up to this point */
>
>                 ... your real "git am in C" comes here ...
>         }
>

Ah OK. Just to be sure, I took a look at run_builtin() in git.c, and indeed it only just does:

prefix = setup_git_directory(); trace_repo_setup(prefix); setup_work_tree();

which is not bad at all. Thanks.

Regards, Paul

Previous: Junio C HamanoNext: Paul Tan
Message 10 of 31 in “Make git-am a builtin”
  1. 00/19 Make git-am a builtinPaul Tan, Jun 11, 2015
  2. 01/19 wrapper: implement xopen()Paul Tan, Jun 11, 2015
  3. 02/19 wrapper: implement xfopen()Paul Tan, Jun 11, 2015
  4. 03/19 am: implement skeletal builtin amPaul Tan, Jun 11, 2015
  5. Junio C HamanoJun 14, 2015
  6. Paul TanJun 15, 2015
  7. Junio C HamanoJun 15, 2015
  8. Paul TanJun 15, 2015
  9. Junio C HamanoJun 15, 2015
  10. Paul TanJun 18, 2015
  11. 04/19 am: implement patch queue mechanismPaul Tan, Jun 11, 2015
  12. Stefan BellerJun 11, 2015
  13. Paul TanJun 15, 2015
  14. 05/19 am: split out mbox/maildir patches with git-mailsplitPaul Tan, Jun 11, 2015
  15. Stefan BellerJun 11, 2015
  16. Paul TanJun 15, 2015
  17. 06/19 am: detect mbox patchesPaul Tan, Jun 11, 2015
  18. 07/19 am: extract patch, message and authorship with git-mailinfoPaul Tan, Jun 11, 2015
  19. Junio C HamanoJun 14, 2015
  20. 08/19 am: apply patch with git-applyPaul Tan, Jun 11, 2015
  21. 09/19 am: commit applied patchPaul Tan, Jun 11, 2015
  22. 10/19 am: refresh the index at startPaul Tan, Jun 11, 2015
  23. 11/19 am: refuse to apply patches if index is dirtyPaul Tan, Jun 11, 2015
  24. 12/19 am: implement --resolved/--continuePaul Tan, Jun 11, 2015
  25. 13/19 am: implement --skipPaul Tan, Jun 11, 2015
  26. 14/19 am: implement --abortPaul Tan, Jun 11, 2015
  27. 15/19 am: implement quiet optionPaul Tan, Jun 11, 2015
  28. 16/19 am: exit with user friendly message on patch failurePaul Tan, Jun 11, 2015
  29. 17/19 am: implement am --signoffPaul Tan, Jun 11, 2015
  30. 18/19 cache-tree: introduce write_index_as_tree()Paul Tan, Jun 11, 2015
  31. 19/19 am: implement 3-way mergePaul Tan, Jun 11, 2015

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.