diff options
author | Junio C Hamano <junkio@cox.net> | 2005-08-16 18:22:05 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-08-16 22:22:35 -0700 |
commit | 9577e7e3db2299febdc17539478bba38874d4120 (patch) | |
tree | 6a5f9babb639b0b263f3ec94b81c2446290637eb /sha1_file.c | |
parent | af5260ee785b8418c7319a84b1d1a0d26e770ed0 (diff) | |
download | git-9577e7e3db2299febdc17539478bba38874d4120.tar.gz git-9577e7e3db2299febdc17539478bba38874d4120.tar.xz |
Use LF and allow comments in objects/info/alternates file.
Yes, using the same format for the file and the environment variable
was a big mistake. This uses LF as the path separator, and allows
lines that begin with '#' to be comments. ':' is no longer a separator
in objects/info/alternates file.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/sha1_file.c b/sha1_file.c index b6ebbc5c9..776697755 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -240,14 +240,21 @@ static struct alternate_object_database **alt_odb_tail; * SHA1, an extra slash for the first level indirection, and the * terminating NUL. */ -static void link_alt_odb_entries(const char *alt, const char *ep) +static void link_alt_odb_entries(const char *alt, const char *ep, int sep) { const char *cp, *last; struct alternate_object_database *ent; last = alt; - do { - for (cp = last; cp < ep && *cp != ':'; cp++) + while (last < ep) { + cp = last; + if (cp < ep && *cp == '#') { + while (cp < ep && *cp != sep) + cp++; + last = cp + 1; + continue; + } + for ( ; cp < ep && *cp != sep; cp++) ; if (last != cp) { /* 43 = 40-byte + 2 '/' + terminating NUL */ @@ -264,16 +271,16 @@ static void link_alt_odb_entries(const char *alt, const char *ep) ent->base[pfxlen] = ent->base[pfxlen + 3] = '/'; ent->base[entlen-1] = 0; } - while (cp < ep && *cp == ':') + while (cp < ep && *cp == sep) cp++; last = cp; - } while (cp < ep); + } } void prepare_alt_odb(void) { char path[PATH_MAX]; - char *map, *ep; + char *map; int fd; struct stat st; char *alt = gitenv(ALTERNATE_DB_ENVIRONMENT) ? : ""; @@ -282,7 +289,7 @@ void prepare_alt_odb(void) if (alt_odb_tail) return; alt_odb_tail = &alt_odb_list; - link_alt_odb_entries(alt, alt + strlen(alt)); + link_alt_odb_entries(alt, alt + strlen(alt), ':'); fd = open(path, O_RDONLY); if (fd < 0) @@ -296,10 +303,7 @@ void prepare_alt_odb(void) if (map == MAP_FAILED) return; - /* Remove the trailing newline */ - for (ep = map + st.st_size - 1; map < ep && ep[-1] == '\n'; ep--) - ; - link_alt_odb_entries(map, ep); + link_alt_odb_entries(map, map + st.st_size, '\n'); munmap(map, st.st_size); } |