示例#1
0
        public void DoCommit(bool keepLocks)
        {
            List <PendingChange> changes = new List <PendingChange>(UI.CheckedItems);

            IPendingChangeHandler pch = Context.GetService <IPendingChangeHandler>();

            PendingChangeCommitArgs a = new PendingChangeCommitArgs();

            a.LogMessage = logMessageEditor.Text;
            a.KeepLocks  = keepLocks;

            if (issueNumberBox.Visible)
            {
                a.IssueText = issueNumberBox.Text; // The pc handler verifies if it should be used
            }
            if (pch.Commit(changes, a))
            {
                logMessageEditor.Clear(true);
                issueNumberBox.Text = "";
            }
        }
示例#2
0
        public override void OnExecute(CommandEventArgs e)
        {
            using (ProjectCommitDialog pcd = new ProjectCommitDialog())
            {
                pcd.Context         = e.Context;
                pcd.LogMessageText  = storedLogMessage;
                pcd.IssueNumberText = storedIssueNumber;

                pcd.PreserveWindowPlacement = true;

                bool recursive = (e.Command != AnkhCommand.CommitProjectFile);
                pcd.LoadItems(e.Selection.GetSelectedSvnItems(recursive));

                DialogResult dr = pcd.ShowDialog(e.Context);

                storedLogMessage  = pcd.LogMessageText;
                storedIssueNumber = pcd.IssueNumberText;

                if (dr != DialogResult.OK)
                {
                    return;
                }

                PendingChangeCommitArgs pca = new PendingChangeCommitArgs();
                pca.StoreMessageOnError = true;
                List <PendingChange> toCommit = new List <PendingChange>(pcd.GetSelection());
                pcd.FillArgs(pca);

                e.GetService <IPendingChangeHandler>().Commit(toCommit, pca);
            }

            // not in the finally, because we want to preserve the message for a
            // non-successful commit
            storedLogMessage  = null;
            storedIssueNumber = null;
        }
示例#3
0
        public bool Commit(IEnumerable <PendingChange> changes, PendingChangeCommitArgs args)
        {
            // Ok, to make a commit happen we have to take 'a few' steps
            IAnkhServiceEvents ci = GetService <IAnkhServiceEvents>();

            if (ci != null)
            {
                ci.OnLastChanged(new LastChangedEventArgs(null, null));
            }

            bool storeMessage = args.StoreMessageOnError;

            foreach (PendingCommitState state in GetCommitRoots(changes))
            {
                if (state == null)
                {
                    return(false);
                }

                try
                {
                    state.KeepLocks       = args.KeepLocks;
                    state.KeepChangeLists = args.KeepChangeLists;
                    state.LogMessage      = args.LogMessage;
                    state.IssueText       = args.IssueText;

                    if (!PreCommit_VerifySingleRoot(state)) // Verify single root 'first'
                    {
                        return(false);
                    }

                    // Verify this before verifying log message
                    // so that issue tracker integration has precedence
                    if (!PreCommit_VerifyIssueTracker(state))
                    {
                        return(false);
                    }

                    if (!PreCommit_VerifyLogMessage(state))
                    {
                        return(false);
                    }

                    if (!PreCommit_VerifyNoConflicts(state))
                    {
                        return(false);
                    }

                    if (!PreCommit_SaveDirty(state))
                    {
                        return(false);
                    }

                    if (!PreCommit_AddNewFiles(state))
                    {
                        return(false);
                    }

                    if (!PreCommit_HandleMissingFiles(state))
                    {
                        return(false);
                    }

                    state.FlushState();

                    if (!PreCommit_AddNeededParents(state))
                    {
                        return(false);
                    }

                    if (!PreCommit_VerifySingleRoot(state)) // Verify single root 'again'
                    {
                        return(false);
                    }

                    if (!PreCommit_VerifyTargetsVersioned(state))
                    {
                        return(false);
                    }
                    // if(!PreCommit_....())
                    //  return;


                    bool ok = false;
                    using (DocumentLock dl = GetService <IAnkhOpenDocumentTracker>().LockDocuments(state.CommitPaths, DocumentLockType.NoReload))
                        using (dl.MonitorChangesForReload()) // Monitor files that are changed by keyword expansion
                        {
                            if (Commit_CommitToRepository(state))
                            {
                                storeMessage = true;
                                ok           = true;
                            }
                        }

                    if (!ok)
                    {
                        return(false);
                    }
                }
                finally
                {
                    string msg = state.LogMessage;

                    state.Dispose();

                    if (storeMessage && msg != null && msg.Trim().Length > 0)
                    {
                        Config.GetRecentLogMessages().Add(msg);
                    }
                }
            }

            return(true);
        }