diff options
author | Richard Maw <richard.maw@gmail.com> | 2017-05-13 14:15:04 +0100 |
---|---|---|
committer | Richard Maw <richard.maw@gmail.com> | 2017-05-13 14:15:04 +0100 |
commit | 7acacb951b8a099b901b1f3b5e67f1d4c69cbfe3 (patch) | |
tree | b1170cbf4a19dfc8d48f7ec9834c9a1e26eb7c61 | |
parent | 2989f8359d04ce67a3607984fe402a12353e46b3 (diff) | |
download | gall-7acacb951b8a099b901b1f3b5e67f1d4c69cbfe3.tar.gz |
ll.git2: Add revparse_single interface
This permits a wider range of git revision specifications
to be parsed without falling back to the command-line.
-rw-r--r-- | lib/gall/ll/git2.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/gall/ll/git2.c b/lib/gall/ll/git2.c index ce72244..785f1dc 100644 --- a/lib/gall/ll/git2.c +++ b/lib/gall/ll/git2.c @@ -398,6 +398,30 @@ static int L_get_tree_table(lua_State *L) } /** + * Lookup the SHA1 pointed at by a sha1ish. + * + * @function revparse_single + * @tparam llrepo repository The repository to look up the reference in. + * @tparam string ref The sha1ish to look up. + * @treturn string The OID (SHA1) of the referent (or nil on error). + * @treturn string The error message if the OID is nil. + */ + +static int L_revparse_single(lua_State *L) +{ + git_repository *repo = to_repo(L, 1); + const char *sha1ish = luaL_checkstring(L, 2); + git_object *obj; + int ret; + if ((ret = git_revparse_single(&obj, repo, sha1ish)) != 0) { + return push_git2_error(L, ret); + } + ret = format_oid(L, git_object_id(obj)); + git_object_free(obj); + return ret; +} + +/** * The version of libgit2 which this instance of gall was built against. * * When Gall is compiled, the version of libgit2 is baked into the C binding @@ -443,6 +467,7 @@ int luaopen_gall_ll_git2(lua_State *L) BASIC_FUNC(get_object_type); BASIC_FUNC(get_object_raw); BASIC_FUNC(get_tree_table); + BASIC_FUNC(revparse_single); #if LIBGIT2_SOVERSION > 22 git_libgit2_init(); |