From 1dbe82937205eafd92fba7810bb7f8cecb38670f Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Tue, 14 May 2019 16:36:25 +0200 Subject: [PATCH] GitAdd: Use libgit2 instead of jgit This doesn't seem to work properly, though. Not sure what I'm doing wrong. --- android/app/src/main/cpp/CMakeLists.txt | 1 + android/app/src/main/cpp/git.c | 77 +++++++++++++++++++ android/app/src/main/cpp/keygen.c | 2 +- .../java/io/gitjournal/gitjournal/Git.java | 2 + .../io/gitjournal/gitjournal/GitAddTask.java | 31 +------- 5 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 android/app/src/main/cpp/git.c diff --git a/android/app/src/main/cpp/CMakeLists.txt b/android/app/src/main/cpp/CMakeLists.txt index fd1174ef..66bc9faf 100644 --- a/android/app/src/main/cpp/CMakeLists.txt +++ b/android/app/src/main/cpp/CMakeLists.txt @@ -46,6 +46,7 @@ set_target_properties(git2-lib add_library(native-lib SHARED keygen.c + git.c ) # The order of these libraries is super dooper important diff --git a/android/app/src/main/cpp/git.c b/android/app/src/main/cpp/git.c new file mode 100644 index 00000000..fbad9bd8 --- /dev/null +++ b/android/app/src/main/cpp/git.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include + +#include +#include + +#include + +int match_cb(const char *path, const char *spec, void *payload) +{ + __android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Match: %s\n", path); +} + + +JNIEXPORT jstring JNICALL +Java_io_gitjournal_gitjournal_Git_add( + JNIEnv *env, + jobject this_obj, + jstring jni_git_base_path, + 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: 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); + return (*env)->NewStringUTF(env, "Error"); + } + + __android_log_print(ANDROID_LOG_ERROR, "GitAdd", "Everything seems fine"); + + return (*env)->NewStringUTF(env, ""); +} diff --git a/android/app/src/main/cpp/keygen.c b/android/app/src/main/cpp/keygen.c index effdeed9..8285751d 100644 --- a/android/app/src/main/cpp/keygen.c +++ b/android/app/src/main/cpp/keygen.c @@ -87,7 +87,7 @@ int generate_keys(const char* private_key_path, void ssh_log_jni_callback(int priority, const char *function, const char *buffer, void *userdata) { - __android_log_print(ANDROID_LOG_ERROR, "SSH_HOWDY", "P%d : %s : %s", priority, function, buffer); + __android_log_print(ANDROID_LOG_ERROR, "SSH_HOWDY", "P%d : %s : %s\n", priority, function, buffer); } JNIEXPORT jstring JNICALL diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/Git.java b/android/app/src/main/java/io/gitjournal/gitjournal/Git.java index 91033453..7a40e52c 100644 --- a/android/app/src/main/java/io/gitjournal/gitjournal/Git.java +++ b/android/app/src/main/java/io/gitjournal/gitjournal/Git.java @@ -6,4 +6,6 @@ public class Git { } public native String generateKeys(String privateKeyPath, String publicKeyPath, String comment); + + public native String add(String basePath, String pattern); } diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/GitAddTask.java b/android/app/src/main/java/io/gitjournal/gitjournal/GitAddTask.java index cd09a966..8c68d005 100644 --- a/android/app/src/main/java/io/gitjournal/gitjournal/GitAddTask.java +++ b/android/app/src/main/java/io/gitjournal/gitjournal/GitAddTask.java @@ -3,14 +3,6 @@ package io.gitjournal.gitjournal; import android.os.AsyncTask; import android.util.Log; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.errors.GitAPIException; - -import org.eclipse.jgit.api.AddCommand; -import org.eclipse.jgit.api.errors.TransportException; - -import java.io.File; - import io.flutter.plugin.common.MethodChannel.Result; public class GitAddTask extends AsyncTask { @@ -25,27 +17,12 @@ public class GitAddTask extends AsyncTask { final String cloneDirPath = params[0]; final String filePattern = params[1]; - File cloneDir = new File(cloneDirPath); Log.d("GitClone Directory", cloneDirPath); - try { - Git git = Git.open(cloneDir); - - AddCommand addCommand = git.add(); - addCommand.addFilepattern(filePattern); - addCommand.call(); - - } catch (TransportException e) { - Log.d(TAG, e.toString()); - result.error("FAILED", e.getMessage(), null); - return null; - } catch (GitAPIException e) { - Log.d(TAG, e.toString()); - result.error("FAILED", e.getMessage(), null); - return null; - } catch (Exception e) { - Log.d(TAG, e.toString()); - result.error("FAILED", e.getMessage(), null); + Git git = new Git(); + String errorStr = git.add(cloneDirPath, filePattern); + if (!errorStr.isEmpty()) { + result.error("FAILED", errorStr, null); return null; }