Fix ref log parsing so it works properly.
authorShawn Pearce <spearce@spearce.org>
Wed, 17 May 2006 22:34:48 +0000 (18:34 -0400)
committerJunio C Hamano <junkio@cox.net>
Thu, 18 May 2006 00:36:36 +0000 (17:36 -0700)
The log parser was only ever matching the last log record due to
calling strtoul on "> 1136091609" rather than " 1136091609".  Also
once a match for '@' has been found after the name of the ref there
is no point in looking for another '@' within the remaining text.

Signed-off-by: Junio C Hamano <junkio@cox.net>
refs.c
sha1_name.c

diff --git a/refs.c b/refs.c
index 4c99e3729f046aee48033ec128884bbb880466fc..ae9825deadeda63c7ebc2d775ad59bd66256a6a4 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -459,7 +459,7 @@ int read_ref_at(const char *ref, unsigned long at_time, unsigned char *sha1)
                        c++;
                if (c == logend || *c == '\n')
                        die("Log %s is corrupt.", logfile);
-               date = strtoul(c, NULL, 10);
+               date = strtoul(c + 1, NULL, 10);
                if (date <= at_time) {
                        if (get_sha1_hex(rec + 41, sha1))
                                die("Log %s is corrupt.", logfile);
index 3ac3ab4f585b7f6b8b1f26f5fb32e4b647d6deb0..4376cb3928d068b27618b4d41d3903f536582419 100644 (file)
@@ -267,6 +267,7 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
                        at_time = approxidate(date_spec);
                        free(date_spec);
                        len = at_mark;
+                       break;
                }
        }