Exemplo n.º 1
0
        protected static bool SaveFile(CommandEventArgs e, ISvnRepositoryItem ri, string toFile)
        {
            ProgressRunnerResult r = e.GetService <IProgressRunner>().RunModal(CommandStrings.RetrievingFileForComparison,
                                                                               delegate(object sender, ProgressWorkerArgs ee)
            {
                using (FileStream fs = File.Create(toFile))
                {
                    SvnWriteArgs args = new SvnWriteArgs();
                    if (ri.Revision != null)
                    {
                        args.Revision = ri.Revision;
                    }

                    ee.Client.Write(ri.Origin.Target, fs, args);
                }
            });

            return(r.Succeeded);
        }
Exemplo n.º 2
0
        public string GetTempFile(SharpSvn.SvnTarget target, SharpSvn.SvnRevision revision, bool withProgress)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            else if (revision == null)
            {
                throw new ArgumentNullException("revision");
            }

            string file      = GetTempPath(target.FileName, revision);
            bool   unrelated = false;

            ProgressRunnerResult r = GetService <IProgressRunner>().RunModal(ServiceStrings.RetrievingFileForComparison,
                                                                             delegate(object sender, ProgressWorkerArgs aa)
            {
                SvnWriteArgs wa = new SvnWriteArgs();
                wa.Revision     = revision;
                wa.AddExpectedError(SvnErrorCode.SVN_ERR_CLIENT_UNRELATED_RESOURCES);

                using (Stream s = File.Create(file))
                    if (!aa.Client.Write(target, s, wa))
                    {
                        if (wa.LastException.SvnErrorCode == SvnErrorCode.SVN_ERR_CLIENT_UNRELATED_RESOURCES)
                        {
                            unrelated = true;
                        }
                    }
            });

            if (!r.Succeeded || unrelated)
            {
                return(null); // User canceled
            }
            if (File.Exists(file))
            {
                File.SetAttributes(file, FileAttributes.ReadOnly); // A readonly file does not allow editting from many diff tools
            }
            return(file);
        }
Exemplo n.º 3
0
        public override void OnExecute(CommandEventArgs e)
        {
            ISvnRepositoryItem selected = EnumTools.GetSingle(e.Selection.GetSelection <ISvnRepositoryItem>());

            string directoryName = "";

            using (CreateDirectoryDialog dlg = new CreateDirectoryDialog())
            {
                DialogResult result = dlg.ShowDialog(e.Context);

                directoryName = dlg.NewDirectoryName;

                if (result != DialogResult.OK || string.IsNullOrEmpty(directoryName))
                {
                    return;
                }

                string log = dlg.LogMessage;

                // Handle special characters like on local path
                Uri uri = SvnTools.AppendPathSuffix(selected.Uri, directoryName);

                ProgressRunnerResult prResult =
                    e.GetService <IProgressRunner>().RunModal(
                        CommandStrings.CreatingDirectories,
                        delegate(object sender, ProgressWorkerArgs ee)
                {
                    SvnCreateDirectoryArgs args = new SvnCreateDirectoryArgs();
                    args.ThrowOnError           = false;
                    args.CreateParents          = true;
                    args.LogMessage             = log;
                    ee.Client.RemoteCreateDirectory(uri, args);
                }
                        );

                if (prResult.Succeeded)
                {
                    selected.RefreshItem(false);
                }
            }
        }
Exemplo n.º 4
0
        public string GetTempFile(SvnItem target, SharpSvn.SvnRevision revision, bool withProgress)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            else if (revision == null)
            {
                throw new ArgumentNullException("revision");
            }

            string file = GetTempPath(target.Name, revision);

            if (target.NodeKind != SvnNodeKind.File)
            {
                throw new InvalidOperationException("Can't create a tempfile from a directory");
            }

            ProgressRunnerResult r = GetService <IProgressRunner>().RunModal(ServiceStrings.RetrievingFileForComparison,
                                                                             delegate(object sender, ProgressWorkerArgs aa)
            {
                SvnWriteArgs wa = new SvnWriteArgs();
                wa.Revision     = revision;

                using (Stream s = File.Create(file))
                    aa.Client.Write(target.FullPath, s, wa);
            });

            if (!r.Succeeded)
            {
                return(null); // User canceled
            }
            if (File.Exists(file))
            {
                File.SetAttributes(file, FileAttributes.ReadOnly); // A readonly file does not allow editting from many diff tools
            }
            return(file);
        }
