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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox