From f41ff25a59a385de1e0edb2a5335bdaf08f47d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Mon, 1 Apr 2013 15:08:05 +0200 Subject: [PATCH] Expose git_libgit2_version --- c_src/geef.c | 2 ++ c_src/library.c | 11 +++++++++++ c_src/library.h | 6 ++++++ src/geef.erl | 7 +++++++ 4 files changed, 26 insertions(+) create mode 100644 c_src/library.c create mode 100644 c_src/library.h diff --git a/c_src/geef.c b/c_src/geef.c index c55e49f..873f7f6 100644 --- a/c_src/geef.c +++ b/c_src/geef.c @@ -6,6 +6,7 @@ #include "commit.h" #include "tree.h" #include "blob.h" +#include "library.h" #include "geef.h" #include #include @@ -112,6 +113,7 @@ static ErlNifFunc geef_funcs[] = {"tree_bypath", 2, geef_tree_bypath}, {"blob_size", 1, geef_blob_size}, {"blob_content", 1, geef_blob_content}, + {"library_version", 0, geef_library_version}, }; ERL_NIF_INIT(geef, geef_funcs, load, NULL, upgrade, unload) diff --git a/c_src/library.c b/c_src/library.c new file mode 100644 index 0000000..ea18bf0 --- /dev/null +++ b/c_src/library.c @@ -0,0 +1,11 @@ +#include "erl_nif.h" +#include + +ERL_NIF_TERM geef_library_version(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) +{ + int major, minor, rev; + + git_libgit2_version(&major, &minor, &rev); + + return enif_make_tuple3(env, enif_make_int(env, major), enif_make_int(env, minor), enif_make_int(env, rev)); +} diff --git a/c_src/library.h b/c_src/library.h new file mode 100644 index 0000000..06cf0eb --- /dev/null +++ b/c_src/library.h @@ -0,0 +1,6 @@ +#ifndef GEEF_LIBRARY_H +#define GEEF_LIBRARY_H + +ERL_NIF_TERM geef_library_version(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]); + +#endif diff --git a/src/geef.erl b/src/geef.erl index 60f0261..5596ae9 100644 --- a/src/geef.erl +++ b/src/geef.erl @@ -16,6 +16,9 @@ % objects -export([object_lookup/2, object_id/1, commit_tree_id/1, commit_tree/1, tree_bypath/2, blob_size/1, blob_content/1]). +% git_libgit2 +-export([library_version/0]). + -on_load(load_enif/0). hex_to_raw(_Val) -> @@ -108,6 +111,10 @@ blob_size(_ObjHandle) -> blob_content(_ObjHandle) -> nif_error(?LINE). +-spec library_version() -> {integer, integer, integer}. +library_version() -> + nif_error(?LINE). + nif_error(Line) -> erlang:nif_error({nif_not_loaded,module,?MODULE,line,Line}).