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 = ""; } }
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; }
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); }