Ejemplo n.º 1
0
        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();
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
        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.
        }
Ejemplo n.º 7
0
 public static void AddLogControl(ILogControl control)
 {
     _logControl.Add(control);
 }
Ejemplo n.º 8
0
        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.
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 public void Close()
 {
     m_LogControl = null;
 }
Ejemplo n.º 11
0
 public ControlAppender(ILogControl control)
 {
     m_LogControl = control;
     m_Name       = "ControlAppender";
 }
Ejemplo n.º 12
0
        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);
                        }
                    });
                }
        }
Ejemplo n.º 13
0
        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
        }
Ejemplo n.º 14
0
 public void Close()
 {
     m_LogControl = null;
 }
Ejemplo n.º 15
0
 public ControlAppender(ILogControl control)
 {
     m_LogControl = control;
     m_Name = "ControlAppender";
 }