Git development
 help / color / mirror / Atom feed
From: Ben Knoble <ben.knoble@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/2] stash: record positional index in 'struct stash_info'
Date: Thu, 30 Jul 2026 16:43:07 +0900	[thread overview]
Message-ID: <AA402B97-B3DC-4085-AF53-C6D80792C3DF@gmail.com> (raw)
In-Reply-To: <20260730034108.765430-2-gitster@pobox.com>

[on mobile, so only looking at patch context]

> Le 30 juil. 2026 à 12:41, Junio C Hamano <gitster@pobox.com> a écrit :
> 
> get_stash_info() resolves revision arguments (such as 'stash@{0}'
> or '2') and checks whether they refer to 'refs/stash', but it
> does not allow callers to determine the 0-based positional
> reflog index.
> 
> Record '.stash_idx' in 'struct stash_info'.  Populate it in
> get_stash_info(), setting it to 0 when omitted (defaulting
> to the latest stash), to 'n' when a valid positional index
> '@{n}' is specified, or to -1 when the index specification
> is invalid or non-positional (such as a time-based reference).
> 
> Subcommands that manipulate reflog entries by index can use
> '.stash_idx' directly, instead of parsing the revision arguments
> themselves.

I notice even after 2/2 we don’t have any users of this index yet (except rejecting invalid entries as the series goal).

> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> builtin/stash.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
> 
> diff --git a/builtin/stash.c b/builtin/stash.c
> index c4809f299a..5041a9ba81 100644
> --- a/builtin/stash.c
> +++ b/builtin/stash.c
> @@ -175,6 +175,7 @@ struct stash_info {
>   struct strbuf revision;
>   int is_stash_ref;
>   int has_u;
> +    int stash_idx;
> };
> 
> #define STASH_INFO_INIT { \
> @@ -248,6 +249,7 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
>   char *expanded_ref;
>   const char *revision;
>   const char *commit = NULL;
> +    const char *at;
>   struct object_id dummy;
>   struct strbuf symbolic = STRBUF_INIT;
> 
> @@ -300,6 +302,19 @@ static int get_stash_info(struct stash_info *info, int argc, const char **argv)
>   }
> 
>   free(expanded_ref);
> +
> +    at = strstr(revision, "@{");
> +    if (at) {
> +        char *ep;
> +        unsigned long u = strtoul(at + 2, &ep, 10);
> +        if (ep > at + 2 && *ep == '}' && u < 100000000)
> +            info->stash_idx = (int)u;

What’s the purpose of the 1e8 constant/comparison? I see we truncate the unsigned long to an int, but even on 32-bit platforms 1e8 is a small portion of the integer range, right? So my read is that we are limiting the valid « n » in @{n}. I’m not totally sure why, though, or if that matches with the rest of the stash manipulation code.  

> +        else
> +            info->stash_idx = -1;
> +    } else {
> +        info->stash_idx = 0;
> +    }
> +
>   return !(ret == 0 || ret == 1);
> }
> 
> --
> 2.55.0-597-ge6126a35d6

  reply	other threads:[~2026-07-30  7:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-30  3:41 [PATCH 0/2] git stash drop stash@{2.days.ago} Junio C Hamano
2026-07-30  3:41 ` [PATCH 1/2] stash: record positional index in 'struct stash_info' Junio C Hamano
2026-07-30  7:43   ` Ben Knoble [this message]
2026-07-30  3:41 ` [PATCH 2/2] stash: reject time-based selectors in drop and pop Junio C Hamano

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=AA402B97-B3DC-4085-AF53-C6D80792C3DF@gmail.com \
    --to=ben.knoble@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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