Felipe Contreras <[email protected]> writes:
> 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 <[email protected]>
> ---
Makes sense.
> 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)
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html