From: Junio C Hamano <gitster@pobox.com>
To: Thomas Rast <trast@student.ethz.ch>
Cc: git@vger.kernel.org,
Johannes Schindelin <johannes.schindelin@gmx.de>,
Johannes Sixt <johannes.sixt@telecom.at>,
Johan Herland <johan@herland.net>
Subject: Re: [PATCH/RFC v4 2/5] sha1_name: tweak @{-N} lookup
Date: Sat, 17 Jan 2009 16:54:28 -0800 [thread overview]
Message-ID: <7v4ozx5t8b.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 1232208597-29249-3-git-send-email-trast@student.ethz.ch
Thomas Rast <trast@student.ethz.ch> writes:
> Have the lookup only look at "interesting" checkouts, meaning those
> that tell you "Already on ..." don't count even though they also cause
> a reflog entry.
>
> Let interpret_nth_last_branch() return the number of characters
> parsed, so that git-checkout can verify that the branch spec was
> @{-N}, not @{-1}^2 or something like that. (The latter will be added
> later.)
Thanks; you seem to have handled the issues I pointed out in response to
my own weatherbaloon patch. I think it is probably better to squash the
first two (and you take the authorship).
> diff --git a/sha1_name.c b/sha1_name.c
> index 6377264..34e39db 100644
> --- a/sha1_name.c
> +++ b/sha1_name.c
> @@ -685,29 +685,28 @@ static int grab_nth_branch_switch(unsigned char *osha1, unsigned char *nsha1,
> const char *message, void *cb_data)
> {
> struct grab_nth_branch_switch_cbdata *cb = cb_data;
> - const char *match = NULL;
> -
> - if (!prefixcmp(message, "checkout: moving to "))
> - match = message + strlen("checkout: moving to ");
> - else if (!prefixcmp(message, "checkout: moving from ")) {
> - const char *cp = message + strlen("checkout: moving from ");
> - if ((cp = strstr(cp, " to ")) != NULL) {
> - match = cp + 4;
> - }
> + const char *match = NULL, *target = NULL;
> + size_t len;
> +
> + if (!prefixcmp(message, "checkout: moving from ")) {
> + match = message + strlen("checkout: moving from ");
> + if ((target = strstr(match, " to ")) != NULL)
> + target += 4;
> }
This drops support for older reflog records, but I think it would be Ok.
This "N-th" support is really meant to be for small number of N anyway.
> - if (--cb->nth <= 0) {
> - size_t len = strlen(match);
> - while (match[len-1] == '\n')
> - len--;
> + if (cb->nth-- <= 0) {
> strbuf_reset(cb->buf);
> strbuf_add(cb->buf, match, len);
> return 1;
Hmm, did I have an off-by-one I did not notice? ;-)
> int interpret_nth_last_branch(const char *name, struct strbuf *buf)
> {
> - int nth, i;
> + int nth;
> struct grab_nth_branch_switch_cbdata cb;
> + const char *brace;
> + char *num_end;
>
> if (name[0] != '@' || name[1] != '{' || name[2] != '-')
> return -1;
> - for (i = 3, nth = 0; name[i] && name[i] != '}'; i++) {
> - char ch = name[i];
> - if ('0' <= ch && ch <= '9')
> - nth = nth * 10 + ch - '0';
> - else
> - return -1;
> - }
> - if (nth < 0 || 10 <= nth)
The removal of "limit to reasonably small recent N" I somewhat have
reservations on, but I think we can later re-add something based on
configuration variable if we need to.
next prev parent reply other threads:[~2009-01-18 0:56 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-15 0:06 [PATCH] checkout: implement "-" shortcut name for last branch Thomas Rast
2009-01-15 0:12 ` [PATCH v2] " Thomas Rast
2009-01-15 7:27 ` Johannes Sixt
2009-01-15 13:15 ` Johannes Schindelin
2009-01-15 13:59 ` Thomas Rast
2009-01-15 14:09 ` Johannes Schindelin
2009-01-15 14:17 ` Johannes Schindelin
2009-01-15 20:12 ` Junio C Hamano
2009-01-15 20:35 ` Johannes Schindelin
2009-01-16 12:52 ` [PATCH] revision walker: include a detached HEAD in --all Johannes Schindelin
2009-01-16 13:12 ` Santi Béjar
2009-01-16 13:17 ` Johannes Schindelin
2009-01-16 13:22 ` David Kastrup
2009-01-16 13:46 ` Santi Béjar
2009-01-16 13:50 ` Santi Béjar
2009-01-18 6:01 ` Junio C Hamano
2009-01-18 6:36 ` Junio C Hamano
2009-01-18 14:06 ` Johannes Schindelin
2009-01-18 13:42 ` Johannes Schindelin
2009-01-15 16:32 ` [PATCH v2] checkout: implement "-" shortcut name for last branch Johan Herland
2009-01-15 16:50 ` Johannes Schindelin
2009-01-15 20:11 ` Junio C Hamano
2009-01-15 20:50 ` Junio C Hamano
2009-01-17 3:30 ` [PATCH/RFC v3 0/6] N-th last checked out branch Thomas Rast
2009-01-17 5:52 ` Johannes Schindelin
2009-01-17 13:38 ` Thomas Rast
2009-01-17 13:40 ` [PATCH/RFC v3bis 1/2] sha1_name: implement @{-N} syntax for N-th last checked out Thomas Rast
2009-01-17 13:40 ` [PATCH/RFC v3bis 2/2] checkout: implement '@{-N}' and '-' special abbreviations Thomas Rast
2009-01-17 15:04 ` [PATCH] interpret_nth_last_branch(): avoid traversing the reflogs twice Johannes Schindelin
2009-01-17 16:09 ` [PATCH/RFC v4 0/5] N-th last checked out branch Thomas Rast
2009-01-17 16:09 ` [PATCH/RFC v4 1/5] checkout: implement "@{-N}" shortcut name for N-th last branch Thomas Rast
2009-01-17 16:09 ` [PATCH/RFC v4 2/5] sha1_name: tweak @{-N} lookup Thomas Rast
2009-01-17 16:09 ` [PATCH/RFC v4 3/5] sha1_name: support @{-N} syntax in get_sha1() Thomas Rast
2009-01-17 16:09 ` [PATCH/RFC v4 4/5] checkout: implement "-" abbreviation, add docs and tests Thomas Rast
2009-01-17 16:09 ` [PATCH/RFC v4 5/5] interpret_nth_last_branch(): avoid traversing the reflogs twice Thomas Rast
2009-01-17 18:08 ` [PATCH 6/5] Fix parsing of @{-1}@{1} Johannes Schindelin
2009-01-17 20:02 ` Junio C Hamano
2009-01-17 21:22 ` Johannes Schindelin
2009-01-17 19:57 ` [PATCH/RFC v4 4/5] checkout: implement "-" abbreviation, add docs and tests Junio C Hamano
2009-01-17 17:55 ` [PATCH/RFC v4 3/5] sha1_name: support @{-N} syntax in get_sha1() Johannes Schindelin
2009-01-17 19:37 ` Junio C Hamano
2009-01-18 0:54 ` Junio C Hamano [this message]
2009-01-17 16:49 ` [PATCH/RFC v4 0/5] N-th last checked out branch Johannes Schindelin
2009-01-17 19:13 ` [PATCH] interpret_nth_last_branch(): avoid traversing the reflogs twice Junio C Hamano
2009-01-17 19:29 ` Johannes Schindelin
2009-01-18 0:43 ` Junio C Hamano
2009-01-18 1:12 ` Johannes Schindelin
2009-01-18 7:25 ` Junio C Hamano
2009-01-18 20:59 ` Johannes Schindelin
2009-01-19 8:08 ` Junio C Hamano
2009-01-19 8:19 ` Junio C Hamano
2009-01-19 12:33 ` Johannes Schindelin
2009-01-20 0:11 ` Thomas Rast
2009-01-20 0:23 ` Johannes Schindelin
2009-01-20 0:41 ` Thomas Rast
2009-01-20 6:21 ` [PATCH] interpret_nth_last_branch(): plug small memleak Junio C Hamano
2009-01-20 10:15 ` Johannes Schindelin
2009-01-20 6:22 ` [PATCH] Introduce for_each_recent_reflog_ent() Junio C Hamano
2009-01-20 10:15 ` Johannes Schindelin
2009-01-20 8:35 ` [PATCH] interpret_nth_last_branch(): avoid traversing the reflogs twice Junio C Hamano
2009-01-21 0:16 ` [VALGRIND PATCH for nth_last patch series] Fix invalid memory access Johannes Schindelin
2009-01-21 8:45 ` Junio C Hamano
2009-01-21 9:18 ` Thomas Rast
2009-01-21 10:13 ` Junio C Hamano
2009-01-21 12:06 ` Johannes Schindelin
2009-01-24 22:21 ` Thomas Rast
2009-01-24 22:23 ` [PATCH next] t1505: remove debugging cruft Thomas Rast
2009-01-25 20:35 ` Junio C Hamano
2009-01-21 11:56 ` [VALGRIND PATCH for nth_last patch series] Fix invalid memory access Johannes Schindelin
2009-01-19 12:41 ` [PATCH] @{-<n>}: avoid crash with corrupt reflog Johannes Schindelin
2009-01-19 14:57 ` Johannes Schindelin
2009-01-17 3:30 ` [PATCH/RFC v3 1/6] reflog: refactor parsing and checking Thomas Rast
2009-01-17 5:35 ` Johannes Schindelin
2009-01-17 3:30 ` [PATCH/RFC v3 2/6] reflog: refactor log open+mmap Thomas Rast
2009-01-17 5:40 ` Johannes Schindelin
2009-01-17 3:30 ` [PATCH/RFC v3 3/6] reflog: make for_each_reflog_ent use mmap Thomas Rast
2009-01-17 3:30 ` [PATCH/RFC v3 4/6] reflog: add backwards iterator Thomas Rast
2009-01-17 3:30 ` [PATCH/RFC v3 5/6] sha1_name: implement @{-N} syntax for N-th last checked out Thomas Rast
2009-01-17 3:30 ` [PATCH/RFC v3 6/6] checkout: implement '@{-N}' and '-' special abbreviations Thomas Rast
2009-01-16 12:31 ` [PATCH v2] checkout: implement "-" shortcut name for last branch Johannes Schindelin
2009-01-15 0:45 ` [PATCH] " Johannes Schindelin
2009-01-15 14:01 ` Thomas Rast
2009-01-15 14:14 ` Johannes Schindelin
2009-01-15 17:05 ` Thomas Rast
2009-01-15 18:34 ` Johannes Schindelin
2009-01-16 9:08 ` Thomas Rast
2009-01-16 11:18 ` Johannes Schindelin
2009-01-18 1:38 ` [TOY PATCH] git-resurrect: find traces of a branch name and resurrect it Thomas Rast
2009-01-18 16:19 ` Johannes Schindelin
2009-01-20 9:01 ` Thomas Rast
2009-01-20 16:57 ` Boyd Stephen Smith Jr.
2009-01-20 20:50 ` Boyd Stephen Smith Jr.
2009-01-23 20:03 ` [PATCH] contrib " Thomas Rast
2009-01-23 21:00 ` Boyd Stephen Smith Jr.
2009-01-26 11:54 ` Thomas Rast
2009-01-26 12:40 ` [PATCH v2] " Thomas Rast
2009-01-27 6:31 ` Junio C Hamano
2009-01-30 22:52 ` Thomas Rast
2009-02-01 21:34 ` [PATCH v3] " Thomas Rast
2009-02-02 2:31 ` Junio C Hamano
2009-02-04 10:04 ` [PATCH v4] " Thomas Rast
2009-02-05 8:38 ` 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=7v4ozx5t8b.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=johan@herland.net \
--cc=johannes.schindelin@gmx.de \
--cc=johannes.sixt@telecom.at \
--cc=trast@student.ethz.ch \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.