예제 #1
0
        private void PrintScript(RegistryPackage script, RegistryPackageVersion version, IReadOnlyCollection <Script> localFiles)
        {
            Renderer.Write(script.Name, ConsoleColor.Green);
            Renderer.Write(" ");
            Renderer.Write($"v{version.Version}", ConsoleColor.Gray);
            var nonInstalledLocalFiles = localFiles.Where(l => !l.FullPath.StartsWith(Config.VirtAMate.PackagesFolder)).ToList();

            if (nonInstalledLocalFiles.Count > 0)
            {
                var filesSummary = nonInstalledLocalFiles.Select(l => l.FullPath).Select(Controller.GetDisplayPath).OrderBy(p => p.Length).ToList();
                Renderer.Write(" ");
                if (filesSummary.Count == 1)
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\"", ConsoleColor.DarkGray);
                }
                else
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\" and {filesSummary.Count - 1} others...", ConsoleColor.DarkGray);
                }
            }
            Renderer.Write(" ");
            Renderer.Write($"referenced by {Pluralize(localFiles.Sum(l => l.Scenes?.Count() ?? 0), "scene", "scenes")}", ConsoleColor.DarkCyan);
            var latestVersion = script.GetLatestVersion();

            if (version != latestVersion)
            {
                Renderer.Write($" [update available: v{latestVersion.Version}]", ConsoleColor.Yellow);
            }
            else
            {
                Renderer.Write($" [up to date]", ConsoleColor.Cyan);
            }
            Renderer.WriteLine();
        }
예제 #2
0
 public void Deconstruct(out Registry registry, out RegistryPackage package, out RegistryPackageVersion version, out RegistryFile file)
 {
     registry = Registry;
     package  = Package;
     version  = Version;
     file     = File;
 }
예제 #3
0
 public static void RegistryPackage(RegistryPackage item,
                                    string id, string name, string description)
 {
     Assert.AreEqual(id ?? "", item.Id ?? "");
     Assert.AreEqual(name ?? "", (item.Name != null ? item.Name.GetValue() : null) ?? "");
     Assert.AreEqual(name ?? "", (item.Name != null ? item.Name.GetValue("en-US") : null) ?? "");
     Assert.AreEqual(description ?? "", (item.Description != null ? item.Description.GetValue() : null) ?? "");
     Assert.AreEqual(description ?? "", (item.Description != null ? item.Description.GetValue("en-US") : null) ?? "");
 }
예제 #4
0
        public void CanGetLatestVersion()
        {
            RegistryPackageVersion version = TestFactory.RegVer("1.0.0");
            RegistryPackage        package = TestFactory.RegScript("script1", version);
            var registry = TestFactory.Reg(package);

            var success = registry.TryGetPackageVersion(RegistryPackageType.Scripts, "script1", null, out var context);

            Assert.That(success, Is.True);
            Assert.That(context.Registry, Is.SameAs(registry));
            Assert.That(context.Package, Is.SameAs(package));
            Assert.That(context.Version, Is.SameAs(version));
        }
