From: linux@horizon.com
To: git@vger.kernel.org
Subject: Re: The merge from hell...
Date: 3 Feb 2006 01:41:54 -0500 [thread overview]
Message-ID: <20060203064154.21015.qmail@science.horizon.com> (raw)
While we're stress-testing the ystem, does anyone feel like fixing
git-rev-parse 9fdb62af92c741addbea15545f214a6e89460865^10 ?
The following is my attempt, but it doesn't seem sufficient...
$ ~/git/git-rev-parse 9fdb62af92c741addbea15545f214a6e89460865^{1,2,3,4,5,6,7,8,9,10,11,12}
3ee68c4af3fd7228c1be63254b9f884614f9ebb2
876c184b31dc73cc3f38c5b86dee55d091a56769
729b4d4ce1982c52040bbf22d6711cdf8db07ad8
cf82478840188f8c8494c1d7a668a8ae170d0e07
dacd9b80355525be0e3c519687868410e304ad1c
63c94b68ec30847a6e2b36651703f41066f91480
35f652b5ef4ef145ac5514f6302b3f4cebfbbad4
1a38416cea8ac801ae8f261074721f35317613dc
4a90c7e86202f46fa9af011bdbcdf36e355d1721
fatal: '9fdb62af92c741addbea15545f214a6e89460865^10': No such file or directory
(Placed in the public domain; go nuts.)
diff --git a/sha1_name.c b/sha1_name.c
index ba0747c..adf49d2 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -388,52 +388,33 @@ static int peel_onion(const char *name,
static int get_sha1_1(const char *name, int len, unsigned char *sha1)
{
- int parent, ret;
- const char *cp;
-
- /* foo^[0-9] or foo^ (== foo^1); we do not do more than 9 parents. */
- if (len > 2 && name[len-2] == '^' &&
- name[len-1] >= '0' && name[len-1] <= '9') {
- parent = name[len-1] - '0';
- len -= 2;
- }
- else if (len > 1 && name[len-1] == '^') {
- parent = 1;
- len--;
- } else
- parent = -1;
-
- if (parent >= 0)
- return get_parent(name, len, sha1, parent);
-
- /* "name~3" is "name^^^",
- * "name~12" is "name^^^^^^^^^^^^", and
- * "name~" and "name~0" are name -- not "name^0"!
- */
- parent = 0;
- for (cp = name + len - 1; name <= cp; cp--) {
- int ch = *cp;
- if ('0' <= ch && ch <= '9')
- continue;
- if (ch != '~')
- parent = -1;
- break;
+ int parent = 0, pow10 = 1;
+ const char *cp = name + len;
+ char ch = 0; /* In case len == 0 */
+
+ /* Parse trailing number and check for ^5 or ~5 */
+ while (cp > name && (ch = *--cp) >= '0' && ch <= '9') {
+ parent += ch - '0' * pow10;
+ pow10 *= 10;
}
- if (!parent && *cp == '~') {
- int len1 = cp - name;
- cp++;
- while (cp < name + len)
- parent = parent * 10 + *cp++ - '0';
- return get_nth_ancestor(name, len1, sha1, parent);
+
+ /* Handle foo^[0-9]* case */
+ if (ch == '^') {
+ /* foo^ means foo^1, first parent */
+ if (cp + 1 == name)
+ parent = 1;
+ return get_parent(name, cp - name, sha1, parent);
}
+ /* Handle foo~[0-9]* case. name~ = name~0 = name (not name^0!) */
+ if (ch == '~')
+ return get_nth_ancestor(name, cp - name, sha1, parent);
- ret = peel_onion(name, len, sha1);
- if (!ret)
+ if (!peel_onion(name, len, sha1))
return 0;
- ret = get_sha1_basic(name, len, sha1);
- if (!ret)
+ if (!get_sha1_basic(name, len, sha1))
return 0;
+
return get_short_sha1(name, len, sha1, 0);
}
next reply other threads:[~2006-02-03 7:08 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-03 6:41 linux [this message]
-- strict thread matches above, loose matches on Subject: below --
2006-02-03 18:34 The merge from hell Brown, Len
2006-02-04 2:35 ` Junio C Hamano
2006-02-04 2:47 ` Linus Torvalds
2006-02-03 6:04 Brown, Len
2006-02-03 6:16 ` Linus Torvalds
2006-02-03 6:33 ` Junio C Hamano
2006-02-03 4:20 Brown, Len
2006-02-03 5:45 ` Linus Torvalds
2006-02-03 6:28 ` Junio C Hamano
2006-02-03 16:21 ` Dave Jones
2006-02-02 6:28 Linus Torvalds
2006-02-02 7:05 ` Junio C Hamano
2006-02-02 7:51 ` Linus Torvalds
2006-02-02 7:55 ` Linus Torvalds
2006-02-02 8:08 ` Linus Torvalds
2006-02-04 10:46 ` Paul Mackerras
2006-02-04 12:22 ` Junio C Hamano
2006-02-04 19:42 ` Linus Torvalds
2006-02-04 20:59 ` Linus Torvalds
2006-02-02 7:25 ` Marco Costalba
2006-02-02 8:02 ` Linus Torvalds
2006-02-02 8:07 ` Aneesh Kumar
2006-02-02 8:27 ` Junio C Hamano
2006-02-02 8:44 ` Linus Torvalds
2006-02-02 10:41 ` Junio C Hamano
2006-02-05 19:42 ` Linus Torvalds
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=20060203064154.21015.qmail@science.horizon.com \
--to=linux@horizon.com \
--cc=git@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).