async private Task <MergeRequest> setSquashAsync(bool squash) { UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, null, null, null, null, null, squash); return(await applyModification(updateMergeRequestParameters)); }
async public Task Run() { string hostname = _callback.GetCurrentHostName(); string accessToken = _callback.GetCurrentAccessToken(); string projectName = _callback.GetCurrentProjectName(); int iid = _callback.GetCurrentMergeRequestIId(); GitLabTaskRunner client = new GitLabTaskRunner(hostname, accessToken); await client.RunAsync(async (gitlab) => { if (_label == Common.Constants.Constants.HighPriorityLabel) { SingleMergeRequestAccessor accessor = gitlab.Projects.Get(projectName).MergeRequests.Get(iid); GitLabSharp.Entities.MergeRequest mergeRequest = await accessor.LoadTaskAsync(); bool wasHighPriority = mergeRequest.Labels? .Contains(Common.Constants.Constants.HighPriorityLabel) ?? false; if (!wasHighPriority) { string[] labels = mergeRequest.Labels .Concat(new string[] { Common.Constants.Constants.HighPriorityLabel }).ToArray(); UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, null, null, null, null, null, null, labels); await accessor.UpdateMergeRequestTaskAsync(updateMergeRequestParameters); } } return(null); }); }
async private Task <MergeRequest> setSquashAsync(bool squash) { UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, null, null, null, null, null, squash, null); traceInformation(String.Format("[AcceptMergeRequestForm] Applying Squash={0}...", squash.ToString())); return(await applyModification(updateMergeRequestParameters)); }
async private Task <MergeRequest> toggleWipAsync() { string newTitle = StringUtils.ToggleWorkInProgressTitle(_title); UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, newTitle, null, null, null, null, null); return(await applyModification(updateMergeRequestParameters)); }
async private Task <MergeRequest> toggleDraftAsync() { string newTitle = StringUtils.ToggleDraftTitle(_title); UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, newTitle, null, null, null, null, null, null); traceInformation("[AcceptMergeRequestForm] Toggling Draft status..."); return(await applyModification(updateMergeRequestParameters)); }
internal Task <MergeRequest> UpdateMergeRequest(MergeRequestKey mrk, UpdateMergeRequestParameters parameters) { return(callWithSharedClient( async(client) => await OperatorCallWrapper.Call( async() => (MergeRequest)(await client.RunAsync( async(gl) => await gl.Projects.Get(mrk.ProjectKey.ProjectName).MergeRequests.Get(mrk.IId) .UpdateMergeRequestTaskAsync(parameters)))))); }
async internal static Task <bool> CloseMergeRequest(MergeRequestKey mrk, Shortcuts shortcuts) { UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, null, null, null, "close", null, null, null); try { MergeRequest mergeRequest = await shortcuts .GetMergeRequestEditor(mrk) .ModifyMergeRequest(updateMergeRequestParameters); } catch (MergeRequestEditorException ex) { reportErrorToUser(ex); return(false); } return(true); }
async private Task <MergeRequest> applyModification(UpdateMergeRequestParameters parameters) { stopProcessingTimer(); try { IMergeRequestEditor editor = getEditor(); if (editor == null) { return(null); } return(await editor.ModifyMergeRequest(parameters)); } finally { startProcessingTimer(); } }
async private Task <MergeRequest> applyModification(UpdateMergeRequestParameters parameters) { disableProcessingTimer(); try { IMergeRequestEditor editor = getEditor(); if (editor == null) { return(null); } return(await editor.ModifyMergeRequest(parameters)); } finally { enableProcessingTimer(); traceInformation("[AcceptMergeRequestForm] Modification applied"); } }
async internal static Task <bool> CloseMergeRequest(GitLabInstance gitLabInstance, IModificationListener modificationListener, MergeRequestKey mrk) { UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( null, null, null, null, "close", null, null); try { MergeRequest mergeRequest = await Shortcuts .GetMergeRequestEditor(gitLabInstance, modificationListener, mrk) .ModifyMergeRequest(updateMergeRequestParameters); } catch (MergeRequestEditorException ex) { reportErrorToUser(ex); return(false); } return(true); }
async public Task <MergeRequest> ModifyMergeRequest(UpdateMergeRequestParameters parameters) { using (MergeRequestOperator mergeRequestOperator = new MergeRequestOperator( _mrk.ProjectKey.HostName, _hostProperties)) { try { return(await mergeRequestOperator.UpdateMergeRequest(_mrk, parameters)); } catch (OperatorException ex) { if (ex.Cancelled) { throw new MergeRequestEditorCancelledException(); } if (ex.InnerException is GitLabRequestException glx) { throw new MergeRequestEditorException("Cannot edit MR", glx); } throw new MergeRequestEditorException("Cannot edit MR by unknown reason", null); } } }
async internal static Task <bool> ApplyChangesToMergeRequest( ProjectKey projectKey, MergeRequest originalMergeRequest, ApplyMergeRequestChangesParameters parameters, string oldSpecialNote, string newSpecialNote, User currentUser, Shortcuts shortcuts) { if (String.IsNullOrEmpty(parameters.Title) || String.IsNullOrEmpty(parameters.TargetBranch) || parameters.AssigneeUserName == null || newSpecialNote == null || currentUser == null) { // this is unexpected due to UI restrictions, so don't implement detailed logging here MessageBox.Show("Invalid parameters for a merge request", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Trace.TraceError("[MergeRequestEditHelper] Invalid parameters for a merge request"); return(false); } string oldAssigneeUsername = originalMergeRequest.Assignee?.Username ?? String.Empty; User assignee = oldAssigneeUsername == parameters.AssigneeUserName ? originalMergeRequest.Assignee : await getUserAsync(parameters.AssigneeUserName, shortcuts); checkFoundAssignee(projectKey.HostName, parameters.AssigneeUserName, assignee); bool result = false; MergeRequestKey mrk = new MergeRequestKey(projectKey, originalMergeRequest.IId); if (oldSpecialNote != newSpecialNote) { result = await addComment(mrk, currentUser, newSpecialNote, shortcuts); } bool wasHighPriority = originalMergeRequest.Labels? .Contains(Common.Constants.Constants.HighPriorityLabel) ?? false; bool changed = oldAssigneeUsername != parameters.AssigneeUserName || originalMergeRequest.Force_Remove_Source_Branch != parameters.DeleteSourceBranch || originalMergeRequest.Squash != parameters.Squash || originalMergeRequest.Target_Branch != parameters.TargetBranch || originalMergeRequest.Title != parameters.Title || originalMergeRequest.Description != parameters.Description || wasHighPriority != parameters.IsHighPriority; if (!changed) { return(result); } string[] labels = null; if (wasHighPriority && !parameters.IsHighPriority) { labels = originalMergeRequest.Labels .Where(label => label != Common.Constants.Constants.HighPriorityLabel).ToArray(); } else if (!wasHighPriority && parameters.IsHighPriority) { labels = originalMergeRequest.Labels .Concat(new string[] { Common.Constants.Constants.HighPriorityLabel }).ToArray(); } int assigneeId = assignee?.Id ?? 0; // 0 means to unassign UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( parameters.TargetBranch, parameters.Title, assigneeId, parameters.Description, null, parameters.DeleteSourceBranch, parameters.Squash, labels); try { MergeRequest mergeRequest = await shortcuts .GetMergeRequestEditor(mrk) .ModifyMergeRequest(updateMergeRequestParameters); } catch (MergeRequestEditorException ex) { reportErrorToUser(ex); return(result); } return(true); }
async internal static Task <bool> ApplyChangesToMergeRequest(GitLabInstance gitLabInstance, IModificationListener modificationListener, ProjectKey projectKey, MergeRequest originalMergeRequest, ApplyMergeRequestChangesParameters parameters, string oldSpecialNote, string newSpecialNote, User currentUser) { if (String.IsNullOrEmpty(parameters.Title) || String.IsNullOrEmpty(parameters.TargetBranch) || parameters.AssigneeUserName == null || newSpecialNote == null || currentUser == null) { // this is unexpected due to UI restrictions, so don't implement detailed logging here MessageBox.Show("Invalid parameters for a merge request", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Trace.TraceError("[MergeRequestEditHelper] Invalid parameters for a merge request"); return(false); } string oldAssigneeUsername = originalMergeRequest.Assignee?.Username ?? String.Empty; User assignee = oldAssigneeUsername == parameters.AssigneeUserName ? originalMergeRequest.Assignee : await getUserAsync(gitLabInstance, parameters.AssigneeUserName); checkFoundAssignee(projectKey.HostName, parameters.AssigneeUserName, assignee); bool result = false; MergeRequestKey mrk = new MergeRequestKey(projectKey, originalMergeRequest.IId); if (oldSpecialNote != newSpecialNote) { result = await addComment(gitLabInstance, modificationListener, mrk, currentUser, newSpecialNote); } bool changed = oldAssigneeUsername != parameters.AssigneeUserName || originalMergeRequest.Force_Remove_Source_Branch != parameters.DeleteSourceBranch || originalMergeRequest.Squash != parameters.Squash || originalMergeRequest.Target_Branch != parameters.TargetBranch || originalMergeRequest.Title != parameters.Title || originalMergeRequest.Description != parameters.Description; if (!changed) { return(result); } int assigneeId = assignee?.Id ?? 0; // 0 means to unassign UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters( parameters.TargetBranch, parameters.Title, assigneeId, parameters.Description, null, parameters.DeleteSourceBranch, parameters.Squash); try { MergeRequest mergeRequest = await Shortcuts .GetMergeRequestEditor(gitLabInstance, modificationListener, mrk) .ModifyMergeRequest(updateMergeRequestParameters); } catch (MergeRequestEditorException ex) { reportErrorToUser(ex); return(result); } return(true); }