public static async Task <int> RunCore(LocalSettings settings, ISleetFileSystem source, List <string> inputs, bool force, ILogger log) { var exitCode = 0; var token = CancellationToken.None; var now = DateTimeOffset.UtcNow; // Get packages var packages = GetPackageInputs(inputs, now, log); // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(source, log, token)) { // Validate source await UpgradeUtility.UpgradeIfNeeded(source, log, token); // Get sleet.settings.json var sourceSettings = new SourceSettings(); // Settings context used for all operations var context = new SleetContext() { LocalSettings = settings, SourceSettings = sourceSettings, Log = log, Source = source, Token = token }; var packageIndex = new PackageIndex(context); foreach (var package in packages) { if (await packageIndex.Exists(package.Identity)) { if (force) { log.LogInformation($"Package already exists, removing {package.ToString()}"); await SleetUtility.RemovePackage(context, package.Identity); } else { throw new InvalidOperationException($"Package already exists: '{package.Identity}'."); } } log.LogInformation($"Adding {package.Identity.ToString()}"); await SleetUtility.AddPackage(context, package); } // Save all await source.Commit(log, token); } return(exitCode); }
public static async Task <int> RunCore(LocalSettings settings, ISleetFileSystem source, ILogger log) { var exitCode = 0; log.LogMinimal($"Stats for {source.BaseURI}"); var token = CancellationToken.None; // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(source, log, token)) { // Validate source await UpgradeUtility.UpgradeIfNeeded(source, log, token); // Get sleet.settings.json var sourceSettings = new SourceSettings(); // Settings context used for all operations var context = new SleetContext() { LocalSettings = settings, SourceSettings = sourceSettings, Log = log, Source = source, Token = token }; var catalog = new Catalog(context); var existingEntries = await catalog.GetExistingPackagesIndex(); var packages = existingEntries.Select(e => e.PackageIdentity).ToList(); var uniqueIds = packages.Select(e => e.Id).Distinct(StringComparer.OrdinalIgnoreCase); var catalogEntries = await catalog.GetIndexEntries(); log.LogMinimal($"Catalog entries: {catalogEntries.Count}"); log.LogMinimal($"Packages: {existingEntries.Count}"); log.LogMinimal($"Unique package ids: {uniqueIds.Count()}"); } return(exitCode); }
public static async Task <int> RunCore(LocalSettings settings, ISleetFileSystem source, string packageId, string version, string reason, bool force, ILogger log) { var exitCode = 0; var token = CancellationToken.None; var now = DateTimeOffset.UtcNow; // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(source, log, token)) { // Validate source await UpgradeUtility.UpgradeIfNeeded(source, log, token); // Get sleet.settings.json var sourceSettings = new SourceSettings(); // Settings context used for all operations var context = new SleetContext() { LocalSettings = settings, SourceSettings = sourceSettings, Log = log, Source = source, Token = token }; var packageIndex = new PackageIndex(context); var packages = new List <PackageIdentity>(); if (!string.IsNullOrEmpty(version)) { // Delete a single version of the package var packageVersion = NuGetVersion.Parse(version); packages.Add(new PackageIdentity(packageId, packageVersion)); } else { // Delete all versions of the package packages.AddRange(await packageIndex.GetPackagesById(packageId)); } if (string.IsNullOrEmpty(reason)) { reason = string.Empty; } foreach (var package in packages) { if (!await packageIndex.Exists(package)) { log.LogInformation($"{package.ToString()} does not exist."); if (force) { // ignore failures continue; } else { throw new InvalidOperationException($"Package does not exists: {package.ToString()}"); } } log.LogInformation($"Removing {package.ToString()}"); await SleetUtility.RemovePackage(context, package); } // Save all await source.Commit(log, token); } return(exitCode); }
public static async Task <int> RunCore(LocalSettings settings, ISleetFileSystem source, ILogger log) { var exitCode = 0; var token = CancellationToken.None; // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(source, log, token)) { // Validate source await UpgradeUtility.UpgradeIfNeeded(source, log, token); // Get sleet.settings.json var sourceSettings = new SourceSettings(); // Settings context used for all operations var context = new SleetContext() { LocalSettings = settings, SourceSettings = sourceSettings, Log = log, Source = source, Token = token }; // Create all services var catalog = new Catalog(context); var registrations = new Registrations(context); var flatContainer = new FlatContainer(context); var search = new Search(context); var autoComplete = new AutoComplete(context); var packageIndex = new PackageIndex(context); var services = new List <ISleetService>(); services.Add(catalog); services.Add(registrations); services.Add(flatContainer); services.Add(search); // Verify against the package index var indexedPackages = await packageIndex.GetPackages(); var allIndexIds = indexedPackages.Select(e => e.Id).Distinct(StringComparer.OrdinalIgnoreCase).ToList(); // Verify auto complete log.LogMinimal($"Validating {autoComplete.Name}"); var autoCompleteIds = await autoComplete.GetPackageIds(); var missingACIds = allIndexIds.Except(autoCompleteIds).ToList(); var extraACIds = autoCompleteIds.Except(allIndexIds).ToList(); if (missingACIds.Count() > 0 || extraACIds.Count() > 0) { log.LogError("Missing autocomplete packages: " + string.Join(", ", missingACIds)); log.LogError("Extra autocomplete packages: " + string.Join(", ", extraACIds)); exitCode = 1; } else { log.LogMinimal("Autocomplete packages valid"); } // Verify everything else foreach (var service in services) { log.LogMinimal($"Validating {service.Name}"); var allPackagesService = service as IPackagesLookup; var byIdService = service as IPackageIdLookup; var servicePackages = new HashSet <PackageIdentity>(); // Use get all if possible if (allPackagesService != null) { servicePackages.UnionWith(await allPackagesService.GetPackages()); } else if (byIdService != null) { foreach (var id in allIndexIds) { servicePackages.UnionWith(await byIdService.GetPackagesById(id)); } } else { log.LogError($"Unable to get packages for {service.Name}"); continue; } var diff = new PackageDiff(indexedPackages, servicePackages); if (diff.HasErrors) { log.LogError(diff.ToString()); exitCode = 1; } else { log.LogMinimal(diff.ToString()); log.LogMinimal($"{service.Name} packages valid"); } } if (exitCode != 0) { log.LogError($"Feed invalid!"); } else { log.LogMinimal($"Feed valid"); } } return(exitCode); }