summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-08-17 01:22:05 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-08-17 05:22:35 (GMT)
commit9577e7e3db2299febdc17539478bba38874d4120 (patch)
tree6a5f9babb639b0b263f3ec94b81c2446290637eb
parentaf5260ee785b8418c7319a84b1d1a0d26e770ed0 (diff)
downloadgit-9577e7e3db2299febdc17539478bba38874d4120.zip
git-9577e7e3db2299febdc17539478bba38874d4120.tar.gz
git-9577e7e3db2299febdc17539478bba38874d4120.tar.bz2
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>
-rw-r--r--sha1_file.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/sha1_file.c b/sha1_file.c
index b6ebbc5..7766977 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);
}