private bool TryGetDownloadedRunner()

in JetBrains.Profiler.SelfApi/src/Impl/PrerequisiteBase.cs [254:301]


    private bool TryGetDownloadedRunner(string downloadPath, string runtimeIdString, out string runnerPath)
    {
      runnerPath = null;
      var runnerName = GetRunnerName();
      Trace.Verbose("Prerequisite.TryGetDownloadedRunner: `{0}`", runnerName);

      if (string.IsNullOrEmpty(downloadPath))
        downloadPath = GetDefaultDownloadPath();

      downloadPath = Path.Combine(downloadPath, Name);

      Trace.Verbose("Prerequisite.TryGetDownloadedRunner: Looking for latest version at `{0}`...", downloadPath);

      if (!Directory.Exists(downloadPath))
      {
        Trace.Verbose("Prerequisite.TryGetDownloadedRunner: No runner found.");
        return false;
      }

      var packageVersion2 = SemanticVersion.Version2;
      string latestOriginal = null; // the latest found version including build meta-info
      NuGet.SemanticVersion latest = null; // the latest parsed version w/o meta-info
      foreach (var versionFolder in Directory.GetDirectories(downloadPath))
      {
        var sVer = Path.GetFileName(versionFolder);
        Trace.Verbose("Prerequisite.TryGetDownloadedRunner:   {0}", sVer);

        var ver = NuGet.SemanticVersion.TryParse(sVer);
        if (ver == null || ver.Version2 != packageVersion2)
          continue;

        if (latest == null || latest.CompareTo(ver) <= 0)
        {
          latestOriginal = sVer;
          latest = ver;
        }
      }

      if (latestOriginal != null)
      {
        runnerPath = Path.Combine(downloadPath, latestOriginal, runtimeIdString, runnerName);
        Trace.Verbose("Prerequisite.TryGetDownloadedRunner: Checking `{0}`...", runnerPath);
        return File.Exists(runnerPath);
      }

      Trace.Verbose("Prerequisite.TryGetDownloadedRunner: No runner found.");
      return false;
    }