[PATCH] Use LF and allow comments in objects/info/alternates file.
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:04
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- sha1_file.c | 26 +++++++++++++++----------- 1 files changed, 15 insertions(+), 11 deletions(-) 9577e7e3db2299febdc17539478bba38874d4120
diff --git a/sha1_file.c b/sha1_file.c
--- a/sha1_file.c
+++ b/sha1_file.c@@ -240,14 +240,21 @@ static struct alternate_object_database * 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 c 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); }