Exemplo n.º 5
0
        public string[] GetTempFiles(SvnTarget target, SvnRevision from, SvnRevision to, bool withProgress)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            else if (from == null)
            {
                throw new ArgumentNullException("from");
            }
            else if (to == null)
            {
                throw new ArgumentNullException("to");
            }

            string f1;
            string f2;

            if (from.RevisionType == SvnRevisionType.Number && to.RevisionType == SvnRevisionType.Number && from.Revision + 1 == to.Revision)
            {
                f1 = GetTempPath(target.FileName, from);
                f2 = GetTempPath(target.FileName, to);

                int n = 0;
                ProgressRunnerResult r = Context.GetService <IProgressRunner>().RunModal(ServiceStrings.RetrievingMultipleVersionsOfFile,
                                                                                         delegate(object sender, ProgressWorkerArgs e)
                {
                    SvnFileVersionsArgs ea = new SvnFileVersionsArgs();
                    ea.Start = from;
                    ea.End   = to;
                    ea.AddExpectedError(SvnErrorCode.SVN_ERR_UNSUPPORTED_FEATURE);     // Github

                    e.Client.FileVersions(target, ea,
                                          delegate(object sender2, SvnFileVersionEventArgs e2)
                    {
                        if (n++ == 0)
                        {
                            e2.WriteTo(f1);
                        }
                        else
                        {
                            e2.WriteTo(f2);
                        }
                    });
                });

                if (!r.Succeeded)
                {
                    return(null);
                }

                if (n != 2)
                {
                    // Sloooooow workaround for SvnBridge / Codeplex

                    f1 = GetTempFile(target, from, withProgress);
                    if (f1 == null)
                    {
                        return(null); // Canceled
                    }
                    f2 = GetTempFile(target, to, withProgress);
                }
            }
            else
            {
                f1 = GetTempFile(target, from, withProgress);
                if (f1 == null)
                {
                    return(null); // Canceled
                }
                f2 = GetTempFile(target, to, withProgress);
            }

            if (string.IsNullOrEmpty(f1) || string.IsNullOrEmpty(f2))
            {
                return(null);
            }

            string[] files = new string[] { f1, f2 };

            foreach (string f in files)
            {
                if (File.Exists(f))
                {
                    File.SetAttributes(f, FileAttributes.ReadOnly);
                }
            }

            return(files);
        }
Exemplo n.º 6
0
        public override void OnExecute(CommandEventArgs e)
        {
            SvnItem root = GetRoot(e);

            if (root == null)
            {
                return;
            }

            using (CreateBranchDialog dlg = new CreateBranchDialog())
            {
                if (e.Command == AnkhCommand.ProjectBranch)
                {
                    dlg.Text = CommandStrings.BranchProject;
                }

                dlg.SrcFolder  = root.FullPath;
                dlg.SrcUri     = root.Uri;
                dlg.EditSource = false;

                dlg.Revision = root.Status.Revision;

                RepositoryLayoutInfo info;
                if (RepositoryUrlUtils.TryGuessLayout(e.Context, root.Uri, out info))
                {
                    dlg.NewDirectoryName = new Uri(info.BranchesRoot, ".");
                }

                while (true)
                {
                    if (DialogResult.OK != dlg.ShowDialog(e.Context))
                    {
                        return;
                    }

                    string msg = dlg.LogMessage;

                    bool retry = false;
                    bool ok    = false;
                    ProgressRunnerResult rr =
                        e.GetService <IProgressRunner>().RunModal(CommandStrings.CreatingBranch,
                                                                  delegate(object sender, ProgressWorkerArgs ee)
                    {
                        SvnInfoArgs ia  = new SvnInfoArgs();
                        ia.ThrowOnError = false;

                        if (ee.Client.Info(dlg.NewDirectoryName, ia, null))
                        {
                            DialogResult dr = DialogResult.Cancel;

                            ee.Synchronizer.Invoke((AnkhAction)
                                                   delegate
                            {
                                AnkhMessageBox mb = new AnkhMessageBox(ee.Context);
                                dr = mb.Show(string.Format("The Branch/Tag at Url '{0}' already exists.", dlg.NewDirectoryName),
                                             "Path Exists", MessageBoxButtons.RetryCancel);
                            }, null);

                            if (dr == DialogResult.Retry)
                            {
                                // show dialog again to let user modify the branch URL
                                retry = true;
                            }
                        }
                        else
                        {
                            SvnCopyArgs ca   = new SvnCopyArgs();
                            ca.CreateParents = true;
                            ca.LogMessage    = msg;

                            ok = dlg.CopyFromUri ?
                                 ee.Client.RemoteCopy(new SvnUriTarget(dlg.SrcUri, dlg.SelectedRevision), dlg.NewDirectoryName, ca) :
                                 ee.Client.RemoteCopy(dlg.SrcFolder, dlg.NewDirectoryName, ca);
                        }
                    });

                    if (rr.Succeeded && ok && dlg.SwitchToBranch)
                    {
                        e.GetService <IAnkhCommandService>().PostExecCommand(AnkhCommand.SolutionSwitchDialog, dlg.NewDirectoryName);
                    }

                    if (!retry)
                    {
                        break;
                    }
                }
            }
        }
