public void InvalidValues(string input) { var success = PackageFullName.TryParsePackage(input, out var result); Assert.That(success, Is.False); Assert.That(result, Is.Null); }
public void ValidValues(string input, RegistryPackageType type, string name, string version) { var success = PackageFullName.TryParsePackage(input, out var result); Assert.That(success, Is.True); Assert.That(result.Type, Is.EqualTo(type)); Assert.That(result.Name, Is.EqualTo(name)); Assert.That(result.Version, Is.EqualTo(version)); }
protected override async Task ExecuteImplAsync(GetArguments args) { ValidateArguments(args.Packages); Controller.HealthCheck(); var packages = args.Packages ?? new string[0]; if (args.All && packages.Length > 0) { throw new UserInputException("You cannot specify --all and an item to get at the same time"); } else if (!args.All && packages.Length == 0) { throw new UserInputException("You must specify what to get, or pass --all to get everything"); } var registry = await Controller.AcquireRegistryAsync().ConfigureAwait(false); if (args.All) { foreach (var package in registry.Get(RegistryPackageType.Scripts)) { await GetOneAsync(args, new RegistryPackageVersionContext(registry, package, package.GetLatestVersion())); } } else { foreach (var p in packages) { if (!PackageFullName.TryParsePackage(p, out var packageName)) { throw new UserInputException("Invalid package name. Example: 'scripts/my-script'"); } var package = registry.GetPackage(packageName); if (package == null) { throw new RegistryException($"Package not found: '{packageName}'"); } var version = packageName.Version != null ? package.GetVersion(packageName.Version) : package.GetLatestVersion(); if (version == null) { throw new RegistryException($"Package version not found: '{packageName}'"); } var context = new RegistryPackageVersionContext(registry, package, version); await GetOneAsync(args, context); } } }
public async Task <(SavesMap saves, Registry registry)> ScanLocalFilesAndAcquireRegistryAsync(string[] registries, string filter, IProgress <ScanLocalFilesProgress> reporter) { var isFilterPackage = PackageFullName.TryParsePackage(filter, out var filterPackage); var pathFilter = !isFilterPackage && filter != null?Path.GetFullPath(filter) : null; if (pathFilter != null) { if (_fs.Directory.Exists(pathFilter)) { throw new UserInputException("The filter argument cannot be a folder"); } if (!_fs.File.Exists(pathFilter)) { throw new ArgumentException($"The specified filter '{pathFilter}' is not a valid filename"); } } Task <Registry> registryTask; Task <SavesMap> savesTask; registryTask = AcquireRegistryAsync(registries); savesTask = ScanLocalFilesAsync(pathFilter, reporter); await Task.WhenAll(registryTask, savesTask).ConfigureAwait(false); var registry = await registryTask.ConfigureAwait(false); var saves = await savesTask.ConfigureAwait(false); if (isFilterPackage) { var registryPackage = registry.GetPackage(filterPackage); if (registryPackage == null) { throw new RegistryException($"Could not find package '{filterPackage}'"); } var packageHashes = new HashSet <string>(registryPackage.Versions.SelectMany(v => v.Files).Select(f => f.Hash?.Value).Where(h => h != null).Distinct()); saves.Scripts = saves.Scripts.Where(s => { if (s is LocalScriptListFile scriptList) { return new[] { scriptList.Hash } } .Concat(scriptList.Scripts.Select(c => c.Hash)).All(h => packageHashes.Contains(h)); else { return(packageHashes.Contains(s.Hash)); } }).ToArray();
protected override async Task ExecuteImplAsync(ShowArguments args) { ValidateArguments(args.Package); Controller.HealthCheck(); if (!PackageFullName.TryParsePackage(args.Package, out var packageName)) { throw new UserInputException("Invalid package name. Example: 'scripts/my-script'"); } var registry = await Controller.AcquireRegistryAsync().ConfigureAwait(false); var package = registry.GetPackage(packageName); if (package == null) { throw new UserInputException($"Could not find package {args.Package}"); } var version = package.GetLatestVersion(); if (version?.Files == null) { throw new RegistryException("Package does not have any versions"); } var context = new RegistryPackageVersionContext(registry, package, version); var packageTitle = $"{package.Name} v{version.Version} ({package.Type.ToString().ToLowerInvariant()})"; Renderer.WriteLine(packageTitle, ConsoleColor.Cyan); Renderer.WriteLine(new string('=', packageTitle.Length)); Renderer.WriteLine("Info:", ConsoleColor.Blue); if (package.Description != null) { Renderer.WriteLine($" Description: {package.Description}"); } if (package.Tags != null) { Renderer.WriteLine($" Tags: {string.Join(", ", package.Tags)}"); } if (package.Repository != null) { Renderer.WriteLine($" Repository: {package.Repository}"); } if (package.Homepage != null) { Renderer.WriteLine($" Homepage: {package.Homepage}"); } Renderer.WriteLine("Author:", ConsoleColor.Blue); Renderer.WriteLine($" {package.Author}"); var registryAuthor = registry.Authors?.FirstOrDefault(a => a.Name == package.Author); if (registryAuthor != null) { if (registryAuthor.Github != null) { Renderer.WriteLine($" Github: {registryAuthor.Github}"); } if (registryAuthor.Reddit != null) { Renderer.WriteLine($" Reddit: {registryAuthor.Reddit}"); } } Renderer.WriteLine("Versions:", ConsoleColor.Blue); foreach (var v in package.Versions) { Renderer.WriteLine($" v{v.Version}, {v.Created.ToLocalTime().ToString("d")}: {v.Notes ?? "(none)"}"); if (version.DownloadUrl != null) { Renderer.WriteLine($" Download: {v.DownloadUrl}"); } } if ((version.Dependencies?.Count ?? 0) > 0) { Renderer.WriteLine("Dependencies:", ConsoleColor.Blue); foreach (var dependency in version.Dependencies) { if (registry.TryGetDependency(dependency, out var depContext)) { Renderer.WriteLine($" {depContext.Package.Name} v{depContext.Version.Version} by {depContext.Package.Author} ({depContext.Version.Files.Count} files)"); } else { Renderer.WriteLine($" Dependency {dependency} was not found in the registry"); } } } Renderer.WriteLine($"Files (for v{version.Version}):", ConsoleColor.Blue); Renderer.WriteLine("Note: This only checks for the expected location. To see other locations, use party status."); var info = await Controller.GetInstalledPackageInfoAsync(context); PrintInstalledFiles(info, ""); }