diff options
author | Vicent Marti <tanoku@gmail.com> | 2011-06-03 19:59:16 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-06-03 20:01:18 +0200 |
commit | 0291b5b76bd8dcbac1118533c7a79a619ade766c (patch) | |
tree | 199f3282d71a1cdbc8ce18fd4b3ab598362d7358 /src/odb.c | |
parent | 1e9b7a09ff3d16c3d7a132cfaacb9d68b253e924 (diff) | |
download | libgit2-0291b5b76bd8dcbac1118533c7a79a619ade766c.tar.gz |
odb: Fix loading ODB alternates
Fixed an issue with the `strtokz implementation and added support for
comments and relative paths in the alternates file.
Diffstat (limited to 'src/odb.c')
-rw-r--r-- | src/odb.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -321,8 +321,7 @@ static int add_default_backends(git_odb *db, const char *objects_dir, int as_alt static int load_alternates(git_odb *odb, const char *objects_dir) { char alternates_path[GIT_PATH_MAX]; - char alternate[GIT_PATH_MAX]; - char *buffer; + char *buffer, *alternate; gitfo_buf alternates_buf = GITFO_BUF_INIT; int error; @@ -339,8 +338,21 @@ static int load_alternates(git_odb *odb, const char *objects_dir) error = GIT_SUCCESS; /* add each alternate as a new backend; one alternate per line */ - while ((error == GIT_SUCCESS) && (buffer = git__strtok(alternate, buffer, "\r\n")) != NULL) - error = add_default_backends(odb, alternate, 1); + while ((alternate = git__strtok(&buffer, "\r\n")) != NULL) { + char full_path[GIT_PATH_MAX]; + + if (*alternate == '\0' || *alternate == '#') + continue; + + /* relative path: build based on the current `objects` folder */ + if (*alternate == '.') { + git__joinpath(full_path, objects_dir, alternate); + alternate = full_path; + } + + if ((error = add_default_backends(odb, alternate, 1)) < GIT_SUCCESS) + break; + } gitfo_free_buf(&alternates_buf); if (error < GIT_SUCCESS) |