public static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, IFileSystemProxy fileSystemProxy, Action onSuccess) { Action <Exception> handleException = exception => { #if DEBUG Environment.ExitCode = 1; ConsoleImpl.WriteError(String.Format("{0} ({1})", exception.ToString(), downloadStrategy.Name)); return; #else ConsoleImpl.WriteError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); if (!fileSystemProxy.FileExists(dlArgs.Target)) { Environment.ExitCode = 1; } else { fileSystemProxy.WaitForFileFinished(dlArgs.Target); onSuccess(); } #endif }; try { string versionRequested; if (!dlArgs.IgnorePrerelease) { versionRequested = "prerelease requested"; } else if (String.IsNullOrWhiteSpace(dlArgs.LatestVersion)) { versionRequested = "downloading latest stable"; } else { versionRequested = string.Format("version {0} requested", dlArgs.LatestVersion); } ConsoleImpl.WriteInfo("Checking Paket version ({0})...", versionRequested); ConsoleImpl.WriteTrace("Target path is {0}", dlArgs.Target); var localVersion = fileSystemProxy.GetLocalFileVersion(dlArgs.Target); ConsoleImpl.WriteTrace("File in target path version: v{0}", string.IsNullOrEmpty(localVersion) ? "UNKNOWN" : localVersion); var specificVersionRequested = true; var latestVersion = dlArgs.LatestVersion; if (latestVersion == string.Empty) { ConsoleImpl.WriteTrace("No version specified, checking online..."); var getLatestVersionWatch = Stopwatch.StartNew(); latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease); getLatestVersionWatch.Stop(); ConsoleImpl.WriteTrace("Latest version check found v{0} in {1:0.##} second(s)", latestVersion, getLatestVersionWatch.Elapsed.TotalSeconds); specificVersionRequested = false; } if (dlArgs.DoSelfUpdate) { ConsoleImpl.WriteInfo("Trying self update"); downloadStrategy.SelfUpdate(latestVersion); } else { var currentSemVer = String.IsNullOrEmpty(localVersion) ? new SemVer() : SemVer.Create(localVersion); if (currentSemVer.PreRelease != null && dlArgs.IgnorePrerelease) { currentSemVer = new SemVer(); } var latestSemVer = SemVer.Create(latestVersion); var comparison = currentSemVer.CompareTo(latestSemVer); if ((comparison > 0 && specificVersionRequested) || comparison < 0) { PaketHashFile hashFile = null; if (downloadStrategy.CanDownloadHashFile) { ConsoleImpl.WriteTrace("Downloading hash for v{0} ...", latestVersion); var downloadHashWatch = Stopwatch.StartNew(); hashFile = downloadStrategy.DownloadHashFile(latestVersion); downloadHashWatch.Stop(); ConsoleImpl.WriteTrace("Hash download took {0:0.##} second(s)", downloadHashWatch.Elapsed.TotalSeconds); } ConsoleImpl.WriteTrace("Downloading v{0} ...", latestVersion); var downloadWatch = Stopwatch.StartNew(); downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target, hashFile); downloadWatch.Stop(); ConsoleImpl.WriteTrace("Download took {0:0.##} second(s)", downloadWatch.Elapsed.TotalSeconds); ConsoleImpl.WriteInfo("Done in {0:0.##} second(s).", executionWatch.Elapsed.TotalSeconds); } else { ConsoleImpl.WriteInfo("Paket.exe {0} is up to date.", localVersion); } } executionWatch.Stop(); ConsoleImpl.WriteTrace("Paket Bootstrapping took {0:0.##} second(s)", executionWatch.Elapsed.TotalSeconds); onSuccess(); } catch (WebException exn) { var shouldHandleException = true; if (!fileSystemProxy.FileExists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; ConsoleImpl.WriteInfo("'{0}' download failed. If using Mono, you may need to import trusted certificates using the 'mozroots' tool as none are contained by default. Trying fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); StartPaketBootstrapping(fallbackStrategy, dlArgs, fileSystemProxy, onSuccess); shouldHandleException = !fileSystemProxy.FileExists(dlArgs.Target); } } if (shouldHandleException) { handleException(exn); } } catch (Exception exn) { handleException(exn); } }
public static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, IFileProxy fileProxy) { Action <Exception> handleException = exception => { if (!File.Exists(dlArgs.Target)) { Environment.ExitCode = 1; } ConsoleImpl.WriteError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); }; try { string versionRequested; if (!dlArgs.IgnorePrerelease) { versionRequested = "prerelease requested"; } else if (String.IsNullOrWhiteSpace(dlArgs.LatestVersion)) { versionRequested = "downloading latest stable"; } else { versionRequested = string.Format("version {0} requested", dlArgs.LatestVersion); } ConsoleImpl.WriteDebug("Checking Paket version ({0})...", versionRequested); var localVersion = fileProxy.GetLocalFileVersion(dlArgs.Target); var specificVersionRequested = true; var latestVersion = dlArgs.LatestVersion; if (latestVersion == String.Empty) { latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease); specificVersionRequested = false; } if (dlArgs.DoSelfUpdate) { ConsoleImpl.WriteDebug("Trying self update"); downloadStrategy.SelfUpdate(latestVersion); } else { var currentSemVer = String.IsNullOrEmpty(localVersion) ? new SemVer() : SemVer.Create(localVersion); if (currentSemVer.PreRelease != null && dlArgs.IgnorePrerelease) { currentSemVer = new SemVer(); } var latestSemVer = SemVer.Create(latestVersion); var comparison = currentSemVer.CompareTo(latestSemVer); if ((comparison > 0 && specificVersionRequested) || comparison < 0) { downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target); ConsoleImpl.WriteDebug("Done."); } else { ConsoleImpl.WriteDebug("Paket.exe {0} is up to date.", localVersion); } } } catch (WebException exn) { var shouldHandleException = true; if (!File.Exists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; ConsoleImpl.WriteDebug("'{0}' download failed. If using Mono, you may need to import trusted certificates using the 'mozroots' tool as none are contained by default. Trying fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); StartPaketBootstrapping(fallbackStrategy, dlArgs, fileProxy); shouldHandleException = !File.Exists(dlArgs.Target); } } if (shouldHandleException) { handleException(exn); } } catch (Exception exn) { handleException(exn); } }
private static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, bool silent) { Action<Exception> handleException = exception => { if (!File.Exists(dlArgs.Target)) Environment.ExitCode = 1; BootstrapperHelper.WriteConsoleError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); }; try { if (!silent) { string versionRequested; if (!dlArgs.IgnorePrerelease) versionRequested = "prerelease requested"; else if (String.IsNullOrWhiteSpace(dlArgs.LatestVersion)) versionRequested = "downloading latest stable"; else versionRequested = string.Format("version {0} requested", dlArgs.LatestVersion); Console.WriteLine("Checking Paket version ({0})...", versionRequested); } var localVersion = BootstrapperHelper.GetLocalFileVersion(dlArgs.Target); var specificVersionRequested = true; var latestVersion = dlArgs.LatestVersion; if (latestVersion == String.Empty) { latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease, silent); specificVersionRequested = false; } if (dlArgs.DoSelfUpdate) { if (!silent) Console.WriteLine("Trying self update"); downloadStrategy.SelfUpdate(latestVersion, silent); } else { var currentSemVer = String.IsNullOrEmpty(localVersion) ? new SemVer() : SemVer.Create(localVersion); var latestSemVer = SemVer.Create(latestVersion); var comparison = currentSemVer.CompareTo(latestSemVer); if ((comparison > 0 && specificVersionRequested) || comparison < 0) { downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target, silent); if (!silent) Console.WriteLine("Done."); } else { if (!silent) Console.WriteLine("Paket.exe {0} is up to date.", localVersion); } } } catch (WebException exn) { var shouldHandleException = true; if (!File.Exists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; if (!silent) Console.WriteLine("'{0}' download failed. If using Mono, you may need to import trusted certificates using the 'mozroots' tool as none are contained by default. Trying fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); StartPaketBootstrapping(fallbackStrategy, dlArgs, silent); shouldHandleException = !File.Exists(dlArgs.Target); } } if (shouldHandleException) handleException(exn); } catch (Exception exn) { handleException(exn); } }
private static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, bool silent) { Action <Exception> handleException = exception => { if (!File.Exists(dlArgs.Target)) { Environment.ExitCode = 1; } BootstrapperHelper.WriteConsoleError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); }; try { var localVersion = BootstrapperHelper.GetLocalFileVersion(dlArgs.Target); var latestVersion = dlArgs.LatestVersion; if (latestVersion == String.Empty) { latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease); } if (dlArgs.DoSelfUpdate) { if (!silent) { Console.WriteLine("Trying self update"); } downloadStrategy.SelfUpdate(latestVersion, silent); } else { var currentSemVer = String.IsNullOrEmpty(localVersion) ? new SemVer() : SemVer.Create(localVersion); var latestSemVer = SemVer.Create(latestVersion); if (currentSemVer.CompareTo(latestSemVer) != 0) { downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target, silent); if (!silent) { Console.WriteLine("Done."); } } else { if (!silent) { Console.WriteLine("Paket.exe {0} is up to date.", localVersion); } } } } catch (WebException exn) { var shouldHandleException = true; if (!File.Exists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; if (!silent) { Console.WriteLine("'{0}' download failed. If using Mono, you may need to import trusted certificates using the 'mozroots' tool as none are contained by default. Trying fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); } StartPaketBootstrapping(fallbackStrategy, dlArgs, silent); shouldHandleException = !File.Exists(dlArgs.Target); } } if (shouldHandleException) { handleException(exn); } } catch (Exception exn) { handleException(exn); } }
private static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, bool silent) { Action<Exception> handleException = exception => { if (!File.Exists(dlArgs.Target)) Environment.ExitCode = 1; BootstrapperHelper.WriteConsoleError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); }; try { var localVersion = BootstrapperHelper.GetLocalFileVersion(dlArgs.Target); var latestVersion = dlArgs.LatestVersion; if (latestVersion == String.Empty) { latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease); } if (dlArgs.DoSelfUpdate) { if (!silent) Console.WriteLine("Trying self update"); downloadStrategy.SelfUpdate(latestVersion, silent); } else { if (!localVersion.StartsWith(latestVersion)) { downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target, silent); if (!silent) Console.WriteLine("Done."); } else { if (!silent) Console.WriteLine("Paket.exe {0} is up to date.", localVersion); } } } catch (WebException exn) { var shouldHandleException = true; if (!File.Exists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; if (!silent) Console.WriteLine("'{0}' download failed. Try fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); StartPaketBootstrapping(fallbackStrategy, dlArgs, silent); shouldHandleException = !File.Exists(dlArgs.Target); } } if (shouldHandleException) handleException(exn); } catch (Exception exn) { handleException(exn); } }
public static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, IFileSystemProxy fileSystemProxy, Action onSuccess) { Action<Exception> handleException = exception => { if (!fileSystemProxy.FileExists(dlArgs.Target)) Environment.ExitCode = 1; ConsoleImpl.WriteError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); }; try { string versionRequested; if (!dlArgs.IgnorePrerelease) versionRequested = "prerelease requested"; else if (String.IsNullOrWhiteSpace(dlArgs.LatestVersion)) versionRequested = "downloading latest stable"; else versionRequested = string.Format("version {0} requested", dlArgs.LatestVersion); ConsoleImpl.WriteInfo("Checking Paket version ({0})...", versionRequested); ConsoleImpl.WriteTrace("Target path is {0}", dlArgs.Target); var localVersion = fileSystemProxy.GetLocalFileVersion(dlArgs.Target); ConsoleImpl.WriteTrace("File in target path version: v{0}", localVersion); var specificVersionRequested = true; var latestVersion = dlArgs.LatestVersion; if (latestVersion == string.Empty) { ConsoleImpl.WriteTrace("No version specified, checking online..."); var getLatestVersionWatch = Stopwatch.StartNew(); latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease); getLatestVersionWatch.Stop(); ConsoleImpl.WriteTrace("Latest version check found v{0} in {1:0.##} second(s)", latestVersion, getLatestVersionWatch.Elapsed.TotalSeconds); specificVersionRequested = false; } if (dlArgs.DoSelfUpdate) { ConsoleImpl.WriteInfo("Trying self update"); downloadStrategy.SelfUpdate(latestVersion); } else { var currentSemVer = String.IsNullOrEmpty(localVersion) ? new SemVer() : SemVer.Create(localVersion); if (currentSemVer.PreRelease != null && dlArgs.IgnorePrerelease) currentSemVer = new SemVer(); var latestSemVer = SemVer.Create(latestVersion); var comparison = currentSemVer.CompareTo(latestSemVer); if ((comparison > 0 && specificVersionRequested) || comparison < 0) { ConsoleImpl.WriteTrace("Downloading v{0} ...", latestVersion); var downloadWatch = Stopwatch.StartNew(); downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target); downloadWatch.Stop(); ConsoleImpl.WriteTrace("Download took {0:0.##} second(s)", downloadWatch.Elapsed.TotalSeconds); ConsoleImpl.WriteInfo("Done in {0:0.##} second(s).", executionWatch.Elapsed.TotalSeconds); } else { ConsoleImpl.WriteInfo("Paket.exe {0} is up to date.", localVersion); } } executionWatch.Stop(); ConsoleImpl.WriteTrace("Paket Bootstrapping took {0:0.##} second(s)", executionWatch.Elapsed.TotalSeconds); onSuccess(); } catch (WebException exn) { var shouldHandleException = true; if (!fileSystemProxy.FileExists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; ConsoleImpl.WriteInfo("'{0}' download failed. If using Mono, you may need to import trusted certificates using the 'mozroots' tool as none are contained by default. Trying fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); StartPaketBootstrapping(fallbackStrategy, dlArgs, fileSystemProxy, onSuccess); shouldHandleException = !fileSystemProxy.FileExists(dlArgs.Target); } } if (shouldHandleException) handleException(exn); } catch (Exception exn) { handleException(exn); } }
private static void StartPaketBootstrapping(IDownloadStrategy downloadStrategy, DownloadArguments dlArgs, bool silent) { Action <Exception> handleException = exception => { if (!File.Exists(dlArgs.Target)) { Environment.ExitCode = 1; } BootstrapperHelper.WriteConsoleError(String.Format("{0} ({1})", exception.Message, downloadStrategy.Name)); }; try { var localVersion = BootstrapperHelper.GetLocalFileVersion(dlArgs.Target); var latestVersion = dlArgs.LatestVersion; if (latestVersion == String.Empty) { latestVersion = downloadStrategy.GetLatestVersion(dlArgs.IgnorePrerelease); } if (dlArgs.DoSelfUpdate) { if (!silent) { Console.WriteLine("Trying self update"); } downloadStrategy.SelfUpdate(latestVersion, silent); } else { if (!localVersion.StartsWith(latestVersion)) { downloadStrategy.DownloadVersion(latestVersion, dlArgs.Target, silent); if (!silent) { Console.WriteLine("Done."); } } else { if (!silent) { Console.WriteLine("Paket.exe {0} is up to date.", localVersion); } } } } catch (WebException exn) { var shouldHandleException = true; if (!File.Exists(dlArgs.Target)) { if (downloadStrategy.FallbackStrategy != null) { var fallbackStrategy = downloadStrategy.FallbackStrategy; if (!silent) { Console.WriteLine("'{0}' download failed. Try fallback download from '{1}'.", downloadStrategy.Name, fallbackStrategy.Name); } StartPaketBootstrapping(fallbackStrategy, dlArgs, silent); shouldHandleException = !File.Exists(dlArgs.Target); } } if (shouldHandleException) { handleException(exn); } } catch (Exception exn) { handleException(exn); } }