public static async Task <bool> RunAsync( LocalSettings settings, ISleetFileSystem source, bool unsetAll, bool getAll, IEnumerable <string> getSettings, IEnumerable <string> unsetSettings, IEnumerable <string> setSettings, ILogger log, CancellationToken token) { log.LogMinimal($"Reading feed {source.BaseURI.AbsoluteUri}"); // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, "Feed settings", log, token)) { // Validate source var success = await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); success &= await ApplySettingsAsync(source, unsetAll, getAll, getSettings, unsetSettings, setSettings, log, token); log.LogMinimal($"Run 'recreate' to rebuild the feed with the new settings."); return(success); } }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, string outputPath, bool ignoreErrors, bool noLock, bool skipExisting, ILogger log) { var token = CancellationToken.None; ISleetFileSystemLock feedLock = null; var success = true; var perfTracker = source.LocalCache.PerfTracker; using (var timer = PerfEntryWrapper.CreateSummaryTimer("Total execution time: {0}", perfTracker)) { // Check if already initialized try { if (!noLock) { // Lock feedLock = await SourceUtility.VerifyInitAndLock(settings, source, log, token); // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); } success = await DownloadPackages(settings, source, outputPath, ignoreErrors, log, token); } finally { feedLock?.Dispose(); } } // Write out perf summary await perfTracker.LogSummary(log); return(success); }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, string outputPath, bool ignoreErrors, ILogger log) { var token = CancellationToken.None; // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, log, token)) { // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); return(await DownloadPackages(settings, source, outputPath, ignoreErrors, log, token)); } }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, ILogger log) { var token = CancellationToken.None; log.LogMinimal($"Reading feed {source.BaseURI.AbsoluteUri}"); // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, log, token)) { // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); return(await Validate(settings, source, log, token)); } }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, List <string> inputs, bool force, bool skipExisting, ILogger log) { var token = CancellationToken.None; await log.LogAsync(LogLevel.Minimal, $"Reading feed {source.BaseURI.AbsoluteUri}"); // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, log, token)) { // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); return(await PushPackages(settings, source, inputs, force, skipExisting, log, token)); } }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, ILogger log) { var exitCode = true; log.LogMinimal($"Stats for {source.BaseURI}"); var token = CancellationToken.None; // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, "Stats", log, token)) { // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); // 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 }; var packageIndex = new PackageIndex(context); var existingPackageSets = await packageIndex.GetPackageSetsAsync(); var uniqueIds = existingPackageSets.Packages.Index .Concat(existingPackageSets.Symbols.Index) .Select(e => e.Id).Distinct(StringComparer.OrdinalIgnoreCase); log.LogMinimal($"Packages: {existingPackageSets.Packages.Index.Count}"); log.LogMinimal($"Symbols Packages: {existingPackageSets.Symbols.Index.Count}"); log.LogMinimal($"Unique package ids: {uniqueIds.Count()}"); } return(exitCode); }
/// <summary> /// Verify the feed works with the current client and settings. /// </summary> public static async Task ValidateFeedForClient(ISleetFileSystem fileSystem, ILogger log, CancellationToken token) { await UpgradeUtility.EnsureFeedVersionMatchesTool(fileSystem, log, token); await EnsureBaseUriMatchesFeed(fileSystem, log, token); }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, string tmpPath, bool force, ILogger log) { var success = true; var cleanNupkgs = true; var token = CancellationToken.None; LocalCache localCache = null; // Use the tmp path if provided if (string.IsNullOrEmpty(tmpPath)) { localCache = new LocalCache(); } else { localCache = new LocalCache(tmpPath); } log.LogMinimal($"Reading feed {source.BaseURI.AbsoluteUri}"); using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, log, token)) { if (!force) { // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, allowNewer : true, log : log, token : token); } // Read settings and persist them in the new feed. var feedSettings = await FeedSettingsUtility.GetSettingsOrDefault(source, log, token); try { var downloadSuccess = await DownloadCommand.DownloadPackages(settings, source, localCache.Root.FullName, force, log, token); if (!force && !downloadSuccess) { log.LogError("Unable to recreate the feed due to errors download packages. Use --force to skip this check."); return(false); } var destroySuccess = await DestroyCommand.Destroy(settings, source, log, token); if (!force && !destroySuccess) { log.LogError("Unable to completely remove the old feed before recreating. Use --force to skip this check."); return(false); } var initSuccess = await InitCommand.InitAsync(settings, source, feedSettings, log, token); if (!initSuccess) { cleanNupkgs = false; log.LogError("Unable to initialize the new feed. The feed is currently broken and must be repaired manually."); success = false; return(false); } var pushSuccess = await PushCommand.PushPackages(settings, source, new List <string>() { localCache.Root.FullName }, force : true, skipExisting : true, log : log, token : token); if (!pushSuccess) { cleanNupkgs = false; log.LogError("Unable to push packages to the new feed. Try pushing the nupkgs again manually."); success = false; return(false); } var validateSuccess = await ValidateCommand.Validate(settings, source, log, token); if (!validateSuccess) { cleanNupkgs = false; log.LogError("Something went wrong when recreating the feed. Feed validation has failed."); success = false; return(false); } } finally { if (cleanNupkgs) { // Delete downloaded nupkgs log.LogInformation($"Removing local nupkgs from {localCache.Root.FullName}"); localCache.Dispose(); } else { var message = $"Encountered an error while recreating the feed. You may need to manually create the feed and push the nupkgs again. Nupkgs have been saved to: {localCache.Root.FullName}"; if (force) { log.LogWarning(message); } else { log.LogError(message); } } } log.LogMinimal("Feed recreation complete."); } return(success); }
public static async Task <bool> RunAsync(LocalSettings settings, ISleetFileSystem source, string packageId, string version, string reason, bool force, ILogger log) { var success = true; var token = CancellationToken.None; var now = DateTimeOffset.UtcNow; log.LogMinimal($"Reading feed {source.BaseURI.AbsoluteUri}"); // Check if already initialized using (var feedLock = await SourceUtility.VerifyInitAndLock(settings, source, log, token)) { // Validate source await UpgradeUtility.EnsureFeedVersionMatchesTool(source, log, token); // 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 }; 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.GetPackagesByIdAsync(packageId)); } if (string.IsNullOrEmpty(reason)) { reason = string.Empty; } foreach (var package in packages) { var exists = await packageIndex.Exists(package); var symbolsExists = await packageIndex.SymbolsExists(package); if (!exists && !symbolsExists) { log.LogInformation($"{package.ToString()} does not exist."); if (force) { // ignore failures continue; } else { throw new InvalidOperationException($"Package does not exists: {package.ToString()}"); } } var message = $"Removing {package.ToString()}"; if (exists && symbolsExists) { message = $"Removing {package.ToString()} and symbols package for {package.ToString()}"; } else if (symbolsExists) { message = $"Removing symbols package {package.ToString()}"; } await log.LogAsync(LogLevel.Information, message); await SleetUtility.RemovePackage(context, package); } // Save all log.LogMinimal($"Committing changes to {source.BaseURI.AbsoluteUri}"); success &= await source.Commit(log, token); } if (success) { log.LogMinimal($"Successfully deleted packages."); } else { log.LogError($"Failed to delete packages."); } return(success); }