From 50dd6ca54cfdfc362147f09ece4996970d0352bd Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 17 Nov 2010 04:58:32 +0200 Subject: [PATCH] Fix repository initialization We cannot assume that non-bare repositories have an index file, because 'git index' doesn't create it by default. Signed-off-by: Vicent Marti --- src/repository.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/repository.c b/src/repository.c index ef51b08e7..5dd1fdf89 100644 --- a/src/repository.c +++ b/src/repository.c @@ -68,8 +68,8 @@ int git__objtable_haskey(void *object, const void *key) static int parse_repository_folders(git_repository *repo, const char *repository_path) { - char path_aux[GIT_PATH_MAX]; - int path_len, i; + char path_aux[GIT_PATH_MAX], *last_folder; + int path_len; if (gitfo_isdir(repository_path) < 0) return GIT_ENOTAREPO; @@ -97,22 +97,24 @@ static int parse_repository_folders(git_repository *repo, const char *repository if (gitfo_exists(path_aux) < 0) return GIT_ENOTAREPO; - i = path_len - 2; - while (path_aux[i] != '/') - i--; + path_aux[path_len] = 0; - if (strcmp(path_aux, "/.git/") == 0) { + last_folder = (path_aux + path_len - 2); + + while (*last_folder != '/') + last_folder--; + + if (strcmp(last_folder, "/.git/") == 0) { repo->is_bare = 0; - path_aux[i + 1] = 0; - repo->path_workdir = git__strdup(path_aux); - /* index file */ strcpy(path_aux + path_len, "index"); - if (gitfo_exists(path_aux) < 0) - return GIT_ENOTAREPO; repo->path_index = git__strdup(path_aux); + /* working dir */ + *(last_folder + 1) = 0; + repo->path_workdir = git__strdup(path_aux); + } else { repo->is_bare = 1; repo->path_workdir = NULL; @@ -199,7 +201,7 @@ git_index *git_repository_index(git_repository *repo) if (git_index_open_inrepo(&repo->index, repo) < 0) return NULL; - assert(repo->index && repo->index->on_disk); + assert(repo->index); } return repo->index;