From d938c4ffd41844d09dbd50ecbb49fa256ecf8067 Mon Sep 17 00:00:00 2001 From: Don Okuda Date: Mon, 24 Apr 2017 17:15:39 -0700 Subject: [PATCH 1/3] Stub out a context menu option for reverting commits --- .../Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index e31308a3f..49bc628e9 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -548,6 +548,11 @@ private void CullHistory() EntryHeight + 1, 0, history.Count); } + private void RevertCommit() + { + Debug.Log("Hello from RevertCommit();"); + } + private bool HistoryEntry(GitLogEntry entry, LogEntryState state, bool selected) { var entryRect = GUILayoutUtility.GetRect(Styles.HistoryEntryHeight, Styles.HistoryEntryHeight); @@ -611,6 +616,14 @@ private bool HistoryEntry(GitLogEntry entry, LogEntryState state, bool selected) GUI.DrawTexture(normalIndicatorRect, Styles.DotIcon); } } + else if (Event.current.type == EventType.ContextClick && entryRect.Contains(Event.current.mousePosition)) + { + GenericMenu menu = new GenericMenu(); + menu.AddItem(new GUIContent("Revert"), false, RevertCommit); + menu.ShowAsContext(); + + Event.current.Use(); + } else if (Event.current.type == EventType.MouseDown && entryRect.Contains(Event.current.mousePosition)) { Event.current.Use(); From 68571ef2fb51e723f43f54edf5cded44873c6e67 Mon Sep 17 00:00:00 2001 From: Don Okuda Date: Tue, 25 Apr 2017 13:03:47 -0700 Subject: [PATCH 2/3] Stub out dialog action --- .../Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 49bc628e9..e9e704879 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -550,7 +550,14 @@ private void CullHistory() private void RevertCommit() { - Debug.Log("Hello from RevertCommit();"); + var commitSummary = "An awesome commit title"; + var dialogTitle = "Revert commit"; + var dialogBody = "Are you sure you want to revert the following commit:\n" + "\"" + commitSummary + "\""; + + if (EditorUtility.DisplayDialog(dialogTitle, dialogBody, "Revert", "Cancel")) + { + Debug.Log("(Pretend a commit was reverted)"); + } } private bool HistoryEntry(GitLogEntry entry, LogEntryState state, bool selected) From 5218f0d136af9e48d4a1de9bb30df063ba7c3c42 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Thu, 15 Jun 2017 18:02:34 -0400 Subject: [PATCH 3/3] Adding functionality to revert a commit --- src/GitHub.Api/Git/GitClient.cs | 9 ++++++++ src/GitHub.Api/Git/IRepository.cs | 1 + src/GitHub.Api/Git/Repository.cs | 5 +++++ src/GitHub.Api/Git/RepositoryManager.cs | 7 ++++++ src/GitHub.Api/Git/Tasks/GitRevertTask.cs | 22 +++++++++++++++++++ src/GitHub.Api/GitHub.Api.csproj | 1 + .../Editor/GitHub.Unity/UI/HistoryView.cs | 16 +++++++++++--- 7 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 src/GitHub.Api/Git/Tasks/GitRevertTask.cs diff --git a/src/GitHub.Api/Git/GitClient.cs b/src/GitHub.Api/Git/GitClient.cs index 89c5ba57a..6c308af25 100644 --- a/src/GitHub.Api/Git/GitClient.cs +++ b/src/GitHub.Api/Git/GitClient.cs @@ -32,6 +32,9 @@ ITask Pull(string remote, string branch, ITask Push(string remote, string branch, IOutputProcessor processor = null); + ITask Revert(string changeset, + IOutputProcessor processor = null); + ITask Fetch(string remote, IOutputProcessor processor = null); @@ -198,6 +201,12 @@ public ITask Push(string remote, string branch, .Configure(processManager); } + public ITask Revert(string changeset, IOutputProcessor processor = null) + { + return new GitRevertTask(changeset, cancellationToken, processor) + .Configure(processManager); + } + public ITask Fetch(string remote, IOutputProcessor processor = null) { diff --git a/src/GitHub.Api/Git/IRepository.cs b/src/GitHub.Api/Git/IRepository.cs index 0dce12a05..b39052e03 100644 --- a/src/GitHub.Api/Git/IRepository.cs +++ b/src/GitHub.Api/Git/IRepository.cs @@ -12,6 +12,7 @@ interface IRepository : IEquatable ITask SetupRemote(string remoteName, string remoteUrl); ITask Pull(); ITask Push(); + ITask Revert(string changeset); ITask ListLocks(); ITask RequestLock(string file); ITask ReleaseLock(string file, bool force); diff --git a/src/GitHub.Api/Git/Repository.cs b/src/GitHub.Api/Git/Repository.cs index 77cfad273..03e1851f4 100644 --- a/src/GitHub.Api/Git/Repository.cs +++ b/src/GitHub.Api/Git/Repository.cs @@ -88,6 +88,11 @@ public ITask Push() return repositoryManager.Push(CurrentRemote.Value.Name, CurrentBranch); } + public ITask Revert(string changeset) + { + return repositoryManager.Revert(changeset); + } + public ITask ListLocks() { return repositoryManager.ListLocks(false); diff --git a/src/GitHub.Api/Git/RepositoryManager.cs b/src/GitHub.Api/Git/RepositoryManager.cs index 4414fcbf9..2a2422ad7 100644 --- a/src/GitHub.Api/Git/RepositoryManager.cs +++ b/src/GitHub.Api/Git/RepositoryManager.cs @@ -34,6 +34,7 @@ interface IRepositoryManager : IDisposable ITask Fetch(string remote); ITask Pull(string remote, string branch); ITask Push(string remote, string branch); + ITask Revert(string changeset); ITask RemoteAdd(string remote, string url); ITask RemoteRemove(string remote); ITask RemoteChange(string remote, string url); @@ -220,6 +221,12 @@ public ITask Push(string remote, string branch) return HookupHandlers(task); } + public ITask Revert(string changeset) + { + var task = GitClient.Revert(changeset); + return HookupHandlers(task); + } + public ITask RemoteAdd(string remote, string url) { var task = GitClient.RemoteAdd(remote, url); diff --git a/src/GitHub.Api/Git/Tasks/GitRevertTask.cs b/src/GitHub.Api/Git/Tasks/GitRevertTask.cs new file mode 100644 index 000000000..94adeed16 --- /dev/null +++ b/src/GitHub.Api/Git/Tasks/GitRevertTask.cs @@ -0,0 +1,22 @@ +using System.Threading; + +namespace GitHub.Unity +{ + class GitRevertTask : ProcessTask + { + private readonly string arguments; + + public GitRevertTask(string changeset, + CancellationToken token, IOutputProcessor processor = null) + : base(token, processor ?? new SimpleOutputProcessor()) + { + Guard.ArgumentNotNull(changeset, "changeset"); + + arguments = $"revert --no-edit {changeset}"; + } + + public override string Name { get { return "git revert"; } } + public override string ProcessArguments { get { return arguments; } } + public override TaskAffinity Affinity { get { return TaskAffinity.Exclusive; } } + } +} \ No newline at end of file diff --git a/src/GitHub.Api/GitHub.Api.csproj b/src/GitHub.Api/GitHub.Api.csproj index fd9c54d44..17c673c33 100644 --- a/src/GitHub.Api/GitHub.Api.csproj +++ b/src/GitHub.Api/GitHub.Api.csproj @@ -115,6 +115,7 @@ + diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index e9e704879..13d60f504 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -550,13 +550,23 @@ private void CullHistory() private void RevertCommit() { - var commitSummary = "An awesome commit title"; + var selection = history[selectionIndex]; + var dialogTitle = "Revert commit"; - var dialogBody = "Are you sure you want to revert the following commit:\n" + "\"" + commitSummary + "\""; + var dialogBody = string.Format(@"Are you sure you want to revert the following commit:""{0}""", selection.Summary); if (EditorUtility.DisplayDialog(dialogTitle, dialogBody, "Revert", "Cancel")) { - Debug.Log("(Pretend a commit was reverted)"); + Repository + .Revert(selection.CommitID) + .FinallyInUI((success, e) => { + if (!success) + { + EditorUtility.DisplayDialog(dialogTitle, + "Error reverting commit: " + e.Message, Localization.Cancel); + } + }) + .Start(); } }