예제 #5
0
        private void PrintScript(RegistryPackage script, RegistryPackageVersion version, IReadOnlyCollection <LocalScriptFile> localFiles)
        {
            Renderer.Write(script.Name, ConsoleColor.Green);

            Renderer.Write(" ");
            Renderer.Write($"v{version.Version}", ConsoleColor.Gray);

            if (localFiles.Count > 0)
            {
                var filesSummary = localFiles.Select(l => l.FullPath).Select(Path.GetFileName).OrderBy(p => p.Length).ToList();
                Renderer.Write(" ");
                if (filesSummary.Count == 1)
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\"", ConsoleColor.DarkGray);
                }
                else
                {
                    Renderer.Write($"\"{filesSummary.FirstOrDefault()}\" and {filesSummary.Count - 1} others...", ConsoleColor.DarkGray);
                }
            }

            Renderer.Write(" ");
            Renderer.Write($"referenced by {Pluralize(localFiles.Sum(l => l.Scenes?.Count() ?? 0), "scene", "scenes")}", ConsoleColor.DarkCyan);

            var latestVersion = script.GetLatestVersion();

            if (version != latestVersion)
            {
                Renderer.Write($" [update available: v{latestVersion.Version}]", ConsoleColor.Yellow);
            }
            else
            {
                Renderer.Write($" [up to date]", ConsoleColor.Cyan);
            }

            var errors = localFiles.Max(l => l.Status);

            if (errors == LocalFileErrorLevel.Warning)
            {
                Renderer.Write(" [warnings]", ConsoleColor.Yellow);
            }
            else if (errors >= LocalFileErrorLevel.Error)
            {
                Renderer.Write(" [errors]", ConsoleColor.Red);
            }

            Renderer.WriteLine();
        }
 private bool MatchesQuery(RegistryPackage package, string query)
 {
     if ((package.Name?.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) ?? -1) > -1)
     {
         return(true);
     }
     if ((package.Author?.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) ?? -1) > -1)
     {
         return(true);
     }
     if ((package.Description?.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) ?? -1) > -1)
     {
         return(true);
     }
     if (package.Tags?.Any(tag => tag.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) > -1) ?? false)
     {
         return(true);
     }
     return(false);
 }
        public void CanSort()
        {
            var script = new RegistryPackage
            {
                Versions = new SortedSet <RegistryPackageVersion>(new[]
                {
                    new RegistryPackageVersion {
                        Version = "1.0.0"
                    },
                    new RegistryPackageVersion {
                        Version = "2.0.5"
                    },
                    new RegistryPackageVersion {
                        Version = "2.0.4"
                    },
                })
            };

            Assert.That(script.Versions.Select(v => v.Version.ToString()).ToArray(), Is.EqualTo(new[] { "2.0.5", "2.0.4", "1.0.0" }));
        }
        public void CanGetLatestVersion()
        {
            var script = new RegistryPackage
            {
                Versions = new SortedSet <RegistryPackageVersion>(new[]
                {
                    new RegistryPackageVersion {
                        Version = "1.0.0"
                    },
                    new RegistryPackageVersion {
                        Version = "2.0.5"
                    },
                    new RegistryPackageVersion {
                        Version = "2.0.4"
                    },
                })
            };

            Assert.That(script.GetLatestVersion().Version.ToString(), Is.EqualTo("2.0.5"));
        }
예제 #9
0
        public void DoesNotMatchByFilenameWhenMatchedByHash()
        {
            var saves = ResultFactory.SavesMap()
                        .WithScript(new Script($"{_vam}1.cs", "1"), out var local1)
                        .Build();
            RegistryFile           file    = ResultFactory.RegFile("1.cs", "1");
            RegistryPackageVersion version = ResultFactory.RegVer("1.0.0", file);
            RegistryPackage        script  = ResultFactory.RegScript("my-script", version);
            var registry = ResultFactory.Reg(script);

            var result = _handler.Match(saves, registry);

            PartyAssertions.AreDeepEqual(new RegistrySavesMatches
            {
                HashMatches = new[] { new RegistrySavesMatch {
                                          Script = script, Version = version, File = file, Local = local1
                                      } },
                FilenameMatches = new RegistrySavesMatch[0],
                NoMatches       = new Script[0]
            }, result);
        }
예제 #10
0
        public void Should_Build_Folder_Test01()
        {
            var folder = new Folder
            {
                AvailabilityStatus = StatusType.Approved,
                Codes = new List <FolderCode>
                {
                    new FolderCode
                    {
                        Value        = "42",
                        DisplayName  = "Blue Folder",
                        CodeSystemId = "1.2.3.4.5.6.7"
                    },
                    new FolderCode
                    {
                        Value        = "99",
                        DisplayName  = "Secured Folder",
                        CodeSystemId = "7.6.5.4.3.2.1"
                    }
                },
                Comments        = "This folder contains all XdsKit documents",
                EntryUuid       = "Folder01",
                HomeCommunityId = "urn:oid:1.2.3.4.5.6.7",
                LastUpdateTime  = new DateTimeOffset(2015, 9, 1, 8, 55, 00, TimeSpan.Zero),
                LimitedMetadata = true,
                PatientId       = new XdsIdentifier
                {
                    Id          = "MRN123456789",
                    UniversalId = "8"
                },
                Title    = "XdsKit Documents",
                UniqueId = "1.2.3.4.5.6.7"
            };

            RegistryPackage package = folder.ToRegistryObject();

            package.ToXml()
            .AssertByLine(XDocument.Parse(Resource.Get("Resources.Xdsb.Folder_Test01.xml")));
        }
