public void Refresh()
        {
            ConfigDictionary refreshedConfigSet = new ConfigDictionary();

            BuildReleaseType[] releaseTypes = BuildSettings.releaseTypeList.releaseTypes;
            for (int i = 0; i < releaseTypes.Length; i++)
            {
                string        key       = releaseTypes[i].typeName;
                Configuration relConfig = new Configuration();

                // Check for duplicate.
                if (refreshedConfigSet.ContainsKey(key))
                {
                    continue;
                }

                // Copy old setting if it exists.
                if (configSet != null && configSet.ContainsKey(key))
                {
                    relConfig.enabled = configSet[key].enabled;
                }

                // Get child keys.
                relConfig.childKeys = RefreshPlatforms(key, refreshedConfigSet, configSet);

                // Save configuration.
                refreshedConfigSet.Add(key, relConfig);
            }

            configSet = refreshedConfigSet;
        }
        public void Construction()
        {
            var s = @"
            # comment
            key1:value1
            key2 : value2 # comment
            key.key3: value3

            # comment
            key4= value4
            key5=value5

            multilines = line1 # comment
            line2  # comment
            line3

            multilines2 : line1
            line2
            line3  # comment
            multilines3 :
            line1
            line2
            line3  # comment

            key key = value value
            ";
            var dict = new ConfigDictionary(new StringReader(s));

            Assert.IsTrue(dict.ContainsKey("key1"));
            Assert.AreEqual(dict["key1"].Value, "value1");

            Assert.IsTrue(dict.ContainsKey("key2"));
            Assert.AreEqual(dict["key2"].Value, "value2");

            Assert.IsTrue(dict.ContainsKey("key.key3"));
            Assert.AreEqual(dict["key.key3"].Value, "value3");

            Assert.IsTrue(dict.ContainsKey("key4"));
            Assert.AreEqual(dict["key4"].Value, "value4");

            Assert.IsTrue(dict.ContainsKey("key5"));
            Assert.AreEqual(dict["key5"].Value, "value5");

            Assert.IsTrue(dict.ContainsKey("multilines"));
            Assert.AreEqual(dict["multilines"].Value, "line1");
            CollectionAssert.AreEqual(dict["multilines"].Subsididary, new[] { "line2", "line3" });

            Assert.IsTrue(dict.ContainsKey("multilines2"));
            Assert.AreEqual(dict["multilines2"].Value, "line1");
            CollectionAssert.AreEqual(dict["multilines2"].Subsididary, new[] { "line2", "line3" });

            Assert.IsTrue(dict.ContainsKey("multilines3"));
            Assert.AreEqual(dict["multilines3"].Value, "");
            CollectionAssert.AreEqual(dict["multilines3"].Subsididary, new[] { "line1", "line2", "line3" });

            Assert.IsTrue(dict.ContainsKey("key key"));
            Assert.AreEqual(dict["key key"].Value, "value value");

            Dump(dict);
        }
        private string[] RefreshDistributions(string keyChain, ConfigDictionary refreshedConfigSet, BuildDistribution[] distributions, ConfigDictionary prevConfigSet)
        {
            List <string> childKeys = new List <string>();

            for (int i = 0; i < distributions.Length; i++)
            {
                if (!distributions[i].enabled)
                {
                    continue;
                }

                string        key       = keyChain + "/" + distributions[i].distributionName;
                Configuration relConfig = new Configuration();

                if (refreshedConfigSet.ContainsKey(key))
                {
                    continue;
                }

                if (prevConfigSet != null && prevConfigSet.ContainsKey(key))
                {
                    relConfig.enabled = prevConfigSet[key].enabled;
                }

                refreshedConfigSet.Add(key, relConfig);

                // Add key to list to send back to parent.
                childKeys.Add(key);
            }

            return(childKeys.ToArray());
        }
 /// <summary>
 /// 尝试获取字典的值  没有不报错 返回默认值
 /// </summary>
 /// <param name="configkey"></param>
 /// <param name="defaultvalue"></param>
 /// <returns></returns>
 public string TryGet(string configkey, string defaultvalue = "")
 {
     if (ConfigDictionary.ContainsKey(configkey))
     {
         return(ConfigDictionary[configkey]);
     }
     return(defaultvalue);
 }
