summaryrefslogtreecommitdiff
path: root/src/iterator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/iterator.c')
-rw-r--r--src/iterator.c102
1 files changed, 46 insertions, 56 deletions
diff --git a/src/iterator.c b/src/iterator.c
index c10b9ffc2..5cc01ccbc 100644
--- a/src/iterator.c
+++ b/src/iterator.c
@@ -34,25 +34,24 @@ static const git_tree_entry *tree_iterator__tree_entry(tree_iterator *ti)
static int tree_iterator__current(
git_iterator *self, const git_index_entry **entry)
{
- int error;
tree_iterator *ti = (tree_iterator *)self;
const git_tree_entry *te = tree_iterator__tree_entry(ti);
*entry = NULL;
if (te == NULL)
- return GIT_SUCCESS;
+ return 0;
ti->entry.mode = te->attr;
git_oid_cpy(&ti->entry.oid, &te->oid);
- error = git_buf_joinpath(&ti->path, ti->path.ptr, te->filename);
- if (error < GIT_SUCCESS)
- return error;
+ if (git_buf_joinpath(&ti->path, ti->path.ptr, te->filename) < 0)
+ return -1;
+
ti->entry.path = ti->path.ptr;
*entry = &ti->entry;
- return GIT_SUCCESS;
+ return 0;
}
static int tree_iterator__at_end(git_iterator *self)
@@ -63,7 +62,8 @@ static int tree_iterator__at_end(git_iterator *self)
static tree_iterator_frame *tree_iterator__alloc_frame(git_tree *tree)
{
tree_iterator_frame *tf = git__calloc(1, sizeof(tree_iterator_frame));
- tf->tree = tree;
+ if (tf != NULL)
+ tf->tree = tree;
return tf;
}
@@ -75,24 +75,22 @@ static int tree_iterator__expand_tree(tree_iterator *ti)
tree_iterator_frame *tf;
while (te != NULL && entry_is_tree(te)) {
- error = git_tree_lookup(&subtree, ti->repo, &te->oid);
- if (error != GIT_SUCCESS)
+ if ((error = git_tree_lookup(&subtree, ti->repo, &te->oid)) < 0)
return error;
if ((tf = tree_iterator__alloc_frame(subtree)) == NULL)
- return GIT_ENOMEM;
+ return -1;
tf->next = ti->stack;
ti->stack = tf;
- error = git_buf_joinpath(&ti->path, ti->path.ptr, te->filename);
- if (error < GIT_SUCCESS)
- return error;
+ if (git_buf_joinpath(&ti->path, ti->path.ptr, te->filename) < 0)
+ return -1;
te = tree_iterator__tree_entry(ti);
}
- return GIT_SUCCESS;
+ return 0;
}
static void tree_iterator__pop_frame(tree_iterator *ti)
@@ -107,7 +105,7 @@ static void tree_iterator__pop_frame(tree_iterator *ti)
static int tree_iterator__advance(
git_iterator *self, const git_index_entry **entry)
{
- int error = GIT_SUCCESS;
+ int error = 0;
tree_iterator *ti = (tree_iterator *)self;
const git_tree_entry *te = NULL;
@@ -129,7 +127,7 @@ static int tree_iterator__advance(
if (te && entry_is_tree(te))
error = tree_iterator__expand_tree(ti);
- if (error == GIT_SUCCESS && entry != NULL)
+ if (!error && entry != NULL)
error = tree_iterator__current(self, entry);
return error;
@@ -158,8 +156,7 @@ int git_iterator_for_tree(
{
int error;
tree_iterator *ti = git__calloc(1, sizeof(tree_iterator));
- if (!ti)
- return GIT_ENOMEM;
+ GITERR_CHECK_ALLOC(ti);
ti->base.type = GIT_ITERATOR_TREE;
ti->base.current = tree_iterator__current;
@@ -170,11 +167,10 @@ int git_iterator_for_tree(
ti->repo = repo;
ti->stack = tree_iterator__alloc_frame(tree);
- if ((error = tree_iterator__expand_tree(ti)) < GIT_SUCCESS)
+ if ((error = tree_iterator__expand_tree(ti)) < 0)
git_iterator_free((git_iterator *)ti);
else
*iter = (git_iterator *)ti;
-
return error;
}
@@ -190,7 +186,7 @@ static int index_iterator__current(
{
index_iterator *ii = (index_iterator *)self;
*entry = git_index_get(ii->index, ii->current);
- return GIT_SUCCESS;
+ return 0;
}
static int index_iterator__at_end(git_iterator *self)
@@ -207,14 +203,14 @@ static int index_iterator__advance(
ii->current++;
if (entry)
*entry = git_index_get(ii->index, ii->current);
- return GIT_SUCCESS;
+ return 0;
}
static int index_iterator__reset(git_iterator *self)
{
index_iterator *ii = (index_iterator *)self;
ii->current = 0;
- return GIT_SUCCESS;
+ return 0;
}
static void index_iterator__free(git_iterator *self)
@@ -228,8 +224,7 @@ int git_iterator_for_index(git_repository *repo, git_iterator **iter)
{
int error;
index_iterator *ii = git__calloc(1, sizeof(index_iterator));
- if (!ii)
- return GIT_ENOMEM;
+ GITERR_CHECK_ALLOC(ii);
ii->base.type = GIT_ITERATOR_INDEX;
ii->base.current = index_iterator__current;
@@ -239,7 +234,7 @@ int git_iterator_for_index(git_repository *repo, git_iterator **iter)
ii->base.free = index_iterator__free;
ii->current = 0;
- if ((error = git_repository_index(&ii->index, repo)) < GIT_SUCCESS)
+ if ((error = git_repository_index(&ii->index, repo)) < 0)
git__free(ii);
else
*iter = (git_iterator *)ii;
@@ -269,8 +264,8 @@ static workdir_iterator_frame *workdir_iterator__alloc_frame(void)
{
workdir_iterator_frame *wf = git__calloc(1, sizeof(workdir_iterator_frame));
if (wf == NULL)
- return wf;
- if (git_vector_init(&wf->entries, 0, git_path_with_stat_cmp) != GIT_SUCCESS) {
+ return NULL;
+ if (git_vector_init(&wf->entries, 0, git_path_with_stat_cmp) != 0) {
git__free(wf);
return NULL;
}
@@ -294,11 +289,10 @@ static int workdir_iterator__expand_dir(workdir_iterator *wi)
{
int error;
workdir_iterator_frame *wf = workdir_iterator__alloc_frame();
- if (wf == NULL)
- return GIT_ENOMEM;
+ GITERR_CHECK_ALLOC(wf);
error = git_path_dirload_with_stat(wi->path.ptr, wi->root_len, &wf->entries);
- if (error < GIT_SUCCESS || wf->entries.length == 0) {
+ if (error < 0 || wf->entries.length == 0) {
workdir_iterator__free_frame(wf);
return GIT_ENOTFOUND;
}
@@ -321,7 +315,7 @@ static int workdir_iterator__current(
{
workdir_iterator *wi = (workdir_iterator *)self;
*entry = (wi->entry.path == NULL) ? NULL : &wi->entry;
- return GIT_SUCCESS;
+ return 0;
}
static int workdir_iterator__at_end(git_iterator *self)
@@ -341,7 +335,7 @@ static int workdir_iterator__advance(
*entry = NULL;
if (wi->entry.path == NULL)
- return GIT_SUCCESS;
+ return 0;
while ((wf = wi->stack) != NULL) {
next = git_vector_get(&wf->entries, ++wf->index);
@@ -359,13 +353,13 @@ static int workdir_iterator__advance(
if (wi->stack == NULL) {
memset(&wi->entry, 0, sizeof(wi->entry));
- return GIT_SUCCESS;
+ return 0;
}
}
error = workdir_iterator__update_entry(wi);
- if (error == GIT_SUCCESS && entry != NULL)
+ if (!error && entry != NULL)
error = workdir_iterator__current(self, entry);
return error;
@@ -382,7 +376,7 @@ static int workdir_iterator__reset(git_iterator *self)
}
if (wi->stack)
wi->stack->index = 0;
- return GIT_SUCCESS;
+ return 0;
}
static void workdir_iterator__free(git_iterator *self)
@@ -405,9 +399,8 @@ static int workdir_iterator__update_entry(workdir_iterator *wi)
git_path_with_stat *ps = git_vector_get(&wi->stack->entries, wi->stack->index);
git_buf_truncate(&wi->path, wi->root_len);
- error = git_buf_put(&wi->path, ps->path, ps->path_len);
- if (error < GIT_SUCCESS)
- return error;
+ if (git_buf_put(&wi->path, ps->path, ps->path_len) < 0)
+ return -1;
memset(&wi->entry, 0, sizeof(wi->entry));
wi->entry.path = ps->path;
@@ -431,27 +424,26 @@ static int workdir_iterator__update_entry(workdir_iterator *wi)
/* if this is a file type we don't handle, treat as ignored */
if (wi->entry.mode == 0)
- return GIT_SUCCESS;
+ return 0;
/* okay, we are far enough along to look up real ignore rule */
error = git_ignore__lookup(&wi->ignores, wi->entry.path, &wi->is_ignored);
- if (error != GIT_SUCCESS)
- return GIT_SUCCESS;
+ if (error < 0)
+ return 0;
/* detect submodules */
if (S_ISDIR(wi->entry.mode) &&
git_path_contains(&wi->path, DOT_GIT) == true)
wi->entry.mode = S_IFGITLINK;
- return GIT_SUCCESS;
+ return 0;
}
int git_iterator_for_workdir(git_repository *repo, git_iterator **iter)
{
int error;
workdir_iterator *wi = git__calloc(1, sizeof(workdir_iterator));
- if (!wi)
- return GIT_ENOMEM;
+ GITERR_CHECK_ALLOC(wi);
wi->base.type = GIT_ITERATOR_WORKDIR;
wi->base.current = workdir_iterator__current;
@@ -461,19 +453,17 @@ int git_iterator_for_workdir(git_repository *repo, git_iterator **iter)
wi->base.free = workdir_iterator__free;
wi->repo = repo;
- error = git_buf_sets(&wi->path, git_repository_workdir(repo));
- if (error == GIT_SUCCESS)
- error = git_path_to_dir(&wi->path);
- if (error == GIT_SUCCESS)
- error = git_ignore__for_path(repo, "", &wi->ignores);
- if (error != GIT_SUCCESS) {
+ if (git_buf_sets(&wi->path, git_repository_workdir(repo)) < 0 ||
+ git_path_to_dir(&wi->path) < 0 ||
+ git_ignore__for_path(repo, "", &wi->ignores) < 0)
+ {
git__free(wi);
- return error;
+ return -1;
}
wi->root_len = wi->path.size;
- if ((error = workdir_iterator__expand_dir(wi)) < GIT_SUCCESS)
+ if ((error = workdir_iterator__expand_dir(wi)) < 0)
git_iterator_free((git_iterator *)wi);
else
*iter = (git_iterator *)wi;
@@ -487,7 +477,7 @@ int git_iterator_current_tree_entry(
{
*tree_entry = (iter->type != GIT_ITERATOR_TREE) ? NULL :
tree_iterator__tree_entry((tree_iterator *)iter);
- return GIT_SUCCESS;
+ return 0;
}
int git_iterator_current_is_ignored(git_iterator *iter)
@@ -504,10 +494,10 @@ int git_iterator_advance_into_directory(
if (iter->type == GIT_ITERATOR_WORKDIR &&
wi->entry.path && S_ISDIR(wi->entry.mode))
{
- if (workdir_iterator__expand_dir(wi) < GIT_SUCCESS)
+ if (workdir_iterator__expand_dir(wi) < 0)
/* if error loading or if empty, skip the directory. */
return workdir_iterator__advance(iter, entry);
}
- return entry ? git_iterator_current(iter, entry) : GIT_SUCCESS;
+ return entry ? git_iterator_current(iter, entry) : 0;
}