Exemplo n.º 1
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;
}
Exemplo n.º 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;
}
Exemplo n.º 3
0
// normal from glob and just names
int luagi_reference_iterator( lua_State *L )
{
   git_repository **repo = checkrepo( L, 1 );
   const char *glob = luaL_optstring( L, 2, NULL );

   git_reference_iterator **iter = lua_newuserdata( L, sizeof( git_reference_iterator * ) );
   int ret = 0;
   if( glob == NULL )
   {
      ret = git_reference_iterator_new( iter, *repo ); 
   } 
   else
   {
      ret = git_reference_iterator_glob_new ( iter, *repo, glob );
   }

   if( ret )
   {
      ltk_error_abort( L );
      return 0;
   }

   luaL_getmetatable(L, LUAGI_REFERENCE_ITER_FUNCS);
   lua_setmetatable(L, -2);

   lua_pushcclosure( L, reference_iter, 1 );
   return 1; 
}
Exemplo n.º 4
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;
}