git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 4/6] sha1_name: refactor reinterpret()

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 30, 2013, 22:01 UTC
Message-ID
<7va9ofbrug.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1367358554-4257-5-git-send-email-felipe.contreras@gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
Show 6 quoted lines
> This code essentially replaces part of ref with another ref, for example
> '@{-1}@{u}' is replaced with 'master@{u}', but this can be reused for
> other purposes other than nth prior checkouts.
>
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
Makes sense.
Show 63 quoted lines
>  sha1_name.c | 42 +++++++++++++++++++++++-------------------
>  1 file changed, 23 insertions(+), 19 deletions(-)
>
> diff --git a/sha1_name.c b/sha1_name.c
> index 93c4e8c..76e3219 100644
> --- a/sha1_name.c
> +++ b/sha1_name.c
> @@ -965,6 +965,27 @@ int get_sha1_mb(const char *name, unsigned char *sha1)
>  	return st;
>  }
>  
> +static int reinterpret(const char *name, int namelen, int len, struct strbuf *buf)
> +{
> +	/* we have extra data, which might need further processing */
> +	struct strbuf tmp = STRBUF_INIT;
> +	int used = buf->len;
> +	int ret;
> +
> +	strbuf_add(buf, name + len, namelen - len);
> +	ret = interpret_branch_name(buf->buf, &tmp);
> +	/* that data was not interpreted, remove our cruft */
> +	if (ret < 0) {
> +		strbuf_setlen(buf, used);
> +		return len;
> +	}
> +	strbuf_reset(buf);
> +	strbuf_addbuf(buf, &tmp);
> +	strbuf_release(&tmp);
> +	/* tweak for size of {-N} versus expanded ref name */
> +	return ret - used + len;
> +}
> +
>  /*
>   * This reads short-hand syntax that not only evaluates to a commit
>   * object name, but also can act as if the end user spelled the name
> @@ -998,25 +1019,8 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
>  		return len; /* syntax Ok, not enough switches */
>  	if (len > 0 && len == namelen)
>  		return len; /* consumed all */
> -	else if (len > 0) {
> -		/* we have extra data, which might need further processing */
> -		struct strbuf tmp = STRBUF_INIT;
> -		int used = buf->len;
> -		int ret;
> -
> -		strbuf_add(buf, name + len, namelen - len);
> -		ret = interpret_branch_name(buf->buf, &tmp);
> -		/* that data was not interpreted, remove our cruft */
> -		if (ret < 0) {
> -			strbuf_setlen(buf, used);
> -			return len;
> -		}
> -		strbuf_reset(buf);
> -		strbuf_addbuf(buf, &tmp);
> -		strbuf_release(&tmp);
> -		/* tweak for size of {-N} versus expanded ref name */
> -		return ret - used + len;
> -	}
> +	else if (len > 0)
> +		return reinterpret(name, namelen, len, buf);
>  
>  	cp = strchr(name, '@');
>  	if (!cp)
Previous: Felipe ContrerasNext: Felipe Contreras
Message 15 of 22 in “New @ shortcut for HEAD”
  1. 0/6 New @ shortcut for HEADFelipe Contreras, Apr 30, 2013
  2. 1/6 sha1_name: remove no-opFelipe Contreras, Apr 30, 2013
  3. 2/6 sha1_name: remove unnecessary bracesFelipe Contreras, Apr 30, 2013
  4. 3/6 sha1_name: avoid Yoda conditionsFelipe Contreras, Apr 30, 2013
  5. Junio C HamanoApr 30, 2013
  6. Felipe ContrerasApr 30, 2013
  7. Junio C HamanoApr 30, 2013
  8. Felipe ContrerasApr 30, 2013
  9. Junio C HamanoApr 30, 2013
  10. Junio C HamanoApr 30, 2013
  11. Felipe ContrerasApr 30, 2013
  12. Junio C HamanoApr 30, 2013
  13. Junio C HamanoApr 30, 2013
  14. 4/6 sha1_name: refactor reinterpret()Felipe Contreras, Apr 30, 2013
  15. Junio C HamanoApr 30, 2013
  16. 5/6 Add new @ shortcut for HEADFelipe Contreras, Apr 30, 2013
  17. Junio C HamanoApr 30, 2013
  18. Duy NguyenMay 1, 2013
  19. Felipe ContrerasMay 2, 2013
  20. Junio C HamanoMay 2, 2013
  21. 6/6 sha1_name: allow @@{u} to workFelipe Contreras, Apr 30, 2013
  22. Junio C HamanoApr 30, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.