예제 #11
0
        public void TestBackupRemove()
        {
            InstallContext.Instance.RootLocation = Path.Combine("c:", "choco");
            string filePath     = Path.Combine("c:", "choco", "lib", "somelib", "license.txt");
            string fileConfPath = Path.Combine("c:", "choco", "lib", "somelib", "myconf.xml");
            string filePath2    = Path.Combine("c:", "choco", "lib", "somelib", "license2.txt");

            RegistryPackage package = new RegistryPackage();

            package.Id      = "Bob";
            package.Version = new SemanticVersion(1, 2, 3, 4);
            var packageInfo = new ChocolateyPackageInformation(package);
            var packageFile = new PackageFile {
                Path = filePath, Checksum = "1234"
            };
            var packageFiles = new PackageFiles()
            {
                Files = new List <PackageFile>
                {
                    packageFile
                }
            };

            packageInfo.FilesSnapshot = packageFiles;

            var fileSystemFiles = new [] { filePath };
            var config          = new ChocolateyConfiguration();

            fileSystem.Setup(x => x.get_files(It.IsAny <string>(), It.IsAny <string>(), SearchOption.AllDirectories)).Returns(fileSystemFiles);
            filesService.Setup(x => x.capture_package_files(It.IsAny <string>(), config)).Returns(packageFiles);

            using (new LogScope("should_ignore_an_unchanged_file"))
            {
                service.backup_changed_files(filePath, config, packageInfo);
            }

            var updatedPackageFiles = new PackageFiles()
            {
                Files = new List <PackageFile>
                {
                    new PackageFile {
                        Path = filePath, Checksum = "4321"
                    }
                }
            };

            using (new LogScope("should_backup_a_changed_file"))
            {
                filesService.Setup(x => x.capture_package_files(It.IsAny <string>(), config)).Returns(updatedPackageFiles);
                service.backup_changed_files(filePath, config, packageInfo);
            }

            using (new LogScope("if_snapshot_not_available_should_backup_files_in_folder")) //new case
            {
                var confFiles = new[] { fileConfPath };
                fileSystem.Setup(x => x.get_files(It.IsAny <string>(), It.IsAny <string[]>(), SearchOption.AllDirectories)).Returns(confFiles);
                packageInfo.FilesSnapshot = null;
                service.backup_changed_files(filePath, config, packageInfo);
            }

            using (new LogScope("should_do_nothing_if_the_directory_no_longer_exists"))
            {
                fileSystem.Setup(x => x.directory_exists(It.IsAny <string>())).Returns(false);
                filesService.Setup(x => x.get_package_file(It.IsAny <string>())).Returns(packageFile);
                service.remove_installation_files(package, packageInfo);
            }

            using (new LogScope("should_remove_an_unchanged_file"))
            {
                fileSystem.Setup(x => x.directory_exists(It.IsAny <string>())).Returns(true);
                fileSystem.Setup(x => x.get_files(It.IsAny <string>(), It.IsAny <string>(), SearchOption.AllDirectories)).Returns(fileSystemFiles);
                fileSystem.Setup(x => x.file_exists(filePath)).Returns(true);
                service.remove_installation_files(package, packageInfo);
            }

            using (new LogScope("should_not_delete_a_changed_file"))
            {
                filesService.Setup(x => x.get_package_file(It.IsAny <string>())).Returns(updatedPackageFiles.Files[0]);
                service.remove_installation_files(package, packageInfo);
            }

            using (new LogScope("should_not_delete_an_unfound_file"))
            {
                var packageFileNotInOriginal = new PackageFile {
                    Path = filePath2, Checksum = "4321"
                };
                filesService.Setup(x => x.get_package_file(It.IsAny <string>())).Returns(packageFileNotInOriginal);
                service.remove_installation_files(package, packageInfo);
            }

            using (new LogScope("generated_package_should_be_in_current_directory"))
            {
                fileSystem.Setup(x => x.get_current_directory()).Returns("c:/choco");
                service.pack_noop(config);
            }

            using (new LogScope("generated_package_should_be_in_specified_directory"))
            {
                config.OutputDirectory = "c:/packages";
                service.pack_noop(config);
            }
        }
예제 #12
0
 public string Serialize(RegistryPackage registry)
 {
     return(SerializeInternal(registry));
 }
 public void Deconstruct(out Registry registry, out RegistryPackage package, out RegistryPackageVersion version)
 {
     registry = Registry;
     package  = Package;
     version  = Version;
 }
 public RegistryPackageVersionContext(Registry registry, RegistryPackage package, RegistryPackageVersion version)
 {
     Registry = registry ?? throw new System.ArgumentNullException(nameof(registry));
     Package  = package ?? throw new System.ArgumentNullException(nameof(package));
     Version  = version ?? throw new System.ArgumentNullException(nameof(version));
 }
예제 #15
0
 public RegistryPackageFileContext(Registry registry, RegistryPackage package, RegistryPackageVersion version, RegistryFile file)
     : base(registry, package, version)
 {
     File = file ?? throw new System.ArgumentNullException(nameof(file));
 }