public void ModList_WithInstalledModules_DoesNotContainThem() { var list = new List <string>(); var mod_a = generator.GeneratorRandomModule(); list.Add(mod_a.identifier); AddToRegistry(mod_a); registry.Installed().Add(mod_a.identifier, mod_a.version); var relationship_resolver = new RelationshipResolver(list, null, options, registry, null); CollectionAssert.IsEmpty(relationship_resolver.ModList()); }
/// <summary> /// Create a CkanModule object that represents the currently installed /// mod list as a metapackage. /// </summary> /// <param name="recommends">If true, put the mods in the recommends relationship, otherwise use depends</param> /// <param name="with_versions">If true, set the installed mod versions in the relationships</param> /// <returns> /// The CkanModule object /// </returns> public CkanModule GenerateModpack(bool recommends = false, bool with_versions = true) { string kspInstanceName = ksp.Name; string name = $"installed-{kspInstanceName}"; var module = new CkanModule( // v1.18 to allow Unlicense new ModuleVersion("v1.18"), Identifier.Sanitize(name), name, $"A list of modules installed on the {kspInstanceName} KSP instance", null, new List <string>() { System.Environment.UserName }, new List <License>() { new License("unknown") }, new ModuleVersion(DateTime.UtcNow.ToString("yyyy.MM.dd.hh.mm.ss")), null, "metapackage" ) { download_content_type = "application/zip", release_date = DateTime.Now, }; List <RelationshipDescriptor> mods = registry.Installed(false, false) .Where(kvp => { // Skip unavailable modules (custom .ckan files) try { var avail = registry.LatestAvailable(kvp.Key, null, null); return(!avail.IsDLC); } catch { return(false); } }) .Select(kvp => (RelationshipDescriptor) new ModuleRelationshipDescriptor() { name = kvp.Key, version = with_versions ? kvp.Value : null }) .ToList(); if (recommends) { module.recommends = mods; } else { module.depends = mods; } return(module); }
public void Setup() { ksp = new DisposableKSP(); registry = CKAN.RegistryManager.Instance(ksp.KSP).registry; registry.ClearAvailable(); registry.ClearDlls(); registry.Installed().Clear(); }
public void Setup() { ksp = new DisposableKSP(); registry = ksp.KSP.Registry; registry.ClearAvailable(); registry.ClearDlls(); registry.Installed().Clear(); }
public void Setup() { ksp = new DisposableKSP(); registry = ksp.KSP.Registry; registry.ClearAvailable(); registry.ClearPreexistingModules(); registry.Installed().Clear(); }
public void Setup() { ksp = new DisposableKSP(); manager = CKAN.RegistryManager.Instance(ksp.KSP); registry = manager.registry; registry.ClearDlls(); registry.Installed().Clear(); CKAN.Repo.Update(manager, ksp.KSP, new NullUser(), TestData.TestKANZip()); }
public void Setup() { ksp = new DisposableKSP(); registry = ksp.KSP.Registry; registry.ClearAvailable(); registry.ClearDlls(); registry.Installed().Clear(); CKAN.Repo.UpdateRegistry(TestData.TestKAN(), registry, ksp.KSP, new NullUser()); }
public void Setup() { ksp = new DisposableKSP(); registry = ksp.KSP.Registry; registry.ClearAvailable(); registry.ClearDlls(); registry.Installed().Clear(); Repo.UpdateRegistry(TestData.TestKANZip(), registry, ksp.KSP, new NullUser()); }
public void Setup() { ksp = new DisposableKSP(); registry = ksp.KSP.Registry; registry.ClearAvailable(); registry.ClearPreexistingModules(); registry.Installed().Clear(); Repo.UpdateRegistry(TestData.TestKANTarGz(), registry, ksp.KSP, new NullUser()); }
private string SerializeCurrentInstall() { // TODO how do we obtain the name of the current KSP instance? string kspInstanceName = "default"; string name = "installed-" + kspInstanceName; JObject installed = new JObject(); installed["spec_version"] = "1"; installed["identifier"] = name; installed["version"] = DateTime.UtcNow.ToString("yyyy.MM.dd.hh.mm.ss"); installed["license"] = "unknown"; installed["name"] = name; installed["abstract"] = "A list of modules installed on the " + kspInstanceName + " KSP instance"; installed["download"] = "http://munich.ksp-ckan.org/empty-0.0.0.zip"; JArray depends = new JArray(); installed["depends"] = depends; foreach (KeyValuePair <string, CKAN.Version> module in registry.Installed()) { if (!(CKAN.Version.AutodetectedDllString.Equals(module.Value.ToString()))) { JObject moduleJson = new JObject(); moduleJson["name"] = module.Key; moduleJson["version"] = module.Value.ToString(); depends.Add(moduleJson); } } StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); using (JsonTextWriter writer = new JsonTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.Indentation = 4; writer.IndentChar = ' '; JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(writer, installed); } return(sw.ToString() + Environment.NewLine); }
public static Dictionary <Module, string> ComputeConflictsFromModList(Registry registry, IEnumerable <KeyValuePair <CkanModule, GUIModChangeType> > changeSet, KSPVersion ksp_version) { var modules_to_install = new HashSet <string>(); var modules_to_remove = new HashSet <string>(); var options = new RelationshipResolverOptions { without_toomanyprovides_kraken = true, procede_with_inconsistencies = true, without_enforce_consistency = true, with_recommends = false }; foreach (var change in changeSet) { switch (change.Value) { case GUIModChangeType.None: break; case GUIModChangeType.Install: modules_to_install.Add(change.Key.identifier); break; case GUIModChangeType.Remove: modules_to_remove.Add(change.Key.identifier); break; case GUIModChangeType.Update: break; default: throw new ArgumentOutOfRangeException(); } } var installed = registry.Installed() .Where(pair => pair.Value.CompareTo(new ProvidesVersion("")) != 0) .Select(pair => pair.Key); //We wish to only check mods that would exist after the changes are made. var mods_to_check = installed.Union(modules_to_install).Except(modules_to_remove); var resolver = new RelationshipResolver(mods_to_check.ToList(), options, registry, ksp_version); return(resolver.ConflictList); }
private string SerializeCurrentInstall(bool recommmends = false, bool with_versions = true) { // TODO how do we obtain the name of the current KSP instance? string kspInstanceName = "default"; string name = "installed-" + kspInstanceName; var installed = new JObject(); installed["kind"] = "metapackage"; installed["abstract"] = "A list of modules installed on the " + kspInstanceName + " KSP instance"; installed["name"] = name; installed["license"] = "unknown"; installed["version"] = DateTime.UtcNow.ToString("yyyy.MM.dd.hh.mm.ss"); installed["identifier"] = name; installed["spec_version"] = "v1.6"; var mods = new JArray(); foreach (var mod in registry.Installed() .Where(mod => !(mod.Value is ProvidesVersion || mod.Value is DllVersion))) { var module = new JObject(); module["name"] = mod.Key; if (with_versions) { module["version"] = mod.Value.ToString(); } mods.Add(module); } installed[recommmends ? "recommends" : "depends"] = mods; var sw = new StringWriter(new StringBuilder()); using (var writer = new JsonTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.Indentation = 1; writer.IndentChar = '\t'; new JsonSerializer().Serialize(writer, installed); } return(sw + Environment.NewLine); }
public void Setup() { manager = new KSPManager(new NullUser()); // Give us a registry to play with. ksp = new DisposableKSP(); registry_manager = CKAN.RegistryManager.Instance(ksp.KSP); registry = registry_manager.registry; registry.ClearDlls(); registry.Installed().Clear(); // Make sure we have a registry we can use. CKAN.Repo.Update(registry_manager, ksp.KSP, new NullUser(), TestData.TestKANZip()); // Ready our downloader. async = new CKAN.NetAsyncModulesDownloader(new NullUser(), manager.Cache); // General shortcuts cache = manager.Cache; }
public void ModList_WithInstalledModulesSugested_DoesNotContainThem() { options.with_all_suggests = true; var list = new List <string>(); var sugested = generator.GeneratorRandomModule(); var sugester = generator.GeneratorRandomModule(depends: new List <ModDependency> { new ModDependency($"? {sugested.identifier}") }); list.Add(sugester.identifier); AddToRegistry(sugester, sugested); registry.Installed().Add(sugested.identifier, sugested.modVersion); var modList = list.Select(p => new CfanModuleIdAndVersion(p)); var relationship_resolver = new RelationshipResolver(modList, options, registry, null); Assert.True(relationship_resolver.ModList().Any(p => p.ToString() == sugested.ToString())); }
public void Setup() { // Make sure curl is all set up. Curl.Init(); // Give us a registry to play with. ksp = new DisposableKSP(); registry = CKAN.RegistryManager.Instance(ksp.KSP).registry; registry.ClearAvailable(); registry.ClearDlls(); registry.Installed().Clear(); // Make sure we have a registry we can use. CKAN.Repo.UpdateRegistry(TestData.TestKANZip(), registry, ksp.KSP, new NullUser()); // Ready our downloader. async = new CKAN.NetAsyncModulesDownloader(new NullUser()); // General shortcuts cache = ksp.KSP.Cache; }
/// <summary> /// Create a CkanModule object that represents the currently installed /// mod list as a metapackage. /// </summary> /// <param name="recommends">If true, put the mods in the recommends relationship, otherwise use depends</param> /// <param name="with_versions">If true, set the installed mod versions in the relationships</param> /// <returns> /// The CkanModule object /// </returns> public CkanModule GenerateModpack(bool recommends = false, bool with_versions = true) { string kspInstanceName = ksp.Name; string name = $"installed-{kspInstanceName}"; var module = new CkanModule() { // v1.18 to allow Unlicense spec_version = new ModuleVersion("v1.18"), identifier = name, name = name, @abstract = $"A list of modules installed on the {kspInstanceName} KSP instance", kind = "metapackage", version = new ModuleVersion(DateTime.UtcNow.ToString("yyyy.MM.dd.hh.mm.ss")), license = new List <License>() { new License("unknown") }, download_content_type = "application/zip", }; List <RelationshipDescriptor> mods = registry.Installed() .Where(mod => !(mod.Value is ProvidesModuleVersion || mod.Value is UnmanagedModuleVersion)) .Select(kvp => (RelationshipDescriptor) new ModuleRelationshipDescriptor() { name = kvp.Key, version = with_versions ? kvp.Value : null }) .ToList(); if (recommends) { module.recommends = mods; } else { module.depends = mods; } return(module); }
public void Setup() { // Make sure curl is all set up. Curl.Init(); // Give us a registry to play with. ksp = new DisposableKSP(); registry = ksp.KSP.Registry; registry.ClearAvailable(); registry.ClearDlls(); registry.Installed().Clear(); // Make sure we have a registry we can use. CKAN.Repo.UpdateRegistry(TestData.TestKANZip(), registry, ksp.KSP, new NullUser()); // Ready our downloader. async = new CKAN.NetAsyncModulesDownloader(new NullUser()); // General shortcuts cache = ksp.KSP.Cache; }
public static Dictionary<GUIMod, string> ComputeConflictsFromModList(Registry registry, IEnumerable<KeyValuePair<GUIMod, GUIModChangeType>> change_set, KSPVersion ksp_version) { var modules_to_install = new HashSet<string>(); var modules_to_remove = new HashSet<string>(); var options = new RelationshipResolverOptions { without_toomanyprovides_kraken = true, procede_with_inconsistencies = true, without_enforce_consistency = true, with_recommends = false }; foreach (var change in change_set) { switch (change.Value) { case GUIModChangeType.None: break; case GUIModChangeType.Install: modules_to_install.Add(change.Key.Identifier); break; case GUIModChangeType.Remove: modules_to_remove.Add(change.Key.Identifier); break; case GUIModChangeType.Update: break; default: throw new ArgumentOutOfRangeException(); } } var installed = registry.Installed() .Where(pair => pair.Value.CompareTo(new ProvidesVersion("")) != 0) .Select(pair => pair.Key); //We wish to only check mods that would exist after the changes are made. var mods_to_check = installed.Union(modules_to_install).Except(modules_to_remove); var resolver = new RelationshipResolver(mods_to_check.ToList(), options, registry, ksp_version); return resolver.ConflictList.ToDictionary(item => new GUIMod(item.Key, registry, ksp_version), item => item.Value); }