From: Phillip Wood Date: Fri, 10 Apr 2026 15:39:34 GMT Subject: Re: [PATCH v8 3/4] sequencer: teach autostash apply to take optional conflict marker labels Message-ID: In-Reply-To: <78300e0e9a8beb7ffb28a38a5e203556b2df9d56.1775762235.git.gitgitgadget@gmail.com> Hi Harald On 09/04/2026 20:17, Harald Nordgren via GitGitGadget wrote: > From: Harald Nordgren > > Add label1, label2, and label_ancestor parameters to the autostash > apply machinery so callers can pass custom conflict marker labels > through to "git stash apply --ours-label/--theirs-label/--base-label". > Introduce apply_autostash_ref_with_labels() for callers that want > to pass labels. This looks good. In the future we could use this to set some better labels for "git rebase --autostash" but that does not need to be part of this series. I'll leave it there for today and take a look at the last patch next week. It would be a good idea to wait a few days to see if anyone else has any comments before sending a new version. Thanks Phillip > Signed-off-by: Harald Nordgren > --- > sequencer.c | 34 +++++++++++++++++++++++++++------- > sequencer.h | 3 +++ > 2 files changed, 30 insertions(+), 7 deletions(-) > > diff --git a/sequencer.c b/sequencer.c > index e500a94a59..e28d30ff7b 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -4729,7 +4729,9 @@ void create_autostash_ref_silent(struct repository *r, const char *refname) > create_autostash_internal(r, NULL, refname, 1); > } > > -static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply) > +static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply, > + const char *label_ours, const char *label_theirs, > + const char *label_base) > { > struct child_process child = CHILD_PROCESS_INIT; > int ret = 0; > @@ -4740,6 +4742,12 @@ static int apply_save_autostash_oid(const char *stash_oid, int attempt_apply) > child.no_stderr = 1; > strvec_push(&child.args, "stash"); > strvec_push(&child.args, "apply"); > + if (label_ours) > + strvec_pushf(&child.args, "--ours-label=%s", label_ours); > + if (label_theirs) > + strvec_pushf(&child.args, "--theirs-label=%s", label_theirs); > + if (label_base) > + strvec_pushf(&child.args, "--base-label=%s", label_base); > strvec_push(&child.args, stash_oid); > ret = run_command(&child); > } > @@ -4784,7 +4792,8 @@ static int apply_save_autostash(const char *path, int attempt_apply) > } > strbuf_trim(&stash_oid); > > - ret = apply_save_autostash_oid(stash_oid.buf, attempt_apply); > + ret = apply_save_autostash_oid(stash_oid.buf, attempt_apply, > + NULL, NULL, NULL); > > unlink(path); > strbuf_release(&stash_oid); > @@ -4803,11 +4812,13 @@ int apply_autostash(const char *path) > > int apply_autostash_oid(const char *stash_oid) > { > - return apply_save_autostash_oid(stash_oid, 1); > + return apply_save_autostash_oid(stash_oid, 1, NULL, NULL, NULL); > } > > static int apply_save_autostash_ref(struct repository *r, const char *refname, > - int attempt_apply) > + int attempt_apply, > + const char *label_ours, const char *label_theirs, > + const char *label_base) > { > struct object_id stash_oid; > char stash_oid_hex[GIT_MAX_HEXSZ + 1]; > @@ -4823,7 +4834,8 @@ static int apply_save_autostash_ref(struct repository *r, const char *refname, > return error(_("autostash reference is a symref")); > > oid_to_hex_r(stash_oid_hex, &stash_oid); > - ret = apply_save_autostash_oid(stash_oid_hex, attempt_apply); > + ret = apply_save_autostash_oid(stash_oid_hex, attempt_apply, > + label_ours, label_theirs, label_base); > > refs_delete_ref(get_main_ref_store(r), "", refname, > &stash_oid, REF_NO_DEREF); > @@ -4833,12 +4845,20 @@ static int apply_save_autostash_ref(struct repository *r, const char *refname, > > int save_autostash_ref(struct repository *r, const char *refname) > { > - return apply_save_autostash_ref(r, refname, 0); > + return apply_save_autostash_ref(r, refname, 0, NULL, NULL, NULL); > } > > int apply_autostash_ref(struct repository *r, const char *refname) > { > - return apply_save_autostash_ref(r, refname, 1); > + return apply_save_autostash_ref(r, refname, 1, NULL, NULL, NULL); > +} > + > +int apply_autostash_ref_with_labels(struct repository *r, const char *refname, > + const char *label_ours, const char *label_theirs, > + const char *label_base) > +{ > + return apply_save_autostash_ref(r, refname, 1, > + label_ours, label_theirs, label_base); > } > > static int checkout_onto(struct repository *r, struct replay_opts *opts, > diff --git a/sequencer.h b/sequencer.h > index 570f804457..2c4ff17c4e 100644 > --- a/sequencer.h > +++ b/sequencer.h > @@ -236,6 +236,9 @@ int save_autostash_ref(struct repository *r, const char *refname); > int apply_autostash(const char *path); > int apply_autostash_oid(const char *stash_oid); > int apply_autostash_ref(struct repository *r, const char *refname); > +int apply_autostash_ref_with_labels(struct repository *r, const char *refname, > + const char *label_ours, const char *label_theirs, > + const char *label_base); > > #define SUMMARY_INITIAL_COMMIT (1 << 0) > #define SUMMARY_SHOW_AUTHOR_DATE (1 << 1)