public void OnExecute(CommandEventArgs e) { IAnkhSolutionSettings slnSettings = e.GetService <IAnkhSolutionSettings>(); List <ISvnLogItem> logItems = new List <ISvnLogItem>(e.Selection.GetSelection <ISvnLogItem>()); if (logItems.Count != 1) { return; } using (EditLogMessageDialog dialog = new EditLogMessageDialog()) { dialog.Context = e.Context; dialog.LogMessage = logItems[0].LogMessage; if (dialog.ShowDialog(e.Context) == DialogResult.OK) { if (dialog.LogMessage == logItems[0].LogMessage) { return; // No changes } IAnkhConfigurationService config = e.GetService <IAnkhConfigurationService>(); if (config != null) { if (dialog.LogMessage != null && dialog.LogMessage.Trim().Length > 0) { config.GetRecentLogMessages().Add(dialog.LogMessage); } } using (SvnClient client = e.GetService <ISvnClientPool>().GetClient()) { SvnSetRevisionPropertyArgs sa = new SvnSetRevisionPropertyArgs(); sa.AddExpectedError(SvnErrorCode.SVN_ERR_REPOS_DISABLED_FEATURE); client.SetRevisionProperty(logItems[0].RepositoryRoot, logItems[0].Revision, SvnPropertyNames.SvnLog, dialog.LogMessage, sa); if (sa.LastException != null && sa.LastException.SvnErrorCode == SvnErrorCode.SVN_ERR_REPOS_DISABLED_FEATURE) { AnkhMessageBox mb = new AnkhMessageBox(e.Context); mb.Show(sa.LastException.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } ILogControl logWindow = e.Selection.GetActiveControl <ILogControl>(); if (logWindow != null) { // TODO: Somehow repair scroll position/number of items loaded logWindow.Restart(); } } } }
public void OnUpdate(CommandUpdateEventArgs e) { ILogControl logWindow = e.Selection.GetActiveControl <ILogControl>(); if (logWindow == null) { e.Enabled = false; return; } SvnOrigin origin = EnumTools.GetSingle(logWindow.Origins); if (origin == null || !(origin.Target is SvnPathTarget)) { e.Enabled = false; return; } int count = 0; foreach (ISvnLogItem item in e.Selection.GetSelection <ISvnLogItem>()) { count++; if (count > 1) { break; } } switch (e.Command) { case AnkhCommand.LogRevertTo: if (count == 1) { return; } break; case AnkhCommand.LogRevertThisRevisions: if (count > 0) { return; } break; } e.Enabled = false; }
public override void OnUpdate(CommandUpdateEventArgs e) { switch (e.Command) { case AnkhCommand.SvnNodeAnnotate: ISvnRepositoryItem ri = EnumTools.GetSingle(e.Selection.GetSelection <ISvnRepositoryItem>()); if (ri != null && ri.Origin != null && ri.NodeKind != SvnNodeKind.Directory) { return; } break; case AnkhCommand.ItemAnnotate: foreach (SvnItem item in e.Selection.GetSelectedSvnItems(false)) { if (item.IsFile && item.IsVersioned && item.HasCopyableHistory) { return; } } break; case AnkhCommand.DocumentAnnotate: if (e.Selection.ActiveDocumentSvnItem != null && e.Selection.ActiveDocumentSvnItem.HasCopyableHistory) { return; } break; case AnkhCommand.LogAnnotateRevision: ILogControl logControl = e.Selection.GetActiveControl <ILogControl>(); if (logControl == null || logControl.Origins == null) { e.Visible = e.Enabled = false; return; } if (!EnumTools.IsEmpty(e.Selection.GetSelection <ISvnLogChangedPathItem>())) { return; } break; } e.Enabled = false; }
public void OnExecute(CommandEventArgs e) { // All checked in OnUpdate ILogControl logWindow = e.Selection.GetActiveControl <ILogControl>(); SvnOrigin origin = EnumTools.GetSingle(logWindow.Origins); ISvnLogItem item = EnumTools.GetSingle(e.Selection.GetSelection <ISvnLogItem>()); IAnkhDiffHandler diff = e.GetService <IAnkhDiffHandler>(); AnkhDiffArgs da = new AnkhDiffArgs(); da.BaseFile = diff.GetTempFile(origin.Target, item.Revision, true); if (da.BaseFile == null) { return; // User cancel } da.MineFile = ((SvnPathTarget)origin.Target).FullPath; da.BaseTitle = string.Format("Base (r{0})", item.Revision); da.MineTitle = "Working"; diff.RunDiff(da); }
public void OnUpdate(CommandUpdateEventArgs e) { ISvnLogItem item = EnumTools.GetSingle(e.Selection.GetSelection <ISvnLogItem>()); if (item != null) { ILogControl logWindow = e.Selection.GetActiveControl <ILogControl>(); if (logWindow != null) { SvnOrigin origin = EnumTools.GetSingle(logWindow.Origins); if (origin != null) { SvnPathTarget pt = origin.Target as SvnPathTarget; if (pt != null) { SvnItem svnItem = e.GetService <ISvnStatusCache>()[pt.FullPath]; if (svnItem != null && !svnItem.IsDirectory) { if (null == e.Selection.GetActiveControl <ILogControl>()) { e.Enabled = false; } return; } } } } } e.Enabled = false; }
void UpdateForRevChanges(ILogControl logWindow, CommandUpdateEventArgs e) { SvnOrigin first = EnumTools.GetSingle(logWindow.Origins); if (first == null) { e.Enabled = false; return; } SvnPathTarget pt = first.Target as SvnPathTarget; if (pt != null) { if (e.GetService <ISvnStatusCache>()[pt.FullPath].IsDirectory) { // We can't diff directories at this time e.Enabled = false; return; } } // Note: We can't have a local directory, but we can have a remote one. }
public static void AddLogControl(ILogControl control) { _logControl.Add(control); }
void UpdateForRevChanges(ILogControl logWindow, CommandUpdateEventArgs e) { GitOrigin first = EnumTools.GetSingle(logWindow.Origins); if (first == null) { e.Enabled = false; return; } if (e.GetService<IFileStatusCache>()[first.Target.FullPath].IsDirectory) { // We can't diff directories at this time e.Enabled = false; return; } // Note: We can't have a local directory, but we can have a remote one. }
bool PerformRevisionChanges(ILogControl log, CommandEventArgs e) { GitRevision startRevision = null; var startRevisionTime = DateTime.MaxValue; GitRevision endRevision = null; var endRevisionTime = DateTime.MinValue; int n = 0; HybridCollection<string> changedPaths = new HybridCollection<string>(); foreach (IGitLogItem item in e.Selection.GetSelection<IGitLogItem>()) { if (startRevisionTime > item.CommitDate) { startRevisionTime = item.CommitDate; startRevision = item.Revision; } if (endRevisionTime < item.CommitDate) { endRevisionTime = item.CommitDate; endRevision = item.Revision; } n++; } if (n > 0) { ExecuteDiff(e, log.Origins, new GitRevisionRange(n == 1 ? startRevision - 1 : startRevision, endRevision)); return true; } return false; }
public void Close() { m_LogControl = null; }
public ControlAppender(ILogControl control) { m_LogControl = control; m_Name = "ControlAppender"; }
public void OnExecute(CommandEventArgs e) { ILogControl logWindow = e.Selection.GetActiveControl <ILogControl>(); IProgressRunner progressRunner = e.GetService <IProgressRunner>(); if (logWindow == null) { return; } List <SvnRevisionRange> revisions = new List <SvnRevisionRange>(); if (e.Command == AnkhCommand.LogRevertTo) { ISvnLogItem item = EnumTools.GetSingle(e.Selection.GetSelection <ISvnLogItem>()); if (item == null) { return; } // Revert to revision, is revert everything after revisions.Add(new SvnRevisionRange(SvnRevision.Working, item.Revision)); } else { foreach (ISvnLogItem item in e.Selection.GetSelection <ISvnLogItem>()) { revisions.Add(new SvnRevisionRange(item.Revision, item.Revision - 1)); } } if (revisions.Count == 0) { return; } IAnkhOpenDocumentTracker tracker = e.GetService <IAnkhOpenDocumentTracker>(); HybridCollection <string> nodes = new HybridCollection <string>(StringComparer.OrdinalIgnoreCase); foreach (SvnOrigin o in logWindow.Origins) { SvnPathTarget pt = o.Target as SvnPathTarget; if (pt == null) { continue; } foreach (string file in tracker.GetDocumentsBelow(pt.FullPath)) { if (!nodes.Contains(file)) { nodes.Add(file); } } } if (nodes.Count > 0) { tracker.SaveDocuments(nodes); // Saves all open documents below all specified origins } using (DocumentLock dl = tracker.LockDocuments(nodes, DocumentLockType.NoReload)) using (dl.MonitorChangesForReload()) { SvnMergeArgs ma = new SvnMergeArgs(); progressRunner.RunModal(LogStrings.Reverting, delegate(object sender, ProgressWorkerArgs ee) { foreach (SvnOrigin item in logWindow.Origins) { SvnPathTarget target = item.Target as SvnPathTarget; if (target == null) { continue; } ee.Client.Merge(target.FullPath, target, revisions, ma); } }); } }
public void OnExecute(CommandEventArgs e) { ISvnLogItem selectedLog = EnumTools.GetSingle(e.Selection.GetSelection <ISvnLogItem>()); if (selectedLog == null) { return; } using (PropertyEditorDialog dialog = new PropertyEditorDialog(selectedLog.RepositoryRoot, selectedLog.Revision, true)) { SvnRevisionPropertyListArgs args = new SvnRevisionPropertyListArgs(); args.ThrowOnError = false; SvnPropertyCollection properties = null; if (!e.GetService <IProgressRunner>().RunModal(LogStrings.RetrievingRevisionProperties, delegate(object sender, ProgressWorkerArgs wa) { if (!wa.Client.GetRevisionPropertyList(selectedLog.RepositoryRoot, selectedLog.Revision, args, out properties)) { properties = null; } }).Succeeded) { return; } else if (properties != null) { List <PropertyEditItem> propItems = new List <PropertyEditItem>(); foreach (SvnPropertyValue prop in properties) { PropertyEditItem pi = new PropertyEditItem(dialog.ListView, prop.Key); pi.OriginalValue = pi.Value = pi.BaseValue = prop; propItems.Add(pi); } dialog.PropertyValues = propItems.ToArray(); } if (dialog.ShowDialog(e.Context) != DialogResult.OK) { return; } PropertyEditItem[] finalItems = dialog.PropertyValues; bool hasChanges = false; foreach (PropertyEditItem ei in finalItems) { if (ei.ShouldPersist) { hasChanges = true; break; } } if (!hasChanges) { return; } IProgressRunner progressRunner = e.GetService <IProgressRunner>(); ProgressRunnerResult result = progressRunner.RunModal(LogStrings.UpdatingRevisionProperties, delegate(object sender, ProgressWorkerArgs ee) { foreach (PropertyEditItem ei in finalItems) { if (!ei.ShouldPersist) { continue; } if (ei.IsDeleted) { ee.Client.DeleteRevisionProperty(selectedLog.RepositoryRoot, selectedLog.Revision, ei.PropertyName); } else if (ei.Value.StringValue != null) { ee.Client.SetRevisionProperty(selectedLog.RepositoryRoot, selectedLog.Revision, ei.PropertyName, ei.Value.StringValue); } else { ee.Client.SetRevisionProperty(selectedLog.RepositoryRoot, selectedLog.Revision, ei.PropertyName, ei.Value.RawValue); } } }); if (result.Succeeded) { ILogControl logWindow = e.Selection.GetActiveControl <ILogControl>(); if (logWindow != null) { logWindow.Restart(); } } } // using }