From 7059ce835d152ed33f3da7ce4c4a90e41ff7ef6d Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sat, 11 Nov 2017 21:49:46 -0500 Subject: [PATCH] MergePullRequest now accepts an atSHA parameter --- TGServerService/ServerInstance/Repository.cs | 26 +++++++++++++++++--- TGServiceInterface/Components/Repository.cs | 3 ++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/TGServerService/ServerInstance/Repository.cs b/TGServerService/ServerInstance/Repository.cs index 56e7f9684e..f66d4e8e6a 100644 --- a/TGServerService/ServerInstance/Repository.cs +++ b/TGServerService/ServerInstance/Repository.cs @@ -861,14 +861,14 @@ namespace TGServerService } /// - public string MergePullRequest(int PRNumber) + public string MergePullRequest(int PRNumber, string atSHA) { lock (RepoLock) { var result = LoadRepo(); if (result != null) return result; - SendMessage(String.Format("REPO: Merging PR #{0}...", PRNumber), MessageType.DeveloperInfo); + SendMessage(String.Format("REPO: Merging PR #{0}{1}...", PRNumber, atSHA != null ? String.Format(" at commit {0}", atSHA): ""), MessageType.DeveloperInfo); result = ResetNoLock(null); if (result != null) return result; @@ -905,8 +905,28 @@ namespace TGServerService return String.Format("PR #{0} could not be fetched. Does it exist?", PRNumber); } + if (atSHA != null) + { + //find the commit + Commit commit = null; + string error = null; + try + { + commit = Repo.Lookup(atSHA); + } + catch (Exception e) + { + error = e.ToString(); + } + if (commit == null) + { + SendMessage("REPO: Commit could not be found, aborting!", MessageType.DeveloperInfo); + return error ?? String.Format("Commit {0} could not be found in the repository!", atSHA); + } + } + //so we'll know if this fails - var Result = MergeBranch(LocalBranchName, String.Format("Testmerge commit for pull request #{0}", PRNumber)); + var Result = MergeBranch(atSHA ?? LocalBranchName, String.Format("Testmerge commit for pull request #{0}", PRNumber)); if (Result == null) try diff --git a/TGServiceInterface/Components/Repository.cs b/TGServiceInterface/Components/Repository.cs index 4f5def377a..9e0f83105e 100644 --- a/TGServiceInterface/Components/Repository.cs +++ b/TGServiceInterface/Components/Repository.cs @@ -92,9 +92,10 @@ namespace TGServiceInterface.Components /// Merges the target pull request into the current branch if the remote is a github repository /// /// The github pull request number in the remote repository + /// The SHA of the pull request to merge /// on success, error message on failure [OperationContract] - string MergePullRequest(int PRnumber); + string MergePullRequest(int PRnumber, string atSHA = null); /// /// Get the currently merged pull requests. Note that switching branches will delete this list and switching back won't restore it