Beispiel #1
0
int git_reference_foreach(
	git_repository *repo,
	git_reference_foreach_cb callback,
	void *payload)
{
	git_reference_iterator *iter;
	git_reference *ref;
	int error;

	if ((error = git_reference_iterator_new(&iter, repo)) < 0)
		return error;

	while (!(error = git_reference_next(&ref, iter))) {
		if ((error = callback(ref, payload)) != 0) {
			giterr_set_after_callback(error);
			break;
		}
	}

	if (error == GIT_ITEROVER)
		error = 0;

	git_reference_iterator_free(iter);
	return error;
}
Beispiel #2
0
int git_reference_foreach_glob(
	git_repository *repo,
	const char *glob,
	git_reference_foreach_name_cb callback,
	void *payload)
{
	git_reference_iterator *iter;
	const char *refname;
	int error;

	if ((error = git_reference_iterator_glob_new(&iter, repo, glob)) < 0)
		return error;

	while (!(error = git_reference_next_name(&refname, iter))) {
		if ((error = callback(refname, payload)) != 0) {
			giterr_set_after_callback(error);
			break;
		}
	}

	if (error == GIT_ITEROVER)
		error = 0;

	git_reference_iterator_free(iter);
	return error;
}
Beispiel #3
0
int git_reference_foreach_glob(
	git_repository *repo,
	const char *glob,
	git_reference_foreach_name_cb callback,
	void *payload)
{
	git_reference_iterator *iter;
	const char *refname;
	int error;

	if (git_reference_iterator_glob_new(&iter, repo, glob) < 0)
		return -1;

	while ((error = git_reference_next_name(&refname, iter)) == 0) {
		if (callback(refname, payload)) {
			error = GIT_EUSER;
			goto out;
		}
	}

	if (error == GIT_ITEROVER)
		error = 0;

out:
	git_reference_iterator_free(iter);
	return error;
}
Beispiel #4
0
void git_branch_iterator_free(git_branch_iterator *_iter)
{
	branch_iter *iter = (branch_iter *) _iter;

	git_reference_iterator_free(iter->iter);
	git__free(iter);
}
Beispiel #5
0
int git_reference_foreach(
	git_repository *repo,
	git_reference_foreach_cb callback,
	void *payload)
{
	git_reference_iterator *iter;
	git_reference *ref;
	int error;

	if (git_reference_iterator_new(&iter, repo) < 0)
		return -1;

	while ((error = git_reference_next(&ref, iter)) == 0) {
		if (callback(ref, payload)) {
			error = GIT_EUSER;
			goto out;
		}
	}

	if (error == GIT_ITEROVER)
		error = 0;

out:
	git_reference_iterator_free(iter);
	return error;
}
Beispiel #6
0
static void *iterate_refs(void *arg)
{
	struct th_data *data = (struct th_data *) arg;
	git_reference_iterator *i;
	git_reference *ref;
	int count = 0, error;
	git_repository *repo;

	cl_git_thread_pass(data, git_repository_open(&repo, data->path));
	do {
		error = git_reference_iterator_new(&i, repo);
	} while (error == GIT_ELOCKED);
	cl_git_thread_pass(data, error);

	for (count = 0; !git_reference_next(&ref, i); ++count) {
		cl_assert(ref != NULL);
		git_reference_free(ref);
	}

	if (g_expected > 0)
		cl_assert_equal_i(g_expected, count);

	git_reference_iterator_free(i);

	git_repository_free(repo);
	git_error_clear();
	return arg;
}
Beispiel #7
0
void git_branch_iterator_free(git_branch_iterator *_iter)
{
	branch_iter *iter = (branch_iter *) _iter;

	if (iter == NULL)
		return;

	git_reference_iterator_free(iter->iter);
	git__free(iter);
}
Beispiel #8
0
int git_branch_foreach(
	git_repository *repo,
	unsigned int list_flags,
	git_branch_foreach_cb callback,
	void *payload)
{
	git_reference_iterator *iter;
	git_reference *ref;
	int error = 0;

	if (git_reference_iterator_new(&iter, repo) < 0)
		return -1;

	while ((error = git_reference_next(&ref, iter)) == 0) {
		if (list_flags & GIT_BRANCH_LOCAL &&
		    git__prefixcmp(ref->name, GIT_REFS_HEADS_DIR) == 0) {
			if (callback(ref->name + strlen(GIT_REFS_HEADS_DIR),
					GIT_BRANCH_LOCAL, payload)) {
				error = GIT_EUSER;
			}
		}

		if (list_flags & GIT_BRANCH_REMOTE &&
		    git__prefixcmp(ref->name, GIT_REFS_REMOTES_DIR) == 0) {
			if (callback(ref->name + strlen(GIT_REFS_REMOTES_DIR),
					GIT_BRANCH_REMOTE, payload)) {
				error = GIT_EUSER;
			}
		}

		git_reference_free(ref);

		/* check if the callback has cancelled iteration */
		if (error == GIT_EUSER)
			break;
	}

	if (error == GIT_ITEROVER)
		error = 0;

	git_reference_iterator_free(iter);
	return error;
}
Beispiel #9
0
static void *iterate_refs(void *arg)
{
	git_reference_iterator *i;
	git_reference *ref;
	int count = 0;

	cl_git_pass(git_reference_iterator_new(&i, g_repo));

	for (count = 0; !git_reference_next(&ref, i); ++count) {
		cl_assert(ref != NULL);
		git_reference_free(ref);
	}

	if (g_expected > 0)
		cl_assert_equal_i(g_expected, count);

	git_reference_iterator_free(i);

	giterr_clear();
	return arg;
}
Beispiel #10
0
static int push_glob(git_revwalk *walk, const char *glob, int hide)
{
	int error = 0;
	git_buf buf = GIT_BUF_INIT;
	git_reference *ref;
	git_reference_iterator *iter;
	size_t wildcard;

	assert(walk && glob);

	/* refs/ is implied if not given in the glob */
	if (git__prefixcmp(glob, GIT_REFS_DIR) != 0)
		git_buf_joinpath(&buf, GIT_REFS_DIR, glob);
	else
		git_buf_puts(&buf, glob);
	if (git_buf_oom(&buf))
		return -1;

	/* If no '?', '*' or '[' exist, we append '/ *' to the glob */
	wildcard = strcspn(glob, "?*[");
	if (!glob[wildcard])
		git_buf_put(&buf, "/*", 2);

	if ((error = git_reference_iterator_glob_new(&iter, walk->repo, buf.ptr)) < 0)
		goto out;

	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;
}
Beispiel #11
0
int luagi_reference_iterator_free( lua_State *L )
{
   git_reference_iterator **iter = checkreferenceiter_at( L, 1 );
   git_reference_iterator_free( *iter );
   return 0;
}