/// <summary> /// Download packages. This method does not lock the feed or verify the client version. /// </summary> public static async Task <bool> DownloadPackages(LocalSettings settings, ISleetFileSystem source, string outputPath, bool ignoreErrors, bool skipExisting, ILogger log, CancellationToken token) { if (string.IsNullOrEmpty(outputPath)) { throw new ArgumentException("Missing output path parameter!"); } var success = true; // Get sleet.settings.json var sourceSettings = await FeedSettingsUtility.GetSettingsOrDefault(source, log, token); // Settings context used for all operations var context = new SleetContext() { LocalSettings = settings, SourceSettings = sourceSettings, Log = log, Source = source, Token = token }; log.LogMinimal($"Reading feed {source.BaseURI.AbsoluteUri}"); // Find all packages var packageIndex = new PackageIndex(context); var flatContainer = new FlatContainer(context); var symbols = new Symbols(context); // Discover all packages var packages = new List <KeyValuePair <PackageIdentity, ISleetFile> >(); packages.AddRange((await packageIndex.GetPackagesAsync()).Select(e => new KeyValuePair <PackageIdentity, ISleetFile>(e, context.Source.Get(flatContainer.GetNupkgPath(e))))); packages.AddRange((await packageIndex.GetSymbolsPackagesAsync()).Select(e => new KeyValuePair <PackageIdentity, ISleetFile>(e, symbols.GetSymbolsNupkgFile(e)))); log.LogMinimal($"Downloading nupkgs to {outputPath}"); // Run downloads var tasks = packages.Select(e => new Func <Task <bool> >(() => DownloadPackageAsync(outputPath, skipExisting, log, e, token))); var results = await TaskUtils.RunAsync(tasks, useTaskRun : true, token : CancellationToken.None); var downloadSuccess = results.All(e => e); success &= downloadSuccess; if (packages.Count < 1) { log.LogWarning("The feed does not contain any packages."); } if (downloadSuccess) { if (packages.Count > 0) { log.LogMinimal("Successfully downloaded packages."); } } else { var message = $"Failed to download all packages!"; if (ignoreErrors) { log.LogWarning(message); } else { log.LogError(message); } } return(success); }
public Task PreLoadAsync(SleetOperations operations) { // Retrieve the index pages for all ids we will later modify. return(TaskUtils.RunAsync(operations.GetChangedIds().Select(e => new Func <Task>(() => FetchPageAsync(e))))); }
/// <summary> /// Update feed badges for stable or prerelease /// </summary> public static Task UpdateBadges(SleetContext context, ISet <PackageIdentity> updates, bool preRel) { var tasks = new List <Func <Task> >(updates.Select(e => new Func <Task>(() => UpdateOrRemoveBadge(context, e, preRel)))); return(TaskUtils.RunAsync(tasks)); }