Commit e91f9a8f by Russell Belfer

Add higher level pathspec API

Right now, setting up a pathspec to be parsed and processed
requires several data structures and a couple of API calls.  This
adds a new high level data structure that contains all the items
that you'll need and high-level APIs that do all of the setup and
all of the teardown.  This will make it easier to use pathspecs
in various places with less repeated code.
parent 84ba4944
...@@ -166,3 +166,28 @@ bool git_pathspec_match_path( ...@@ -166,3 +166,28 @@ bool git_pathspec_match_path(
return false; return false;
} }
int git_pathspec_context_init(
git_pathspec_context *ctxt, const git_strarray *paths)
{
int error = 0;
memset(ctxt, 0, sizeof(*ctxt));
ctxt->prefix = git_pathspec_prefix(paths);
if ((error = git_pool_init(&ctxt->pool, 1, 0)) < 0 ||
(error = git_pathspec_init(&ctxt->pathspec, paths, &ctxt->pool)) < 0)
git_pathspec_context_free(ctxt);
return error;
}
void git_pathspec_context_free(
git_pathspec_context *ctxt)
{
git__free(ctxt->prefix);
git_pathspec_free(&ctxt->pathspec);
git_pool_clear(&ctxt->pool);
memset(ctxt, 0, sizeof(*ctxt));
}
...@@ -37,4 +37,18 @@ extern bool git_pathspec_match_path( ...@@ -37,4 +37,18 @@ extern bool git_pathspec_match_path(
bool casefold, bool casefold,
const char **matched_pathspec); const char **matched_pathspec);
/* easy pathspec setup */
typedef struct {
char *prefix;
git_vector pathspec;
git_pool pool;
} git_pathspec_context;
extern int git_pathspec_context_init(
git_pathspec_context *ctxt, const git_strarray *paths);
extern void git_pathspec_context_free(
git_pathspec_context *ctxt);
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment