Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2013-08-09 12:37:35 +0400
committerCarlos Martín Nieto <cmn@dwim.me>2013-08-12 13:40:57 +0400
commitd8488b981c1410dd2de2f9fe99764bdae33ca607 (patch)
tree97a3883e3841df6a132b516b9922fa573a842dcb /src/config.c
parent54f3a572b4fac419008afa83da56c1b0daee1257 (diff)
config: implement _foreach and _foreach_match on top of the iterator directly
Use a glob iterator instead of going through git_config_backend_foreach_match. This function is left as it's exposed in the API.
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/config.c b/src/config.c
index 9d809f8f1..3881d73dd 100644
--- a/src/config.c
+++ b/src/config.c
@@ -455,12 +455,12 @@ int git_config_iterator_glob_new(git_config_iterator **out, const git_config *cf
}
iter->parent.next = all_iter_glob_next;
+ iter->parent.free = all_iter_glob_free;
} else {
iter->parent.next = all_iter_next;
+ iter->parent.free = all_iter_free;
}
- iter->parent.free = all_iter_glob_free;
-
iter->i = cfg->files.length;
iter->cfg = cfg;
@@ -527,18 +527,27 @@ int git_config_foreach_match(
git_config_foreach_cb cb,
void *payload)
{
- int ret = 0;
- size_t i;
- file_internal *internal;
- git_config_backend *file;
+ int error;
+ git_config_iterator *iter;
+ git_config_entry *entry;
- for (i = 0; i < cfg->files.length && ret == 0; ++i) {
- internal = git_vector_get(&cfg->files, i);
- file = internal->file;
- ret = git_config_backend_foreach_match(file, regexp, cb, payload);
+ if ((error = git_config_iterator_glob_new(&iter, cfg, regexp)) < 0)
+ return error;
+
+ while ((error = git_config_next(&entry, iter)) == 0) {
+ if(cb(entry, payload)) {
+ giterr_clear();
+ error = GIT_EUSER;
+ break;
+ }
}
- return ret;
+ git_config_iterator_free(iter);
+
+ if (error == GIT_ITEROVER)
+ error = 0;
+
+ return error;
}
/**************