diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2014-02-01 15:29:16 +0100 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-02-05 12:16:44 +0100 |
commit | af81720236f05f72cfe763208143b5dacb2f99a2 (patch) | |
tree | ee17105a7d2357a6e40832ff6348d70314f70509 /src | |
parent | d465e4e980333b3e7437801fc375b595fb3adf1f (diff) | |
download | libgit2-af81720236f05f72cfe763208143b5dacb2f99a2.tar.gz |
revwalk: remove usage of foreach
Diffstat (limited to 'src')
-rw-r--r-- | src/revwalk.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/revwalk.c b/src/revwalk.c index 63d78fe64..628057fcd 100644 --- a/src/revwalk.c +++ b/src/revwalk.c @@ -180,17 +180,12 @@ struct push_cb_data { int hide; }; -static int push_glob_cb(const char *refname, void *data_) -{ - struct push_cb_data *data = (struct push_cb_data *)data_; - return push_ref(data->walk, refname, data->hide, true); -} - static int push_glob(git_revwalk *walk, const char *glob, int hide) { int error = 0; git_buf buf = GIT_BUF_INIT; - struct push_cb_data data; + git_reference *ref; + git_reference_iterator *iter; size_t wildcard; assert(walk && glob); @@ -208,12 +203,20 @@ static int push_glob(git_revwalk *walk, const char *glob, int hide) if (!glob[wildcard]) git_buf_put(&buf, "/*", 2); - data.walk = walk; - data.hide = hide; + if ((error = git_reference_iterator_glob_new(&iter, walk->repo, buf.ptr)) < 0) + goto out; - error = git_reference_foreach_glob( - walk->repo, git_buf_cstr(&buf), push_glob_cb, &data); + while ((error = git_reference_next(&ref, iter)) == 0) { + error = push_ref(walk, git_reference_name(ref), hide, true); + git_reference_free(ref); + if (error < 0) + break; + } + git_reference_iterator_free(iter); + if (error == GIT_ITEROVER) + error = 0; +out: git_buf_free(&buf); return error; } |