Exemplo n.º 7
0
        public override void OnExecute(CommandEventArgs e)
        {
            // TODO: Choose which conflict to edit if we have more than one!
            SvnItem conflict = null;

            if (e.Command == AnkhCommand.DocumentConflictEdit)
            {
                conflict = e.Selection.ActiveDocumentSvnItem;

                if (conflict == null || !conflict.IsConflicted)
                {
                    return;
                }
            }
            else
            {
                foreach (SvnItem item in e.Selection.GetSelectedSvnItems(false))
                {
                    if (item.IsConflicted)
                    {
                        conflict = item;
                        break;
                    }
                }
            }

            if (conflict == null)
            {
                return;
            }

            conflict.MarkDirty();
            if (conflict.Status.LocalTextStatus != SvnStatus.Conflicted)
            {
                AnkhMessageBox mb = new AnkhMessageBox(e.Context);

                mb.Show(string.Format(CommandStrings.TheConflictInXIsAlreadyResolved, conflict.FullPath), CommandStrings.EditConflictTitle,
                        System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
                return;
            }

            SvnInfoEventArgs conflictInfo = null;

            bool ok = false;
            ProgressRunnerResult r = e.GetService <IProgressRunner>().RunModal(CommandStrings.RetrievingConflictDetails,
                                                                               delegate(object sender, ProgressWorkerArgs a)
            {
                ok = a.Client.GetInfo(conflict.FullPath, out conflictInfo);
            });

            if (!ok || !r.Succeeded || conflictInfo == null)
            {
                return;
            }

            AnkhMergeArgs da  = new AnkhMergeArgs();
            string        dir = conflict.Directory;

            da.BaseFile   = Path.Combine(dir, conflictInfo.ConflictOld ?? conflictInfo.ConflictNew);
            da.TheirsFile = Path.Combine(dir, conflictInfo.ConflictNew ?? conflictInfo.ConflictOld);

            if (!string.IsNullOrEmpty(conflictInfo.ConflictWork))
            {
                da.MineFile = Path.Combine(dir, conflictInfo.ConflictWork);
            }
            else
            {
                da.MineFile = conflict.FullPath;
            }

            da.MergedFile = conflict.FullPath;

            da.BaseTitle   = "Base";
            da.TheirsTitle = "Theirs";
            da.MineTitle   = "Mine";
            da.MergedTitle = conflict.Name;


            e.GetService <IAnkhDiffHandler>().RunMerge(da);
        }
Exemplo n.º 8
0
        public void DoBlame(CommandEventArgs e,
                            SvnOrigin origin,
                            SvnRevision revisionStart,
                            SvnRevision revisionEnd,
                            bool ignoreEols,
                            SvnIgnoreSpacing ignoreSpacing,
                            bool retrieveMergeInfo)
        {
            // There are two SVN related operations:
            // [1] Getting the file at revisionEnd, which will be displayed in the editor
            // [2] Getting the blame information, which will be displayed in the margin

            // This is the parameter structure for [1] getting the file
            SvnWriteArgs wa = new SvnWriteArgs();

            wa.Revision = revisionEnd;

            // This is the parameter structure for [2] getting the blame information
            SvnBlameArgs ba = new SvnBlameArgs();

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

            SvnTarget target = origin.Target;

            // Can we make this an MEF service?
            IAnkhTempFileManager tempMgr = e.GetService <IAnkhTempFileManager>();
            string tempFile = tempMgr.GetTempFileNamed(target.FileName);

            Collection <SvnBlameEventArgs> blameResult = null;

            bool retry             = false;
            ProgressRunnerResult r = e.GetService <IProgressRunner>().RunModal("Annotating", delegate(object sender, ProgressWorkerArgs ee)
            {
                // Here we [1] get the file at revisionEnd
                using (FileStream fs = File.Create(tempFile))
                {
                    ee.Client.Write(target, fs, wa);
                }

                // Here we [2] get the blame information
                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))
                {
                    // Move to resources later :)
                    if (DialogResult.Yes != mb.Show("You are trying to annotate a binary file. Are you sure you want to continue?",
                                                    "Binary file detected",
                                                    MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                    {
                        return;
                    }

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

            if (!r.Succeeded)
            {
                return;
            }

            // Create a parameter struture and add it to our internal map.
            // Creating the actual view model class is now deferred to the GetModel method.
            var annParam = new AnnotateMarginParameters {
                Context = e.Context, Origin = origin, BlameResult = blameResult
            };

            _ViewModelMap.Add(tempFile, annParam);

            // Open the editor.
            // ToDo: Open files like resx as code.
            var dte = e.GetService <DTE> (typeof(SDTE));

            dte.ItemOperations.OpenFile(tempFile, EnvDTE.Constants.vsViewKindTextView);
        }
Exemplo n.º 9
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
        }
Exemplo n.º 10
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);
                    }
                }
            }
        }
