Paul Tan <pyoka...@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 ...

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 ...
        }

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to