示例#1
0
        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());
        }
示例#2
0
        /// <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);
        }
示例#3
0
文件: Repo.cs 项目: zakipatel/CKAN
 public void Setup()
 {
     ksp      = new DisposableKSP();
     registry = CKAN.RegistryManager.Instance(ksp.KSP).registry;
     registry.ClearAvailable();
     registry.ClearDlls();
     registry.Installed().Clear();
 }
示例#4
0
文件: Repo.cs 项目: KSP-CKAN/CKAN
 public void Setup()
 {
     ksp = new DisposableKSP();
     registry = CKAN.RegistryManager.Instance(ksp.KSP).registry;
     registry.ClearAvailable();
     registry.ClearDlls();
     registry.Installed().Clear();
 }
示例#5
0
文件: Repo.cs 项目: adamhomer88/CKAN
        public void Setup()
        {
            ksp = new DisposableKSP();
            registry = ksp.KSP.Registry;

            registry.ClearAvailable();
            registry.ClearDlls();
            registry.Installed().Clear();
        }
示例#6
0
文件: Repo.cs 项目: thiagoshima/CKAN
        public void Setup()
        {
            ksp      = new DisposableKSP();
            registry = ksp.KSP.Registry;

            registry.ClearAvailable();
            registry.ClearDlls();
            registry.Installed().Clear();
        }
示例#7
0
文件: Repo.cs 项目: trakos/CFAN
        public void Setup()
        {
            ksp      = new DisposableKSP();
            registry = ksp.KSP.Registry;

            registry.ClearAvailable();
            registry.ClearPreexistingModules();
            registry.Installed().Clear();
        }
示例#8
0
        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());
        }
示例#9
0
        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());
        }
示例#10
0
        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());
        }
示例#11
0
        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());
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#14
0
        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);
        }
示例#15
0
        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;
        }
示例#16
0
        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()));
        }
示例#17
0
        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;
        }
示例#18
0
        /// <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);
        }
示例#19
0
        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;
        }
示例#20
0
        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);
        }