async private Task createNewMergeRequestAsync(SubmitNewMergeRequestParameters parameters, string firstNote)
        {
            buttonCreateNew.Enabled  = false;
            labelWorkflowStatus.Text = "Creating a merge request at GitLab...";

            GitLabInstance  gitLabInstance = new GitLabInstance(parameters.ProjectKey.HostName, Program.Settings);
            MergeRequestKey?mrkOpt         = await MergeRequestEditHelper.SubmitNewMergeRequestAsync(gitLabInstance,
                                                                                                     _modificationNotifier, parameters, firstNote, getCurrentUser());

            if (mrkOpt == null)
            {
                // all error handling is done at the callee side
                string message = "Merge Request has not been created";
                labelWorkflowStatus.Text = message;
                buttonCreateNew.Enabled  = true;
                Trace.TraceInformation("[MainForm] {0}", message);
                return;
            }

            requestUpdates(null, new int[] { Constants.NewOrClosedMergeRequestRefreshListTimerInterval });

            labelWorkflowStatus.Text = String.Format("Merge Request !{0} has been created in project {1}",
                                                     mrkOpt.Value.IId, parameters.ProjectKey.ProjectName);
            buttonCreateNew.Enabled = true;

            _newMergeRequestDialogStatesByHosts[getHostName()] = new NewMergeRequestProperties(
                parameters.ProjectKey.ProjectName, null, null, parameters.AssigneeUserName, parameters.Squash,
                parameters.DeleteSourceBranch);

            Trace.TraceInformation(
                "[MainForm] Created a new merge request. " +
                "Project: {0}, SourceBranch: {1}, TargetBranch: {2}, Assignee: {3}, firstNote: {4}",
                parameters.ProjectKey.ProjectName, parameters.SourceBranch, parameters.TargetBranch,
                parameters.AssigneeUserName, firstNote);
        }
        async private Task closeMergeRequestAsync(string hostname, FullMergeRequestKey item)
        {
            MergeRequestKey mrk     = new MergeRequestKey(item.ProjectKey, item.MergeRequest.IId);
            string          message =
                "Do you really want to close (cancel) merge request? It will not be merged to the target branch.";

            if (MessageBox.Show(message, "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                GitLabInstance gitLabInstance = new GitLabInstance(hostname, Program.Settings);
                await MergeRequestEditHelper.CloseMergeRequest(gitLabInstance, _modificationNotifier, mrk);

                string statusMessage = String.Format("Merge Request !{0} has been closed", mrk.IId);
                labelWorkflowStatus.Text = statusMessage;
                Trace.TraceInformation("[MainForm] {0}", statusMessage);

                requestUpdates(null, new int[] { Constants.NewOrClosedMergeRequestRefreshListTimerInterval });
            }
            else
            {
                Trace.TraceInformation("[MainForm] User declined to close a merge request");
            }
        }
        async private Task applyChangesToMergeRequestAsync(string hostname, User currentUser, FullMergeRequestKey item)
        {
            MergeRequestKey mrk      = new MergeRequestKey(item.ProjectKey, item.MergeRequest.IId);
            string          noteText = await MergeRequestEditHelper.GetLatestSpecialNote(_liveDataCache.DiscussionCache, mrk);

            MergeRequestPropertiesForm form = new EditMergeRequestPropertiesForm(hostname,
                                                                                 getProjectAccessor(), currentUser, item.ProjectKey, item.MergeRequest, noteText);

            if (form.ShowDialog() != DialogResult.OK)
            {
                Trace.TraceInformation("[MainForm] User declined to modify a merge request");
                return;
            }

            ApplyMergeRequestChangesParameters parameters =
                new ApplyMergeRequestChangesParameters(form.Title, form.AssigneeUsername,
                                                       form.Description, form.TargetBranch, form.DeleteSourceBranch, form.Squash);

            GitLabInstance gitLabInstance = new GitLabInstance(hostname, Program.Settings);
            bool           modified       = await MergeRequestEditHelper.ApplyChangesToMergeRequest(gitLabInstance, _modificationNotifier,
                                                                                                    item.ProjectKey, item.MergeRequest, parameters, noteText, form.SpecialNote, currentUser);

            string statusMessage = modified
            ? String.Format("Merge Request !{0} has been modified", mrk.IId)
            : String.Format("No changes have been made to Merge Request !{0}", mrk.IId);

            labelWorkflowStatus.Text = statusMessage;
            Trace.TraceInformation("[MainForm] {0}", statusMessage);

            if (modified)
            {
                requestUpdates(mrk,
                               new int[] {
                    100,
                    Program.Settings.OneShotUpdateFirstChanceDelayMs,
                    Program.Settings.OneShotUpdateSecondChanceDelayMs
                });
            }
        }
Exemple #4
0
        async private Task closeMergeRequestAsync(FullMergeRequestKey item)
        {
            MergeRequestKey mrk     = new MergeRequestKey(item.ProjectKey, item.MergeRequest.IId);
            string          message =
                "Do you really want to close (cancel) merge request? It will not be merged to the target branch.";

            if (MessageBox.Show(message, "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                await MergeRequestEditHelper.CloseMergeRequest(mrk, _shortcuts);

                string statusMessage = String.Format("Merge Request !{0} has been closed", mrk.IId);
                addOperationRecord(statusMessage);

                requestUpdates(EDataCacheType.Live, null, new int[] {
                    Program.Settings.NewOrClosedMergeRequestRefreshListDelayMs
                });
            }
            else
            {
                Trace.TraceInformation("[MainForm] User declined to close a merge request");
            }
        }
Exemple #5
0
        async private Task applyChangesToMergeRequestAsync(DataCache dataCache, string hostname, User currentUser,
                                                           FullMergeRequestKey item, IEnumerable <User> fullUserList)
        {
            MergeRequestKey mrk      = new MergeRequestKey(item.ProjectKey, item.MergeRequest.IId);
            string          noteText = await MergeRequestEditHelper.GetLatestSpecialNote(dataCache.DiscussionCache, mrk);

            MergeRequestPropertiesForm form = new EditMergeRequestPropertiesForm(hostname,
                                                                                 _shortcuts.GetProjectAccessor(), currentUser, item.ProjectKey, item.MergeRequest, noteText, fullUserList);

            if (form.ShowDialog() != DialogResult.OK)
            {
                Trace.TraceInformation("[MainForm] User declined to modify a merge request");
                return;
            }

            ApplyMergeRequestChangesParameters parameters =
                new ApplyMergeRequestChangesParameters(form.Title, form.AssigneeUsername,
                                                       form.Description, form.TargetBranch, form.DeleteSourceBranch, form.Squash,
                                                       form.IsHighPriority);

            bool modified = await MergeRequestEditHelper.ApplyChangesToMergeRequest(
                item.ProjectKey, item.MergeRequest, parameters, noteText, form.SpecialNote, currentUser,
                _shortcuts);

            string statusMessage = modified
            ? String.Format("Merge Request !{0} has been modified", mrk.IId)
            : String.Format("No changes have been made to Merge Request !{0}", mrk.IId);

            addOperationRecord(statusMessage);

            if (modified)
            {
                requestUpdates(EDataCacheType.Live, mrk, new int[] {
                    Program.Settings.OneShotUpdateFirstChanceDelayMs,
                    Program.Settings.OneShotUpdateSecondChanceDelayMs
                });
            }
        }
Exemple #6
0
        async private Task createNewMergeRequestAsync(SubmitNewMergeRequestParameters parameters, string firstNote)
        {
            setMergeRequestEditEnabled(false);
            addOperationRecord("Creating a merge request at GitLab has started");

            MergeRequestKey?mrkOpt = await MergeRequestEditHelper.SubmitNewMergeRequestAsync(
                parameters, firstNote, getCurrentUser(), _shortcuts);

            if (mrkOpt == null)
            {
                // all error handling is done at the callee side
                string message = "Merge Request has not been created";
                addOperationRecord(message);
                setMergeRequestEditEnabled(true);
                return;
            }

            requestUpdates(EDataCacheType.Live, null, new int[] {
                Program.Settings.NewOrClosedMergeRequestRefreshListDelayMs
            });

            addOperationRecord(String.Format("Merge Request !{0} has been created in project {1}",
                                             mrkOpt.Value.IId, parameters.ProjectKey.ProjectName));
            setMergeRequestEditEnabled(true);

            _newMergeRequestDialogStatesByHosts[getHostName()] = new NewMergeRequestProperties(
                parameters.ProjectKey.ProjectName, null, null, parameters.AssigneeUserName, parameters.Squash,
                parameters.DeleteSourceBranch);
            saveState();

            Trace.TraceInformation(
                "[MainForm] Created a new merge request. " +
                "Project: {0}, SourceBranch: {1}, TargetBranch: {2}, Assignee: {3}, firstNote: {4}",
                parameters.ProjectKey.ProjectName, parameters.SourceBranch, parameters.TargetBranch,
                parameters.AssigneeUserName, firstNote);
        }