summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/branch.c2
-rw-r--r--src/clone.c1
-rw-r--r--src/refdb.c48
-rw-r--r--src/refdb.h13
-rw-r--r--src/refdb_fs.c95
-rw-r--r--src/refs.c39
-rw-r--r--src/remote.c1
-rw-r--r--src/repository.c2
-rw-r--r--src/revwalk.c2
-rw-r--r--src/tag.c2
-rw-r--r--src/transports/local.c2
-rw-r--r--src/transports/smart_protocol.c2
12 files changed, 30 insertions, 179 deletions
diff --git a/src/branch.c b/src/branch.c
index 88f052529..74e8d843e 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -157,7 +157,7 @@ int git_branch_foreach(
filter.branch_type = list_flags;
filter.callback_payload = payload;
- return git_reference_foreach(repo, GIT_REF_LISTALL, &branch_foreach_cb, (void *)&filter);
+ return git_reference_foreach(repo, &branch_foreach_cb, (void *)&filter);
}
int git_branch_move(
diff --git a/src/clone.c b/src/clone.c
index aeb7bbf5c..49af9a1e2 100644
--- a/src/clone.c
+++ b/src/clone.c
@@ -243,7 +243,6 @@ static int update_head_to_remote(git_repository *repo, git_remote *remote)
/* Not master. Check all the other refs. */
if (git_reference_foreach(
repo,
- GIT_REF_LISTALL,
reference_matches_remote_head,
&head_info) < 0)
goto cleanup;
diff --git a/src/refdb.c b/src/refdb.c
index 269234bfa..5e33c2e38 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -152,60 +152,12 @@ void git_refdb_iterator_free(git_reference_iterator *iter)
iter->backend->iterator_free(iter);
}
-int git_refdb_foreach(
- git_refdb *db,
- unsigned int list_flags,
- git_reference_foreach_cb callback,
- void *payload)
-{
- assert(db && db->backend);
-
- return db->backend->foreach(db->backend, list_flags, callback, payload);
-}
-
struct glob_cb_data {
const char *glob;
git_reference_foreach_cb callback;
void *payload;
};
-static int fromglob_cb(const char *reference_name, void *payload)
-{
- struct glob_cb_data *data = (struct glob_cb_data *)payload;
-
- if (!p_fnmatch(data->glob, reference_name, 0))
- return data->callback(reference_name, data->payload);
-
- return 0;
-}
-
-int git_refdb_foreach_glob(
- git_refdb *db,
- const char *glob,
- unsigned int list_flags,
- git_reference_foreach_cb callback,
- void *payload)
-{
- int error;
- struct glob_cb_data data;
-
- assert(db && db->backend && glob && callback);
-
- if(db->backend->foreach_glob != NULL)
- error = db->backend->foreach_glob(db->backend,
- glob, list_flags, callback, payload);
- else {
- data.glob = glob;
- data.callback = callback;
- data.payload = payload;
-
- error = db->backend->foreach(db->backend,
- list_flags, fromglob_cb, &data);
- }
-
- return error;
-}
-
int git_refdb_write(git_refdb *db, const git_reference *ref)
{
assert(db && db->backend);
diff --git a/src/refdb.h b/src/refdb.h
index a243f627c..e88dead7a 100644
--- a/src/refdb.h
+++ b/src/refdb.h
@@ -26,19 +26,6 @@ int git_refdb_lookup(
git_refdb *refdb,
const char *ref_name);
-int git_refdb_foreach(
- git_refdb *refdb,
- unsigned int list_flags,
- git_reference_foreach_cb callback,
- void *payload);
-
-int git_refdb_foreach_glob(
- git_refdb *refdb,
- const char *glob,
- unsigned int list_flags,
- git_reference_foreach_cb callback,
- void *payload);
-
int git_refdb_iterator(git_reference_iterator **out, git_refdb *db);
int git_refdb_next(const char **out, git_reference_iterator *iter);
void git_refdb_iterator_free(git_reference_iterator *iter);
diff --git a/src/refdb_fs.c b/src/refdb_fs.c
index 62965a66b..ab04e453e 100644
--- a/src/refdb_fs.c
+++ b/src/refdb_fs.c
@@ -562,100 +562,6 @@ struct dirent_list_data {
int callback_error;
};
-static git_ref_t loose_guess_rtype(const git_buf *full_path)
-{
- git_buf ref_file = GIT_BUF_INIT;
- git_ref_t type;
-
- type = GIT_REF_INVALID;
-
- if (git_futils_readbuffer(&ref_file, full_path->ptr) == 0) {
- if (git__prefixcmp((const char *)(ref_file.ptr), GIT_SYMREF) == 0)
- type = GIT_REF_SYMBOLIC;
- else
- type = GIT_REF_OID;
- }
-
- git_buf_free(&ref_file);
- return type;
-}
-
-static int _dirent_loose_listall(void *_data, git_buf *full_path)
-{
- struct dirent_list_data *data = (struct dirent_list_data *)_data;
- const char *file_path = full_path->ptr + data->repo_path_len;
-
- if (git_path_isdir(full_path->ptr) == true)
- return git_path_direach(full_path, _dirent_loose_listall, _data);
-
- /* do not add twice a reference that exists already in the packfile */
- if (git_strmap_exists(data->backend->refcache.packfile, file_path))
- return 0;
-
- if (data->list_type != GIT_REF_LISTALL) {
- if ((data->list_type & loose_guess_rtype(full_path)) == 0)
- return 0; /* we are filtering out this reference */
- }
-
- /* Locked references aren't returned */
- if (!git__suffixcmp(file_path, GIT_FILELOCK_EXTENSION))
- return 0;
-
- if (data->callback(file_path, data->callback_payload))
- data->callback_error = GIT_EUSER;
-
- return data->callback_error;
-}
-
-static int refdb_fs_backend__foreach(
- git_refdb_backend *_backend,
- unsigned int list_type,
- git_reference_foreach_cb callback,
- void *payload)
-{
- refdb_fs_backend *backend;
- int result;
- struct dirent_list_data data;
- git_buf refs_path = GIT_BUF_INIT;
- const char *ref_name;
- void *ref = NULL;
-
- GIT_UNUSED(ref);
-
- assert(_backend);
- backend = (refdb_fs_backend *)_backend;
-
- if (packed_load(backend) < 0)
- return -1;
-
- /* list all the packed references first */
- if (list_type & GIT_REF_OID) {
- git_strmap_foreach(backend->refcache.packfile, ref_name, ref, {
- if (callback(ref_name, payload))
- return GIT_EUSER;
- });
- }
-
- /* now list the loose references, trying not to
- * duplicate the ref names already in the packed-refs file */
-
- data.repo_path_len = strlen(backend->path);
- data.list_type = list_type;
- data.backend = backend;
- data.callback = callback;
- data.callback_payload = payload;
- data.callback_error = 0;
-
- if (git_buf_joinpath(&refs_path, backend->path, GIT_REFS_DIR) < 0)
- return -1;
-
- result = git_path_direach(&refs_path, _dirent_loose_listall, &data);
-
- git_buf_free(&refs_path);
-
- return data.callback_error ? GIT_EUSER : result;
-}
-
typedef struct {
git_reference_iterator parent;
unsigned int loose;
@@ -1211,7 +1117,6 @@ int git_refdb_backend_fs(
backend->parent.exists = &refdb_fs_backend__exists;
backend->parent.lookup = &refdb_fs_backend__lookup;
- backend->parent.foreach = &refdb_fs_backend__foreach;
backend->parent.iterator = &refdb_fs_backend__iterator;
backend->parent.next = &refdb_fs_backend__next;
backend->parent.iterator_free = &refdb_fs_backend__iterator_free;
diff --git a/src/refs.c b/src/refs.c
index 4ee6235cf..a7be117ad 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -139,7 +139,7 @@ static int reference_path_available(
data.available = 1;
error = git_reference_foreach(
- repo, GIT_REF_LISTALL, _reference_available_cb, (void *)&data);
+ repo, _reference_available_cb, (void *)&data);
if (error < 0)
return error;
@@ -558,7 +558,6 @@ int git_reference_resolve(git_reference **ref_out, const git_reference *ref)
int git_reference_foreach(
git_repository *repo,
- unsigned int list_flags,
git_reference_foreach_cb callback,
void *payload)
{
@@ -566,8 +565,6 @@ int git_reference_foreach(
const char *name;
int error;
- GIT_UNUSED(list_flags);
-
if (git_reference_iterator_new(&iter, repo) < 0)
return -1;
@@ -613,8 +610,7 @@ static int cb__reflist_add(const char *ref, void *data)
int git_reference_list(
git_strarray *array,
- git_repository *repo,
- unsigned int list_flags)
+ git_repository *repo)
{
git_vector ref_list;
@@ -627,7 +623,7 @@ int git_reference_list(
return -1;
if (git_reference_foreach(
- repo, list_flags, &cb__reflist_add, (void *)&ref_list) < 0) {
+ repo, &cb__reflist_add, (void *)&ref_list) < 0) {
git_vector_free(&ref_list);
return -1;
}
@@ -925,19 +921,32 @@ int git_reference__update_terminal(
int git_reference_foreach_glob(
git_repository *repo,
const char *glob,
- unsigned int list_flags,
- int (*callback)(
- const char *reference_name,
- void *payload),
+ git_reference_foreach_cb callback,
void *payload)
{
- git_refdb *refdb;
+ git_reference_iterator *iter;
+ const char *name;
+ int error;
+
+ if (git_reference_iterator_new(&iter, repo) < 0)
+ return -1;
+
+ while ((error = git_reference_next(&name, iter)) == 0) {
+ if (p_fnmatch(glob, name, 0))
+ continue;
- assert(repo && glob && callback);
+ if (callback(name, payload)) {
+ error = GIT_EUSER;
+ goto out;
+ }
+ }
- git_repository_refdb__weakptr(&refdb, repo);
+ if (error == GIT_ITEROVER)
+ error = 0;
- return git_refdb_foreach_glob(refdb, glob, list_flags, callback, payload);
+out:
+ git_reference_iterator_free(iter);
+ return error;
}
int git_reference_has_log(
diff --git a/src/remote.c b/src/remote.c
index 6eaaf8b49..10bffec44 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -1297,7 +1297,6 @@ static int rename_remote_references(
if (git_reference_foreach(
repo,
- GIT_REF_LISTALL,
rename_cb,
&refnames) < 0)
goto cleanup;
diff --git a/src/repository.c b/src/repository.c
index e6eaf753c..80118a41f 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -1469,7 +1469,7 @@ static int at_least_one_cb(const char *refname, void *payload)
static int repo_contains_no_reference(git_repository *repo)
{
- int error = git_reference_foreach(repo, GIT_REF_LISTALL, at_least_one_cb, NULL);
+ int error = git_reference_foreach(repo, at_least_one_cb, NULL);
if (error == GIT_EUSER)
return 0;
diff --git a/src/revwalk.c b/src/revwalk.c
index 16f06624d..528d02b20 100644
--- a/src/revwalk.c
+++ b/src/revwalk.c
@@ -186,7 +186,7 @@ static int push_glob(git_revwalk *walk, const char *glob, int hide)
data.hide = hide;
if (git_reference_foreach_glob(
- walk->repo, git_buf_cstr(&buf), GIT_REF_LISTALL, push_glob_cb, &data) < 0)
+ walk->repo, git_buf_cstr(&buf), push_glob_cb, &data) < 0)
goto on_error;
regfree(&preg);
diff --git a/src/tag.c b/src/tag.c
index a4f2e2581..f81956de7 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -427,7 +427,7 @@ int git_tag_foreach(git_repository *repo, git_tag_foreach_cb cb, void *cb_data)
data.cb_data = cb_data;
data.repo = repo;
- return git_reference_foreach(repo, GIT_REF_OID, &tags_cb, &data);
+ return git_reference_foreach(repo, &tags_cb, &data);
}
typedef struct {
diff --git a/src/transports/local.c b/src/transports/local.c
index 8b4d50c14..bd3bf93bf 100644
--- a/src/transports/local.c
+++ b/src/transports/local.c
@@ -124,7 +124,7 @@ static int store_refs(transport_local *t)
assert(t);
- if (git_reference_list(&ref_names, t->repo, GIT_REF_LISTALL) < 0 ||
+ if (git_reference_list(&ref_names, t->repo) < 0 ||
git_vector_init(&t->refs, ref_names.count, NULL) < 0)
goto on_error;
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index 765b914b7..09bef1ae3 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -193,7 +193,7 @@ static int fetch_setup_walk(git_revwalk **out, git_repository *repo)
unsigned int i;
git_reference *ref;
- if (git_reference_list(&refs, repo, GIT_REF_LISTALL) < 0)
+ if (git_reference_list(&refs, repo) < 0)
return -1;
if (git_revwalk_new(&walk, repo) < 0)