Ejemplo n.º 1
0
        private bool RunInternalDiff(AnkhDiffArgs args)
        {
            DiffEditorControl diffEditor = new DiffEditorControl();

            IAnkhEditorResolver er = GetService <IAnkhEditorResolver>();

            diffEditor.CreateDiffEditor(this, args);

            if (diffEditor.WindowFrame != null && !args.ShowDiffAsDocument && VSVersion.VS2010OrLater)
            {
                diffEditor.WindowFrame.SetProperty((int)__VSFPROPID.VSFPROPID_FrameMode, (int)VSFRAMEMODE.VSFM_Float);
            }

            return(true);
        }
Ejemplo n.º 2
0
        /*private void TryObtainBlock(CommandEventArgs e)
         * {
         *  ISelectionContextEx ex = e.GetService<ISelectionContextEx>(typeof(ISelectionContext));
         *
         *  if (ex == null)
         *      return;
         *
         *  IVsTextView view = ex.ActiveDocumentFrameTextView;
         *  IVsTextLines lines;
         *  Guid languageService;
         *  IVsLanguageInfo info;
         *
         *  if (view != null
         *      && VSErr.Succeeded(view.GetBuffer(out lines))
         *      && VSErr.Succeeded(lines.GetLanguageServiceID(out languageService))
         *      && null != (info = e.QueryService<IVsLanguageInfo>(languageService)))
         *  {
         *      GC.KeepAlive(info);
         *      IVsLanguageBlock b = info as IVsLanguageBlock;
         *      if (b != null)
         *      {
         *          GC.KeepAlive(b);
         *      }
         *  }
         *  //IVsLanguageBlock
         *
         *
         *  GC.KeepAlive(ex);
         * }*/

        static void DoBlame(CommandEventArgs e, SvnOrigin item, SvnRevision revisionStart, SvnRevision revisionEnd, bool ignoreEols, SvnIgnoreSpacing ignoreSpacing, bool retrieveMergeInfo)
        {
            SvnWriteArgs wa = new SvnWriteArgs();

            wa.Revision = revisionEnd;

            SvnBlameArgs ba = new SvnBlameArgs();

            ba.Start                   = revisionStart;
            ba.End                     = revisionEnd;
            ba.IgnoreLineEndings       = ignoreEols;
            ba.IgnoreSpacing           = ignoreSpacing;
            ba.RetrieveMergedRevisions = retrieveMergeInfo;

            SvnTarget target = item.Target;

            IAnkhTempFileManager tempMgr = e.GetService <IAnkhTempFileManager>();
            string tempFile = tempMgr.GetTempFileNamed(target.FileName);

            Collection <SvnBlameEventArgs> blameResult = null;

            bool retry             = false;
            ProgressRunnerResult r = e.GetService <IProgressRunner>().RunModal(CommandStrings.Annotating, delegate(object sender, ProgressWorkerArgs ee)
            {
                using (FileStream fs = File.Create(tempFile))
                {
                    ee.Client.Write(target, fs, wa);
                }

                ba.SvnError +=
                    delegate(object errorSender, SvnErrorEventArgs errorEventArgs)
                {
                    if (errorEventArgs.Exception is SvnClientBinaryFileException)
                    {
                        retry = true;
                        errorEventArgs.Cancel = true;
                    }
                };
                ee.Client.GetBlame(target, ba, out blameResult);
            });

            if (retry)
            {
                using (AnkhMessageBox mb = new AnkhMessageBox(e.Context))
                {
                    if (DialogResult.Yes != mb.Show(
                            CommandStrings.AnnotateBinaryFileContinueAnywayText,
                            CommandStrings.AnnotateBinaryFileContinueAnywayTitle,
                            MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                    {
                        return;
                    }

                    r = e.GetService <IProgressRunner>()
                        .RunModal(CommandStrings.Annotating,
                                  delegate(object sender, ProgressWorkerArgs ee)
                    {
                        ba.IgnoreMimeType = true;
                        ee.Client.GetBlame(target, ba, out blameResult);
                    });
                }
            }

            if (!r.Succeeded)
            {
                return;
            }

            AnnotateEditorControl annEditor = new AnnotateEditorControl();
            IAnkhEditorResolver   er        = e.GetService <IAnkhEditorResolver>();

            annEditor.Create(e.Context, tempFile);
            annEditor.LoadFile(tempFile);
            annEditor.AddLines(item, blameResult);

            // Detect and set the language service
            Guid language;

            if (er.TryGetLanguageService(Path.GetExtension(target.FileName), out language))
            {
                // Extension is mapped -> user
                annEditor.SetLanguageService(language);
            }
            else if (blameResult != null && blameResult.Count > 0 && blameResult[0].Line != null)
            {
                // Extension is not mapped -> Check if this is xml (like project files)
                string line = blameResult[0].Line.Trim();

                if (line.StartsWith("<?xml") ||
                    (line.StartsWith("<") && line.Contains("xmlns=\"http://schemas.microsoft.com/developer/msbuild/")))
                {
                    if (er.TryGetLanguageService(".xml", out language))
                    {
                        annEditor.SetLanguageService(language);
                    }
                }
            }
        }