public override void OnExecute(CommandEventArgs e) { IPendingChangesManager pcm = e.GetService<IPendingChangesManager>(); Dictionary<string, PendingChange> changes = new Dictionary<string, PendingChange>(StringComparer.OrdinalIgnoreCase); foreach (PendingChange pc in pcm.GetAll()) { if (!changes.ContainsKey(pc.FullPath)) changes.Add(pc.FullPath, pc); } Dictionary<string, SvnItem> selectedChanges = new Dictionary<string, SvnItem>(StringComparer.OrdinalIgnoreCase); foreach (SvnItem item in e.Selection.GetSelectedSvnItems(true)) { if (changes.ContainsKey(item.FullPath) && !selectedChanges.ContainsKey(item.FullPath)) { selectedChanges.Add(item.FullPath, item); } } Collection<SvnItem> resources = new Collection<SvnItem>(); List<SvnItem> selectedItems = new List<SvnItem>(selectedChanges.Values); // TODO: Give the whole list to a refreshable dialog! foreach (SvnItem item in selectedItems) { PendingChange pc = changes[item.FullPath]; if (pc.IsChangeForPatching()) continue; resources.Add(item); } if (resources.Count == 0) return; using (PendingChangeSelector pcs = new PendingChangeSelector()) { pcs.Context = e.Context; pcs.Text = CommandStrings.CreatePatchTitle; pcs.PreserveWindowPlacement = true; pcs.LoadItems(e.Selection.GetSelectedSvnItems(true)); DialogResult dr = pcs.ShowDialog(e.Context); if (dr != DialogResult.OK) return; string fileName = GetFileName(e.Context.DialogOwner); if (string.IsNullOrEmpty(fileName)) { return; } PendingChangeCreatePatchArgs pca = new PendingChangeCreatePatchArgs(); pca.FileName = fileName; IAnkhSolutionSettings ss = e.GetService<IAnkhSolutionSettings>(); pca.RelativeToPath = ss.ProjectRoot; pca.AddUnversionedFiles = true; List<PendingChange> patchChanges = new List<PendingChange>(pcs.GetSelection()); e.GetService<IPendingChangeHandler>().CreatePatch(patchChanges, pca); } }
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); } }); } }