diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/GitResetLastTask.java b/android/app/src/main/java/io/gitjournal/gitjournal/GitResetLastTask.java new file mode 100644 index 00000000..8150bb77 --- /dev/null +++ b/android/app/src/main/java/io/gitjournal/gitjournal/GitResetLastTask.java @@ -0,0 +1,54 @@ +package io.gitjournal.gitjournal; + +import android.os.AsyncTask; +import android.util.Log; + +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.ResetCommand; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.api.errors.TransportException; + +import java.io.File; + +import io.flutter.plugin.common.MethodChannel.Result; + +public class GitResetLastTask extends AsyncTask { + private final static String TAG = "GitResetLastTask"; + private Result result; + + public GitResetLastTask(Result _result) { + result = _result; + } + + protected Void doInBackground(String... params) { + final String cloneDirPath = params[0]; + + File cloneDir = new File(cloneDirPath); + Log.d("GitResetLastTask", "Clone Path: " + cloneDirPath); + + try { + Git git = Git.open(cloneDir); + + ResetCommand command = git.reset(); + command.setMode(ResetCommand.ResetType.HARD); + command.setRef("HEAD^"); + command.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); + return null; + } + + result.success(null); + return null; + } +} diff --git a/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java b/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java index d72d3fc2..df185996 100644 --- a/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java +++ b/android/app/src/main/java/io/gitjournal/gitjournal/MainActivity.java @@ -171,6 +171,18 @@ public class MainActivity extends FlutterActivity implements MethodCallHandler { new GitInitTask(result).execute(initLocation); return; + } else if (call.method.equals("gitResetLast")) { + String folderName = call.argument("folderName"); + + if (folderName == null || folderName.isEmpty()) { + result.error("Invalid Parameters", "folderName Invalid", null); + return; + } + + String cloneLocation = filesDir + "/" + folderName; + + new GitResetLastTask(result).execute(cloneLocation); + return; } else if (call.method.equals("generateSSHKeys")) { String comment = call.argument("comment"); if (comment == null || comment.isEmpty()) { diff --git a/lib/apis/git.dart b/lib/apis/git.dart index 18e545be..9ffb4fd7 100644 --- a/lib/apis/git.dart +++ b/lib/apis/git.dart @@ -150,6 +150,19 @@ Future gitPush(String folderName) async { } } +Future gitResetLast(String folderName) async { + print("Going to git reset last"); + try { + await _platform.invokeMethod('gitResetLast', { + 'folderName': folderName, + }); + print("Done"); + } on PlatformException catch (e) { + print("gitResetLast Failed: '${e.message}'."); + throw createGitException(e.message); + } +} + Future gitCommit({ @required String gitFolder, @required String authorName, diff --git a/lib/gitapp.dart b/lib/gitapp.dart index 563f26ff..daecb313 100644 --- a/lib/gitapp.dart +++ b/lib/gitapp.dart @@ -88,6 +88,12 @@ class GitApp extends StatelessWidget { ); }, ), + RaisedButton( + child: Text("Git Reset Last"), + onPressed: () async { + gitResetLast(basePath); + }, + ), RaisedButton( child: Text("Git Migrate"), onPressed: () async {