Exemple #5
0
 private static void ValidateDictionary(ConfigDictionary dictionary)
 {
     if (
         !dictionary.ContainsKey("git_user") ||
         !dictionary["git_user"].ContainsKey("personal_email") ||
         !dictionary["git_user"].ContainsKey("work_email")
         )
     {
         Log.Error("Config file does not contain the necessary values.");
         Environment.Exit(1);
     }
 }
        private string[] RefreshArchitectures(string keyChain, ConfigDictionary refreshedConfigSet, string variantKey, BuildArchitecture[] architectures, BuildDistribution[] distributions, ConfigDictionary prevConfigSet)
        {
            List <string> childKeys = new List <string>();

            for (int i = 0; i < architectures.Length; i++)
            {
                // Skip if architecture is disabled.
                if (!architectures[i].enabled)
                {
                    continue;
                }

                string key = keyChain + "/" + architectures[i].name;
                if (variantKey.Length > 0)
                {
                    key += " (" + variantKey + ")";
                }

                Configuration relConfig = new Configuration();

                // Check for a duplicate key.
                if (refreshedConfigSet.ContainsKey(key))
                {
                    continue;
                }

                // Copy previous settings if they exist.
                if (prevConfigSet != null && prevConfigSet.ContainsKey(key))
                {
                    relConfig.enabled = prevConfigSet[key].enabled;
                }

                // Refresh distributions.
                if (distributions.Length > 0)
                {
                    relConfig.childKeys = RefreshDistributions(key, refreshedConfigSet, distributions, prevConfigSet);
                }

                // Save configuration.
                refreshedConfigSet.Add(key, relConfig);

                // Add key to list to send back to parent.
                childKeys.Add(key);
            }

            return(childKeys.ToArray());
        }
        private string[] RefreshPlatforms(string keyChain, ConfigDictionary refreshedConfigSet, ConfigDictionary prevConfigSet)
        {
            List <string> childKeys = new List <string>();

            BuildPlatform[] platforms = BuildSettings.platformList.platforms;
            for (int i = 0; i < platforms.Length; i++)
            {
                // Skip if platform is disabled or if it doesn't have any enabled architectures.
                if (!platforms[i].enabled || !platforms[i].atLeastOneArch)
                {
                    continue;
                }

                string        key       = keyChain + "/" + platforms[i].platformName;
                Configuration relConfig = new Configuration();

                // Check for duplicate key.
                if (refreshedConfigSet.ContainsKey(key))
                {
                    continue;
                }

                // Copy previous settings if they exist.
                if (prevConfigSet != null && prevConfigSet.ContainsKey(key))
                {
                    relConfig.enabled = prevConfigSet[key].enabled;
                }

                // Refresh architectures.
                BuildArchitecture[] architectures = platforms[i].architectures;
                if (architectures.Length > 0)
                {
                    relConfig.childKeys = RefreshArchitectures(key, refreshedConfigSet, architectures, platforms[i].distributionList.distributions, prevConfigSet);
                }

                // Save configuration.
                refreshedConfigSet.Add(key, relConfig);

                // Add key to list to send back to parent.
                childKeys.Add(key);
            }

            return(childKeys.ToArray());
        }
        public void Subsidiary()
        {
            var s = @"
            key1: value
            sub1
            sub2
            sub3

            key2:
            sub1
            sub2
            ";
            var dict = new ConfigDictionary(new StringReader(s));

            Assert.IsTrue(dict.ContainsKey("key1"));
            {
                var cv = dict["key1"];
                Assert.AreEqual("value", cv.Value);
                CollectionAssert.AreEqual(new []{ "sub1", "sub2", "sub3" }, cv.Subsididary);
            }

            Assert.IsTrue(dict.ContainsKey("key2"));
            {
                var cv = dict["key2"];
                Assert.AreEqual("", cv.Value);
                CollectionAssert.AreEqual(new []{ "sub1", "sub2" }, cv.Subsididary);
            }

            Dump(dict);
        }
        public void MultipleKeysAndSubsidiary()
        {
            var s = @"
            # comment
            key1:value11
            value12
            key1:value21
            value22
            value23
            key1:value31
            value32
            value33
            value34
            ";
            var dict = new ConfigDictionary(new StringReader(s));

            Assert.IsTrue(dict.ContainsKey("key1"));

            var cv = dict["key1"];
            Assert.AreEqual("value11", cv.Value);
            CollectionAssert.AreEqual(new[] { "value12" }, cv.Subsididary);

            cv = cv.NextValue();
            Assert.AreEqual("value21", cv.Value);
            CollectionAssert.AreEqual(new[] { "value22", "value23" }, cv.Subsididary);

            cv = cv.NextValue();
            Assert.AreEqual("value31", cv.Value);
            CollectionAssert.AreEqual(new[] { "value32", "value33", "value34" }, cv.Subsididary);

            cv = cv.NextValue();
            Assert.IsNull(cv);

            var array = dict["key1"].Collect();
            Assert.AreEqual(3, array.Count);

            Assert.AreEqual("value11", array[0].Value);
            Assert.AreEqual("value21", array[1].Value);
            Assert.AreEqual("value31", array[2].Value);

            CollectionAssert.AreEqual(new[] { "value12" }, array[0].Subsididary);
            CollectionAssert.AreEqual(new[] { "value22", "value23" }, array[1].Subsididary);
            CollectionAssert.AreEqual(new[] { "value32", "value33", "value34" }, array[2].Subsididary);

            Dump(dict);
        }
        public void MultipleKeys()
        {
            var s = @"
            # comment
            key1:value1
            key1:value2
            key1:value3
            ";
            var dict = new ConfigDictionary(new StringReader(s));

            Assert.IsTrue(dict.ContainsKey("key1"));

            var cv = dict["key1"];
            Assert.AreEqual("value1", cv.Value);

            cv = cv.NextValue();
            Assert.AreEqual("value2", cv.Value);

            cv = cv.NextValue();
            Assert.AreEqual("value3", cv.Value);

            cv = cv.NextValue();
            Assert.IsNull(cv);

            var array = dict["key1"].Collect();
            Assert.AreEqual(3, array.Count);
            Assert.AreEqual("value1", array[0].Value);
            Assert.AreEqual("value2", array[1].Value);
            Assert.AreEqual("value3", array[2].Value);

            Dump(dict);
        }
        private string[] RefreshPlatforms(string keyChain, ConfigDictionary refreshedConfigSet, ConfigDictionary prevConfigSet)
        {
            List <string> childKeys = new List <string>();

            List <BuildPlatform> platforms = BuildSettings.platformList.platforms;

            for (int i = 0; i < platforms.Count; i++)
            {
                // Skip if platform is disabled or if it doesn't have any enabled architectures.
                if (!platforms[i].enabled || !platforms[i].atLeastOneArch)
                {
                    continue;
                }

                string        key       = keyChain + "/" + platforms[i].platformName;
                Configuration relConfig = new Configuration();

                // Check for duplicate key.
                if (refreshedConfigSet.ContainsKey(key))
                {
                    continue;
                }

                // Copy previous settings if they exist.
                if (prevConfigSet != null && prevConfigSet.ContainsKey(key))
                {
                    relConfig.enabled = prevConfigSet[key].enabled;
                }

                // Refresh architectures.
                BuildArchitecture[] architectures = platforms[i].architectures;
                if (architectures.Length > 0)
                {
                    relConfig.childKeys = RefreshArchitectures(key, refreshedConfigSet, platforms[i].variantKey, architectures, platforms[i].distributionList.distributions, prevConfigSet);
                }

                // Scan ahead for other versions of this platform with different variants.
                for (int j = i; j < platforms.Count; j++)
                {
                    BuildPlatform otherPlatform = platforms[j];
                    if (otherPlatform.platformName == platforms[i].platformName && otherPlatform.enabled && otherPlatform.atLeastOneArch)
                    {
                        List <string> currentKeys    = new List <string>(relConfig.childKeys);
                        string[]      additionalKeys = RefreshArchitectures(key, refreshedConfigSet, otherPlatform.variantKey, otherPlatform.architectures, otherPlatform.distributionList.distributions, prevConfigSet);

                        for (int k = 0; k < additionalKeys.Length; k++)
                        {
                            if (!currentKeys.Contains(additionalKeys[k]))
                            {
                                currentKeys.Add(additionalKeys[k]);
                            }
                        }

                        relConfig.childKeys = currentKeys.ToArray();
                    }
                }

                // Save configuration.
                refreshedConfigSet.Add(key, relConfig);

                // Add key to list to send back to parent.
                childKeys.Add(key);
            }

            return(childKeys.ToArray());
        }