Android JNI GitAdd: Use the c-lib's gitAdd instead

It finally works!
This commit is contained in:
Vishesh Handa
2019-05-15 18:27:38 +02:00
parent 0c6e13c335
commit 7bd9e4fa98
2 changed files with 26 additions and 51 deletions

View File

@ -1,7 +1,10 @@
cmake_minimum_required(VERSION 3.4.1)
set(lib_src_DIR ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI})
include_directories(${lib_src_DIR}/include)
include_directories(
${lib_src_DIR}/include
${CMAKE_SOURCE_DIR}/../../../../../gj_common/
)
add_library(openssl-lib
STATIC
@ -45,6 +48,7 @@ set_target_properties(git2-lib
add_library(native-lib
SHARED
${CMAKE_SOURCE_DIR}/../../../../../gj_common/gitjournal.c
keygen.c
git.c
)

View File

@ -6,68 +6,39 @@
#include <android/log.h>
#include <errno.h>
#include <git2.h>
#include "gitjournal.h"
int match_cb(const char *path, const char *spec, void *payload)
{
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Match: %s\n", path);
void gj_log(const char *message) {
__android_log_print(ANDROID_LOG_ERROR, "GitJournalLib", "%s", message);
}
int handle_error(int err) {
if (err != 0) {
const gj_error *e = gj_error_info(err);
if (e) {
__android_log_print("Error %d/%d: %s\n", err, e->code, e->message);
gj_error_free(e);
}
}
return err;
}
JNIEXPORT jstring JNICALL
Java_io_gitjournal_gitjournal_Git_add(
JNIEnv *env,
jobject this_obj,
jstring jni_git_base_path,
jstring jni_add_pattern)
{
jstring jni_add_pattern) {
const char *git_base_path = (*env)->GetStringUTFChars(env, jni_git_base_path, 0);
const char *add_pattern = (*env)->GetStringUTFChars(env, jni_add_pattern, 0);
int error;
// FIXME: This should be done somewhere else!
gj_init();
// FIXME: Do this somewhere else
git_libgit2_init();
git_repository *repo = NULL;
error = git_repository_open(&repo, git_base_path);
if (error < 0) {
const git_error *e = giterr_last();
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Error %d/%d: %s\n", error, e->klass, e->message);
return (*env)->NewStringUTF(env, "Error");
}
git_index *idx = NULL;
error = git_repository_index(&idx, repo);
if (error < 0) {
const git_error *e = giterr_last();
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Error %d/%d: %s\n", error, e->klass, e->message);
return (*env)->NewStringUTF(env, "Error");
}
const char *paths[] = {add_pattern};
git_strarray pathspec = {paths, 1};
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Add Pattern: %s", add_pattern);
error = git_index_add_all(idx, &pathspec, GIT_INDEX_ADD_DEFAULT, match_cb, NULL);
if (error < 0) {
const git_error *e = giterr_last();
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Error %d/%d: %s\n", error, e->klass, e->message);
return (*env)->NewStringUTF(env, "Error");
}
error = git_index_write(idx);
if (error < 0) {
const git_error *e = giterr_last();
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Error %d/%d: %s\n", error, e->klass, e->message);
return (*env)->NewStringUTF(env, "Error");
}
git_index_free(idx);
if (error < 0) {
const git_error *e = giterr_last();
__android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Error %d/%d: %s\n", error, e->klass, e->message);
int err = gj_git_add(git_base_path, add_pattern);
if (err < 0) {
handle_error(err);
return (*env)->NewStringUTF(env, "Error");
}