Re: [PATCH v5 1/2] add-patch: classify '@' as a synonym for 'HEAD'
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 12, 2024, 21:45 UTC
- Message-ID
- <xmqqwmr94aru.fsf@gitster.g>
- In-Reply-To
- <20240211202035.7196-4-shyamthakkar001@gmail.com>
Ghanshyam Thakkar <shyamthakkar001@gmail.com> writes:
Show 58 quoted lines
> add-patch.c | 8 -------
> builtin/checkout.c | 4 +++-
> builtin/reset.c | 4 +++-
> t/t2016-checkout-patch.sh | 46 +++++++++++++++++++++-----------------
> t/t2020-checkout-detach.sh | 12 ++++++++++
> t/t2071-restore-patch.sh | 18 +++++++++------
> t/t7105-reset-patch.sh | 15 ++++++++-----
> 7 files changed, 64 insertions(+), 43 deletions(-)
>
> diff --git a/add-patch.c b/add-patch.c
> index 79eda168eb..68f525b35c 100644
> --- a/add-patch.c
> +++ b/add-patch.c
> @@ -1729,14 +1729,6 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
> if (mode == ADD_P_STASH)
> s.mode = &patch_mode_stash;
> else if (mode == ADD_P_RESET) {
> - /*
> - * NEEDSWORK: Instead of comparing to the literal "HEAD",
> - * compare the commit objects instead so that other ways of
> - * saying the same thing (such as "@") are also handled
> - * appropriately.
> - *
> - * This applies to the cases below too.
> - */
> if (!revision || !strcmp(revision, "HEAD"))
> s.mode = &patch_mode_reset_head;
> else
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index a6e30931b5..067c251933 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -1224,7 +1224,9 @@ static void setup_new_branch_info_and_source_tree(
> struct tree **source_tree = &opts->source_tree;
> struct object_id branch_rev;
>
> - new_branch_info->name = xstrdup(arg);
> + /* treat '@' as a shortcut for 'HEAD' */
> + new_branch_info->name = !strcmp(arg, "@") ? xstrdup("HEAD") :
> + xstrdup(arg);
> setup_branch_path(new_branch_info);
>
> if (!check_refname_format(new_branch_info->path, 0) &&
> diff --git a/builtin/reset.c b/builtin/reset.c
> index 8390bfe4c4..f0bf29a478 100644
> --- a/builtin/reset.c
> +++ b/builtin/reset.c
> @@ -281,7 +281,9 @@ static void parse_args(struct pathspec *pathspec,
> verify_filename(prefix, argv[0], 1);
> }
> }
> - *rev_ret = rev;
> +
> + /* treat '@' as a shortcut for 'HEAD' */
> + *rev_ret = !strcmp("@", rev) ? "HEAD" : rev;
>
> parse_pathspec(pathspec, 0,
> PATHSPEC_PREFER_FULL |Nice. Things have become so much simpler, without having to touch millions of strcmp() with "HEAD" everywhere in the code paths.
Will queue. Thanks.