From: Junio C Hamano <gitster@pobox.com>
To: Gatla Vishweshwar Reddy <gatlavishweshwarreddy26@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] builtin/add.c: replace run_command() with direct apply_all_patches() call
Date: Thu, 09 Jul 2026 23:41:02 -0700 [thread overview]
Message-ID: <xmqqmrvzfitd.fsf@gitster.g> (raw)
In-Reply-To: <20260709192619.46791-1-gatlavishweshwarreddy26@gmail.com> (Gatla Vishweshwar Reddy's message of "Fri, 10 Jul 2026 00:56:19 +0530")
Gatla Vishweshwar Reddy <gatlavishweshwarreddy26@gmail.com> writes:
> When the user runs "git add -e", the diff of the working tree changes
> is written to a temporary file, opened in an editor, and then applied
> back to the index. The application step was done by spawning a child
"was" -> "is"; in the first part of the log message that gives an
observation, we describe the status quo in the present tense.
> process running "git apply --recount --cached <file>", which is an
> unnecessary subprocess since the apply machinery is available as a
> native C API.
> @@ -187,7 +186,6 @@ static int edit_patch(struct repository *repo,
> const char *prefix)
> {
> char *file = repo_git_path(repo, "ADD_EDIT.patch");
> - struct child_process child = CHILD_PROCESS_INIT;
> struct rev_info rev;
> int out;
> struct stat st;
> @@ -217,11 +215,15 @@ static int edit_patch(struct repository *repo,
> if (!st.st_size)
> die(_("empty patch. aborted"));
>
> - child.git_cmd = 1;
> - strvec_pushl(&child.args, "apply", "--recount", "--cached", file,
> - NULL);
> - if (run_command(&child))
> + struct apply_state state;
> + const char *apply_argv[] = { file, NULL };
> +
> + if (init_apply_state(&state, repo, prefix))
> + die(_("could not initialize apply state"));
> + state.cached = 1;
> + if (apply_all_patches(&state, 1, apply_argv, APPLY_OPT_RECOUNT))
> die(_("could not apply '%s'"), file);
> + clear_apply_state(&state);
Compared to existing callers of the apply_all_patches() API
function, this implementation curiously lacks a prior call to
check_apply_state().
Has this been tested, and do we have sufficient test coverage for it?
Calling check_apply_state() should flip state->check_index on, given
that state.cached is set to 1 above. If I remember correctly, having
this bit enabled is required for apply_patch() to toggle the
.update_index member, which in turn allows apply_all_patches() to
update the index with the patch results. Please double-check this
logic, since it has been a while since I looked at these specific
code paths.
If my assumption holds, this patch might inadvertently stop writing
the result to the index, even though the original intent of
replacing 'apply --cached' was clearly to update it.
Thanks.
>
> unlink(file);
> free(file);
next prev parent reply other threads:[~2026-07-10 6:41 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-09 19:26 [PATCH] builtin/add.c: replace run_command() with direct apply_all_patches() call Gatla Vishweshwar Reddy
2026-07-10 6:41 ` Junio C Hamano [this message]
2026-07-10 7:32 ` [PATCH v2] " Gatla Vishweshwar Reddy
2026-07-10 18:51 ` Junio C Hamano
2026-07-10 19:58 ` [PATCH v3] " Gatla Vishweshwar Reddy
2026-07-11 4:51 ` Junio C Hamano
2026-07-11 6:06 ` [PATCH v4] " Gatla Vishweshwar Reddy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqmrvzfitd.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=gatlavishweshwarreddy26@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.