Exemple #1
0
        public void InvalidValues(string input)
        {
            var success = PackageFullName.TryParsePackage(input, out var result);

            Assert.That(success, Is.False);
            Assert.That(result, Is.Null);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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, "");
        }