From: Phillip Wood <phillip.wood123@gmail.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: Pablo Sabater <pabloosabaterr@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
Phillip Wood <phillip.wood@dunelm.org.uk>
Subject: Re: [PATCH v4 04/10] reset: modernize flags passed to `reset_working_tree()`
Date: Wed, 10 Jun 2026 14:10:53 +0100 [thread overview]
Message-ID: <f886affe-66fe-4589-babd-937106b9c3fb@gmail.com> (raw)
In-Reply-To: <20260610-b4-pks-history-drop-v4-4-70d5f0ae8c25@pks.im>
Hi Patrick
On 10/06/2026 09:52, Patrick Steinhardt wrote:
> The flags passed to `reset_working_tree()` are declared as defines. This
> has fallen a bit out of practice nowadays, where we instead prefer to
> use enums. Furthermore, the prefix of those flags does not match the
> function name anymore after the rename in the preceding commit.
>
> Adapt the code to follow modern best practices and adapt the flag names.
This looks good
Thanks
Phillip
>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> builtin/rebase.c | 15 ++++++++-------
> reset.c | 12 ++++++------
> reset.h | 31 +++++++++++++++++++------------
> sequencer.c | 9 ++++++---
> 4 files changed, 39 insertions(+), 28 deletions(-)
>
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 22fbba3c62..06dcbaf5e8 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -607,7 +607,7 @@ static int move_to_original_branch(struct rebase_options *opts)
> strbuf_addf(&head_reflog, "%s (finish): returning to %s",
> opts->reflog_action, opts->head_name);
> ropts.branch = opts->head_name;
> - ropts.flags = RESET_HEAD_REFS_ONLY;
> + ropts.flags = RESET_WORKING_TREE_REFS_ONLY;
> ropts.branch_msg = branch_reflog.buf;
> ropts.head_msg = head_reflog.buf;
> ret = reset_working_tree(the_repository, &ropts);
> @@ -862,9 +862,9 @@ static int checkout_up_to_date(struct rebase_options *options)
> options->reflog_action, options->switch_to);
> ropts.oid = &options->orig_head->object.oid;
> ropts.branch = options->head_name;
> - ropts.flags = RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
> + ropts.flags = RESET_WORKING_TREE_RUN_POST_CHECKOUT_HOOK;
> if (!ropts.branch)
> - ropts.flags |= RESET_HEAD_DETACH;
> + ropts.flags |= RESET_WORKING_TREE_DETACH;
> ropts.head_msg = buf.buf;
> if (reset_working_tree(the_repository, &ropts) < 0)
> ret = error(_("could not switch to %s"), options->switch_to);
> @@ -1384,7 +1384,7 @@ int cmd_rebase(int argc,
>
> rerere_clear(the_repository, &merge_rr);
> string_list_clear(&merge_rr, 1);
> - ropts.flags = RESET_HEAD_HARD;
> + ropts.flags = RESET_WORKING_TREE_HARD;
> if (reset_working_tree(the_repository, &ropts) < 0)
> die(_("could not discard worktree changes"));
> remove_branch_state(the_repository, 0);
> @@ -1409,7 +1409,7 @@ int cmd_rebase(int argc,
> ropts.oid = &options.orig_head->object.oid;
> ropts.head_msg = head_msg.buf;
> ropts.branch = options.head_name;
> - ropts.flags = RESET_HEAD_HARD;
> + ropts.flags = RESET_WORKING_TREE_HARD;
> if (reset_working_tree(the_repository, &ropts) < 0)
> die(_("could not move back to %s"),
> oid_to_hex(&options.orig_head->object.oid));
> @@ -1876,8 +1876,9 @@ int cmd_rebase(int argc,
> options.reflog_action, options.onto_name);
> ropts.oid = &options.onto->object.oid;
> ropts.orig_head = &options.orig_head->object.oid;
> - ropts.flags = RESET_HEAD_DETACH | RESET_ORIG_HEAD |
> - RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
> + ropts.flags = RESET_WORKING_TREE_DETACH |
> + RESET_WORKING_TREE_UPDATE_ORIG_HEAD |
> + RESET_WORKING_TREE_RUN_POST_CHECKOUT_HOOK;
> ropts.head_msg = msg.buf;
> ropts.default_reflog_action = options.reflog_action;
> if (reset_working_tree(the_repository, &ropts)) {
> diff --git a/reset.c b/reset.c
> index 799596398b..4ca7f23a25 100644
> --- a/reset.c
> +++ b/reset.c
> @@ -16,9 +16,9 @@ static int update_refs(struct repository *repo,
> const struct object_id *oid,
> const struct object_id *head)
> {
> - unsigned detach_head = opts->flags & RESET_HEAD_DETACH;
> - unsigned run_hook = opts->flags & RESET_HEAD_RUN_POST_CHECKOUT_HOOK;
> - unsigned update_orig_head = opts->flags & RESET_ORIG_HEAD;
> + unsigned detach_head = opts->flags & RESET_WORKING_TREE_DETACH;
> + unsigned run_hook = opts->flags & RESET_WORKING_TREE_RUN_POST_CHECKOUT_HOOK;
> + unsigned update_orig_head = opts->flags & RESET_WORKING_TREE_UPDATE_ORIG_HEAD;
> const struct object_id *orig_head = opts->orig_head;
> const char *switch_to_branch = opts->branch;
> const char *reflog_branch = opts->branch_msg;
> @@ -90,9 +90,9 @@ int reset_working_tree(struct repository *r,
> {
> const struct object_id *oid = opts->oid;
> const char *switch_to_branch = opts->branch;
> - unsigned reset_hard = opts->flags & RESET_HEAD_HARD;
> - unsigned refs_only = opts->flags & RESET_HEAD_REFS_ONLY;
> - unsigned update_orig_head = opts->flags & RESET_ORIG_HEAD;
> + unsigned reset_hard = opts->flags & RESET_WORKING_TREE_HARD;
> + unsigned refs_only = opts->flags & RESET_WORKING_TREE_REFS_ONLY;
> + unsigned update_orig_head = opts->flags & RESET_WORKING_TREE_UPDATE_ORIG_HEAD;
> struct object_id *head = NULL, head_oid;
> struct tree_desc desc[2] = { { NULL }, { NULL } };
> struct lock_file lock = LOCK_INIT;
> diff --git a/reset.h b/reset.h
> index f130152014..2e5826de99 100644
> --- a/reset.h
> +++ b/reset.h
> @@ -6,16 +6,22 @@
>
> #define GIT_REFLOG_ACTION_ENVIRONMENT "GIT_REFLOG_ACTION"
>
> -/* Request a detached checkout */
> -#define RESET_HEAD_DETACH (1<<0)
> -/* Request a reset rather than a checkout */
> -#define RESET_HEAD_HARD (1<<1)
> -/* Run the post-checkout hook */
> -#define RESET_HEAD_RUN_POST_CHECKOUT_HOOK (1<<2)
> -/* Only update refs, do not touch the worktree */
> -#define RESET_HEAD_REFS_ONLY (1<<3)
> -/* Update ORIG_HEAD as well as HEAD */
> -#define RESET_ORIG_HEAD (1<<4)
> +enum reset_working_tree_flags {
> + /* Request a detached checkout */
> + RESET_WORKING_TREE_DETACH = (1 << 0),
> +
> + /* Request a reset rather than a checkout */
> + RESET_WORKING_TREE_HARD = (1 << 1),
> +
> + /* Run the post-checkout hook */
> + RESET_WORKING_TREE_RUN_POST_CHECKOUT_HOOK = (1 << 2),
> +
> + /* Only update refs, do not touch the worktree */
> + RESET_WORKING_TREE_REFS_ONLY = (1 << 3),
> +
> + /* Update ORIG_HEAD as well as HEAD */
> + RESET_WORKING_TREE_UPDATE_ORIG_HEAD = (1 << 4),
> +};
>
> struct reset_working_tree_options {
> /*
> @@ -33,7 +39,7 @@ struct reset_working_tree_options {
> /*
> * Flags defined above.
> */
> - unsigned flags;
> + enum reset_working_tree_flags flags;
> /*
> * Optional reflog message for branch, defaults to head_msg.
> */
> @@ -45,7 +51,8 @@ struct reset_working_tree_options {
> const char *head_msg;
> /*
> * Optional reflog message for ORIG_HEAD, if this omitted and flags
> - * contains RESET_ORIG_HEAD then default_reflog_action must be given.
> + * contains RESET_WORKING_TREE_UPDATE_ORIG_HEAD then
> + * default_reflog_action must be given.
> */
> const char *orig_head_msg;
> /*
> diff --git a/sequencer.c b/sequencer.c
> index d73ecf0384..4efe831178 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -4677,7 +4677,9 @@ static void create_autostash_internal(struct repository *r,
> if (has_unstaged_changes(r, 1) ||
> has_uncommitted_changes(r, 1)) {
> struct child_process stash = CHILD_PROCESS_INIT;
> - struct reset_working_tree_options ropts = { .flags = RESET_HEAD_HARD };
> + struct reset_working_tree_options ropts = {
> + .flags = RESET_WORKING_TREE_HARD,
> + };
> struct object_id oid;
>
> strvec_pushl(&stash.args,
> @@ -4870,8 +4872,9 @@ static int checkout_onto(struct repository *r, struct replay_opts *opts,
> struct reset_working_tree_options ropts = {
> .oid = onto,
> .orig_head = orig_head,
> - .flags = RESET_HEAD_DETACH | RESET_ORIG_HEAD |
> - RESET_HEAD_RUN_POST_CHECKOUT_HOOK,
> + .flags = RESET_WORKING_TREE_DETACH |
> + RESET_WORKING_TREE_UPDATE_ORIG_HEAD |
> + RESET_WORKING_TREE_RUN_POST_CHECKOUT_HOOK,
> .head_msg = reflog_message(opts, "start", "checkout %s",
> onto_name),
> .default_reflog_action = sequencer_reflog_action(opts)
>
next prev parent reply other threads:[~2026-06-10 13:10 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-01 15:36 [PATCH 0/2] builtin/history: introduce "drop" subcommand Patrick Steinhardt
2026-06-01 15:36 ` [PATCH 1/2] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-01 15:36 ` [PATCH 2/2] builtin/history: implement "drop" subcommand Patrick Steinhardt
2026-06-01 23:43 ` Junio C Hamano
2026-06-03 10:06 ` Patrick Steinhardt
2026-06-02 7:31 ` Pablo Sabater
2026-06-03 10:06 ` Patrick Steinhardt
2026-06-03 16:13 ` [PATCH v2 0/9] builtin/history: introduce " Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 1/9] read-cache: split out function to drop unmerged entries to stage 0 Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 2/9] reset: drop `USE_THE_REPOSITORY_VARIABLE` Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 3/9] reset: modernize flags passed to `reset_head()` Patrick Steinhardt
2026-06-03 18:01 ` Kristoffer Haugsbakk
2026-06-05 15:08 ` Phillip Wood
2026-06-08 9:14 ` Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 4/9] reset: introduce dry-run mode Patrick Steinhardt
2026-06-03 18:18 ` Kristoffer Haugsbakk
2026-06-03 23:49 ` Junio C Hamano
2026-06-03 16:14 ` [PATCH v2 5/9] reset: introduce ability to skip reference updates Patrick Steinhardt
2026-06-03 23:51 ` Junio C Hamano
2026-06-04 9:01 ` Patrick Steinhardt
2026-06-05 15:12 ` Phillip Wood
2026-06-08 9:14 ` Patrick Steinhardt
2026-06-08 9:18 ` Patrick Steinhardt
2026-06-09 10:03 ` Phillip Wood
2026-06-10 7:31 ` Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 6/9] reset: allow the caller to specify the current HEAD object Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 7/9] reset: stop assuming that the caller passes in a clean index Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 8/9] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 9/9] builtin/history: implement "drop" subcommand Patrick Steinhardt
2026-06-03 19:04 ` Kristoffer Haugsbakk
2026-06-04 9:02 ` Patrick Steinhardt
2026-06-03 23:58 ` Junio C Hamano
2026-06-04 9:02 ` Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 0/9] builtin/history: introduce " Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 1/9] read-cache: split out function to drop unmerged entries to stage 0 Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 2/9] reset: drop `USE_THE_REPOSITORY_VARIABLE` Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 3/9] reset: modernize flags passed to `reset_head()` Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 4/9] reset: introduce dry-run mode Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 5/9] reset: introduce ability to skip reference updates Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 6/9] reset: allow the caller to specify the current HEAD object Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 7/9] reset: stop assuming that the caller passes in a clean index Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 8/9] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 9/9] builtin/history: implement "drop" subcommand Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 00/10] builtin/history: introduce " Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 01/10] read-cache: split out function to drop unmerged entries to stage 0 Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 02/10] reset: drop `USE_THE_REPOSITORY_VARIABLE` Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 03/10] reset: rename `reset_head()` Patrick Steinhardt
2026-06-10 13:10 ` Phillip Wood
2026-06-10 8:52 ` [PATCH v4 04/10] reset: modernize flags passed to `reset_working_tree()` Patrick Steinhardt
2026-06-10 13:10 ` Phillip Wood [this message]
2026-06-10 8:52 ` [PATCH v4 05/10] reset: introduce dry-run mode Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 06/10] reset: introduce ability to skip updating HEAD Patrick Steinhardt
2026-06-10 13:11 ` Phillip Wood
2026-06-10 8:52 ` [PATCH v4 07/10] reset: allow the caller to specify the current HEAD object Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 08/10] reset: stop assuming that the caller passes in a clean index Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 09/10] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-10 16:25 ` Junio C Hamano
2026-06-10 8:52 ` [PATCH v4 10/10] builtin/history: implement "drop" subcommand Patrick Steinhardt
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=f886affe-66fe-4589-babd-937106b9c3fb@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=pabloosabaterr@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
/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.