public override void OnExecute(CommandEventArgs e) { string argumentFile = e.Argument as string; List<SvnItem> selection = new List<SvnItem>(); if (string.IsNullOrEmpty(argumentFile)) { if (e.PromptUser || (!e.DontPrompt && !Shift)) { selection.AddRange(e.Selection.GetSelectedSvnItems(true)); using (PendingChangeSelector pcs = new PendingChangeSelector()) { pcs.Text = CommandStrings.AddDialogTitle; pcs.PreserveWindowPlacement = true; pcs.LoadItems(selection, delegate(SvnItem item) { return !item.IsVersioned && item.IsVersionable; }, delegate(SvnItem item) { return !item.IsIgnored || !item.InSolution; }); if (pcs.ShowDialog(e.Context) != DialogResult.OK) return; selection.Clear(); selection.AddRange(pcs.GetSelectedItems()); } } else { foreach (SvnItem item in e.Selection.GetSelectedSvnItems(true)) { if (!item.IsVersioned && item.IsVersionable && !item.IsIgnored && item.InSolution) selection.Add(item); } } } else { selection.Add(e.GetService<IFileStatusCache>()[argumentFile]); } ICollection<string> paths = SvnItem.GetPaths(selection); IAnkhOpenDocumentTracker documentTracker = e.GetService<IAnkhOpenDocumentTracker>(); documentTracker.SaveDocuments(paths); // Make sure all files are saved before updating/merging! using (DocumentLock lck = documentTracker.LockDocuments(paths, DocumentLockType.NoReload)) using (lck.MonitorChangesForReload()) e.GetService<IProgressRunner>().RunModal(CommandStrings.AddTaskDialogTitle, delegate(object sender, ProgressWorkerArgs ee) { SvnAddArgs args = new SvnAddArgs(); args.Depth = SvnDepth.Empty; args.AddParents = true; foreach (SvnItem item in selection) { ee.Client.Add(item.FullPath, args); } }); }
public override void OnExecute(CommandEventArgs e) { List<SvnItem> toRevert = new List<SvnItem>(); HybridCollection<string> contained = new HybridCollection<string>(StringComparer.OrdinalIgnoreCase); HybridCollection<string> checkedItems = null; foreach (SvnItem i in e.Selection.GetSelectedSvnItems(false)) { if (contained.Contains(i.FullPath)) continue; contained.Add(i.FullPath); if (i.IsModified || (i.IsVersioned && i.IsDocumentDirty) || i.IsConflicted) toRevert.Add(i); } Predicate<SvnItem> initialCheckedFilter = null; if (toRevert.Count > 0) { checkedItems = new HybridCollection<string>(contained, StringComparer.OrdinalIgnoreCase); initialCheckedFilter = delegate(SvnItem item) { return checkedItems.Contains(item.FullPath); }; } foreach (SvnItem i in e.Selection.GetSelectedSvnItems(true)) { if (contained.Contains(i.FullPath)) continue; contained.Add(i.FullPath); if (i.IsModified || (i.IsVersioned && i.IsDocumentDirty)) toRevert.Add(i); } if (e.PromptUser || (!e.DontPrompt && !Shift)) { using (PendingChangeSelector pcs = new PendingChangeSelector()) { pcs.Text = CommandStrings.RevertDialogTitle; pcs.PreserveWindowPlacement = true; pcs.LoadItems(toRevert, null, initialCheckedFilter); if (pcs.ShowDialog(e.Context) != DialogResult.OK) return; toRevert.Clear(); toRevert.AddRange(pcs.GetSelectedItems()); } } IAnkhOpenDocumentTracker documentTracker = e.GetService<IAnkhOpenDocumentTracker>(); ICollection<string> revertPaths = SvnItem.GetPaths(toRevert); documentTracker.SaveDocuments(revertPaths); // perform the actual revert using (DocumentLock dl = documentTracker.LockDocuments(revertPaths, DocumentLockType.NoReload)) using (dl.MonitorChangesForReload()) { e.GetService<IProgressRunner>().RunModal(CommandStrings.Reverting, delegate(object sender, ProgressWorkerArgs a) { SvnRevertArgs ra = new SvnRevertArgs(); ra.Depth = SvnDepth.Empty; ra.AddExpectedError(SvnErrorCode.SVN_ERR_WC_NOT_DIRECTORY); // Parent revert invalidated this change foreach (SvnItem item in toRevert) { a.Client.Revert(item.FullPath, ra); } }); } }