Exemplo n.º 11
0
        public override void OnFinish(System.ComponentModel.CancelEventArgs e)
        {
            WizardMessage newMsg = null;

            this.resultUri = null;
            EnablePageAndButtons(false);
            ScmUserNamePasswordEventArgs credentialsArgs = null;

            try
            {
                Uri uri = this.providerSelectionPage.Uri;
                if (uri == null && this.repositorySelectionPages != null)
                {
                    ScmRepositoryProvider repoProvider = this.providerSelectionPage.SelectedRepositoryProvider;
                    if (repoProvider != null)
                    {
                        RepositorySelectionPage repoSelectionPage;
                        if (this.repositorySelectionPages.TryGetValue(repoProvider.Id, out repoSelectionPage))
                        {
                            uri = repoSelectionPage.Uri;
                            if (uri != null)
                            {
                                credentialsArgs = new ScmUserNamePasswordEventArgs(uri.AbsoluteUri);
                                repoSelectionPage.FillUsernamePassword(credentialsArgs);
                                if (credentialsArgs.Cancel)
                                {
                                    credentialsArgs = null;
                                }
                            }
                        }
                    }
                }
                bool cancel = false;
                if (uri == null)
                {
                    cancel = true;
                }
                else
                {
                    Exception exc = null;
                    if (credentialsArgs != null)
                    {
                        try
                        {
                            ProgressRunnerArgs runnerArgs = new ProgressRunnerArgs();
                            runnerArgs.CreateLog = false;
                            // Make sure username and password is saved for future use
                            ProgressRunnerResult result = Context.GetService <IProgressRunner>().RunModal("Checking repository",
                                                                                                          runnerArgs,
                                                                                                          delegate(object sender, ProgressWorkerArgs ee)
                                                                                                          { EnsureCredentials(credentialsArgs); });
                            cancel = !(result.Succeeded || result.Exception == null);
                            exc    = result.Exception;
                        }
                        catch (Exception runnere)
                        {
                            cancel = true;
                            exc    = runnere.InnerException == null ? runnere : runnere.InnerException;
                        }
                    }
                    // TODO (BA) Should we validate here?

                    /*
                     * try
                     * {
                     *  ProgressRunnerArgs runnerArgs = new ProgressRunnerArgs();
                     *  runnerArgs.CreateLog = false;
                     *  // Check the validity of the specified repository location using IProgressRunner
                     *  ProgressRunnerResult result = Context.GetService<IProgressRunner>().RunModal("Checking URI",
                     *      runnerArgs,
                     *      delegate(object sender, ProgressWorkerArgs ee)
                     *      { CheckResult(uri); });
                     *  cancel = !(result.Succeeded || result.Exception == null);
                     *  exc = result.Exception;
                     * }
                     * catch (Exception runnere)
                     * {
                     *  cancel = true;
                     *  exc = runnere.InnerException == null ? runnere : runnere.InnerException;
                     * }
                     */
                    if (cancel && exc != null)
                    {
                        newMsg = new WizardMessage(exc.Message, WizardMessage.MessageType.Error);
                    }
                }
                this.resultUri = cancel ? null : uri;
                DialogResult   = cancel ? System.Windows.Forms.DialogResult.None : System.Windows.Forms.DialogResult.OK;
                if (CurrentPage.Message != newMsg)
                {
                    CurrentPage.Message = newMsg;
                    UpdateMessage();
                }
                e.Cancel = cancel;
            }
            finally
            {
                EnablePageAndButtons(true);
            }
        }