diff --git a/app/src/main/java/me/sheimi/android/activities/SheimiFragmentActivity.java b/app/src/main/java/me/sheimi/android/activities/SheimiFragmentActivity.java index 7326f251..ed94007d 100644 --- a/app/src/main/java/me/sheimi/android/activities/SheimiFragmentActivity.java +++ b/app/src/main/java/me/sheimi/android/activities/SheimiFragmentActivity.java @@ -159,6 +159,12 @@ public void showMessageDialog(int title, String msg) { .setPositiveButton(R.string.label_ok, new DummyDialogListener()).show(); } + public void showMessageDialog(int title, int msg) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(title).setMessage(getString(msg)) + .setPositiveButton(R.string.label_ok, new DummyDialogListener()).show(); + } + public void showOptionsDialog(int title,final int option_names, final onOptionDialogClicked[] option_listeners) { CharSequence[] options_values = getResources().getStringArray(option_names); diff --git a/app/src/main/java/me/sheimi/sgit/activities/delegate/RepoOperationDelegate.java b/app/src/main/java/me/sheimi/sgit/activities/delegate/RepoOperationDelegate.java index 843126a6..1e9744f4 100644 --- a/app/src/main/java/me/sheimi/sgit/activities/delegate/RepoOperationDelegate.java +++ b/app/src/main/java/me/sheimi/sgit/activities/delegate/RepoOperationDelegate.java @@ -28,6 +28,7 @@ import me.sheimi.sgit.activities.delegate.actions.RemoveRemoteAction; import me.sheimi.sgit.activities.delegate.actions.RepoAction; import me.sheimi.sgit.activities.delegate.actions.ResetAction; +import me.sheimi.sgit.activities.delegate.actions.UndoAction; import me.sheimi.sgit.database.models.Repo; import me.sheimi.sgit.repo.tasks.SheimiAsyncTask.AsyncTaskPostCallback; import me.sheimi.sgit.repo.tasks.repo.AddToStageTask; @@ -55,6 +56,7 @@ private void initActions() { mActions.add(new PushAction(mRepo, mActivity)); mActions.add(new AddAllAction(mRepo, mActivity)); mActions.add(new CommitAction(mRepo, mActivity)); + mActions.add(new UndoAction(mRepo, mActivity)); mActions.add(new ResetAction(mRepo, mActivity)); mActions.add(new MergeAction(mRepo, mActivity)); mActions.add(new FetchAction(mRepo, mActivity)); diff --git a/app/src/main/java/me/sheimi/sgit/activities/delegate/actions/UndoAction.java b/app/src/main/java/me/sheimi/sgit/activities/delegate/actions/UndoAction.java new file mode 100644 index 00000000..bfdab893 --- /dev/null +++ b/app/src/main/java/me/sheimi/sgit/activities/delegate/actions/UndoAction.java @@ -0,0 +1,64 @@ +package me.sheimi.sgit.activities.delegate.actions; + +import android.content.DialogInterface; + +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.revwalk.RevCommit; + +import java.util.Iterator; + +import me.sheimi.sgit.R; +import me.sheimi.sgit.activities.RepoDetailActivity; +import me.sheimi.sgit.database.models.Repo; +import me.sheimi.sgit.exception.StopTaskException; +import me.sheimi.sgit.repo.tasks.SheimiAsyncTask.AsyncTaskPostCallback; +import me.sheimi.sgit.repo.tasks.repo.UndoCommitTask; + +public class UndoAction extends RepoAction { + + public UndoAction(Repo repo, RepoDetailActivity activity) { + super(repo, activity); + } + + @Override + public void execute() { + boolean firstCommit = true; + boolean noCommit = true; + try { + Iterator logIt = mRepo.getGit().log().call().iterator(); + noCommit = !logIt.hasNext(); + if (!noCommit) { + logIt.next(); + firstCommit = !logIt.hasNext(); + } + } catch (GitAPIException | StopTaskException e) { + e.printStackTrace(); + } + if (noCommit) { + mActivity.showMessageDialog(R.string.dialog_undo_commit_title, R.string.dialog_undo_no_commit_msg); + } else if (firstCommit) { + mActivity.showMessageDialog(R.string.dialog_undo_commit_title, R.string.dialog_undo_first_commit_msg); + } else { + mActivity.showMessageDialog(R.string.dialog_undo_commit_title, + R.string.dialog_undo_commit_msg, R.string.action_undo, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + undo(); + } + }); + } + mActivity.closeOperationDrawer(); + } + + public void undo() { + UndoCommitTask undoTask = new UndoCommitTask(mRepo, + new AsyncTaskPostCallback() { + @Override + public void onPostExecute(Boolean isSuccess) { + mActivity.reset(); + } + }); + undoTask.executeTask(); + } +} diff --git a/app/src/main/java/me/sheimi/sgit/repo/tasks/repo/UndoCommitTask.java b/app/src/main/java/me/sheimi/sgit/repo/tasks/repo/UndoCommitTask.java new file mode 100644 index 00000000..6cf4be02 --- /dev/null +++ b/app/src/main/java/me/sheimi/sgit/repo/tasks/repo/UndoCommitTask.java @@ -0,0 +1,44 @@ +package me.sheimi.sgit.repo.tasks.repo; + +import org.eclipse.jgit.api.ResetCommand; + +import me.sheimi.sgit.R; +import me.sheimi.sgit.database.models.Repo; +import me.sheimi.sgit.exception.StopTaskException; + +public class UndoCommitTask extends RepoOpTask { + + private AsyncTaskPostCallback mCallback; + + public UndoCommitTask(Repo repo, AsyncTaskPostCallback callback) { + super(repo); + mCallback = callback; + setSuccessMsg(R.string.success_undo); + } + + @Override + protected Boolean doInBackground(Void... params) { + return undo(); + } + + protected void onPostExecute(Boolean isSuccess) { + super.onPostExecute(isSuccess); + if (mCallback != null) { + mCallback.onPostExecute(isSuccess); + } + } + + public boolean undo() { + try { + mRepo.getGit().getRepository().writeMergeCommitMsg(null); + mRepo.getGit().getRepository().writeMergeHeads(null); + mRepo.getGit().reset().setRef("HEAD~").setMode(ResetCommand.ResetType.SOFT).call(); + } catch (StopTaskException e) { + return false; + } catch (Throwable e) { + setException(e); + return false; + } + return true; + } +} diff --git a/app/src/main/res/values-de/arrays.xml b/app/src/main/res/values-de/arrays.xml index 6a812397..5af6c103 100644 --- a/app/src/main/res/values-de/arrays.xml +++ b/app/src/main/res/values-de/arrays.xml @@ -21,6 +21,7 @@ Push Alles zum Staging-Bereich hinzufügen Commit + Undo Last Commit Reset (HARD) Merge Fetch diff --git a/app/src/main/res/values-es/arrays.xml b/app/src/main/res/values-es/arrays.xml index 639ff02c..d0e0455f 100644 --- a/app/src/main/res/values-es/arrays.xml +++ b/app/src/main/res/values-es/arrays.xml @@ -19,6 +19,7 @@ Empujar Anadir todo a stage Commit + Undo Last Commit Reset (DURO) Merge Fetch diff --git a/app/src/main/res/values-fr/arrays.xml b/app/src/main/res/values-fr/arrays.xml index 1b0303cc..fa4e1de3 100644 --- a/app/src/main/res/values-fr/arrays.xml +++ b/app/src/main/res/values-fr/arrays.xml @@ -21,6 +21,7 @@       Pousser Ajouter tout au stage Commit + Undo Last Commit Reset (HARD) Merge Fetch diff --git a/app/src/main/res/values-iw/arrays.xml b/app/src/main/res/values-iw/arrays.xml index 02860300..a459ced8 100644 --- a/app/src/main/res/values-iw/arrays.xml +++ b/app/src/main/res/values-iw/arrays.xml @@ -20,7 +20,8 @@ דחוף הוסף את כולם לשלב Commit - Reset (HARD) + Undo Last Commit + Reset (HARD) מיזוג Fetch Rebase diff --git a/app/src/main/res/values-ja/arrays.xml b/app/src/main/res/values-ja/arrays.xml index f2c3ff48..79bc5135 100644 --- a/app/src/main/res/values-ja/arrays.xml +++ b/app/src/main/res/values-ja/arrays.xml @@ -21,6 +21,7 @@ プッシュ すべてステージに追加 コミット + Undo Last Commit Reset (HARD) マージ Fetch diff --git a/app/src/main/res/values-ko/arrays.xml b/app/src/main/res/values-ko/arrays.xml index ac2187ad..0c00eb48 100644 --- a/app/src/main/res/values-ko/arrays.xml +++ b/app/src/main/res/values-ko/arrays.xml @@ -19,6 +19,7 @@ Push Add all to stage Commit + Undo Last Commit Reset (HARD) Merge Fetch diff --git a/app/src/main/res/values-ru/arrays.xml b/app/src/main/res/values-ru/arrays.xml index 38a8e285..7732bd44 100644 --- a/app/src/main/res/values-ru/arrays.xml +++ b/app/src/main/res/values-ru/arrays.xml @@ -19,6 +19,7 @@ Загрузить Добавить все Закоммитить + Undo Last Commit СБРОС Слитие Обновить в новую ветку diff --git a/app/src/main/res/values-zh-rCN/arrays.xml b/app/src/main/res/values-zh-rCN/arrays.xml index 79e2519d..ee9e5a3a 100644 --- a/app/src/main/res/values-zh-rCN/arrays.xml +++ b/app/src/main/res/values-zh-rCN/arrays.xml @@ -21,6 +21,7 @@ 推送 暂存所有 提交 + 撤销上次提交 重置(强制) 合并 获取 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 296ab193..0c8e5fa2 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -31,6 +31,7 @@ 分享 diff 保存 diff 发送报告 + 撤销 确定 @@ -192,4 +193,5 @@ File not found! 所有文件的访问 请允许访问所有文件以从外部存储读取/写入存储库。 + diff --git a/app/src/main/res/values-zh-rCN/strings_dialog.xml b/app/src/main/res/values-zh-rCN/strings_dialog.xml index 0e8ede56..c03b11bf 100644 --- a/app/src/main/res/values-zh-rCN/strings_dialog.xml +++ b/app/src/main/res/values-zh-rCN/strings_dialog.xml @@ -60,4 +60,9 @@ 抓取 抓取所有 + + 您确定要撤销上次提交吗? + 撤销上次提交 + 没有历史提交! + 首次提交无法撤销! diff --git a/app/src/main/res/values-zh-rCN/strings_success_msg.xml b/app/src/main/res/values-zh-rCN/strings_success_msg.xml index 206b92d4..25daa6e3 100644 --- a/app/src/main/res/values-zh-rCN/strings_success_msg.xml +++ b/app/src/main/res/values-zh-rCN/strings_success_msg.xml @@ -13,5 +13,6 @@ 文件成功保存 文件可以被编辑 已复制添加的 Hash 值 + 上次提交已被撤销 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 93ff4635..a3bcd94c 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -21,6 +21,7 @@ Push Add all to stage Commit + Undo Last Commit Reset (HARD) Merge Fetch diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5710ca78..6f451720 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -33,6 +33,7 @@ Share diff Save diff Send report + Undo OK diff --git a/app/src/main/res/values/strings_dialog.xml b/app/src/main/res/values/strings_dialog.xml index 91e92349..3491e626 100644 --- a/app/src/main/res/values/strings_dialog.xml +++ b/app/src/main/res/values/strings_dialog.xml @@ -60,4 +60,10 @@ Fetch Fetch All + + Undo Last Commit + Are you sure you want to undo last commit? + No commit to undo! + Cannot undo the initial commit! + diff --git a/app/src/main/res/values/strings_success_msg.xml b/app/src/main/res/values/strings_success_msg.xml index 1b760511..a2180ed5 100644 --- a/app/src/main/res/values/strings_success_msg.xml +++ b/app/src/main/res/values/strings_success_msg.xml @@ -13,5 +13,6 @@ File saved Successfully File can be edited Commit hash has been copied + Last commit have been undone