Пример #1
0
        async private Task <MergeRequest> setSquashAsync(bool squash)
        {
            UpdateMergeRequestParameters updateMergeRequestParameters = new UpdateMergeRequestParameters(
                null, null, null, null, null, null, squash);

            return(await applyModification(updateMergeRequestParameters));
        }
Пример #2
0
        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));
        }
Пример #4
0
        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));
        }
Пример #6
0
 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))))));
 }
Пример #7
0
        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);
        }
Пример #8
0
        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");
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
 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);
         }
     }
 }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }