Esempio n. 1
0
        private static IValue GetStructureVersionHolder(this IVault vault)
        {
            // Load all possible version holders
            var versionHolder1 = vault.GetValue("$version");
            var versionHolder2 = vault.GetValue("$format");
            var versionHolder3 = vault.GetValue("$structureversion");

            // Get version token from the latest holder
            var genuineHolder = versionHolder3 ?? versionHolder2 ?? versionHolder1;

            genuineHolder = genuineHolder ?? vault.CreateValue("$structureversion");
            var genuineVersion = genuineHolder.ContentString;

            // Ensure that all kinds of version holders are present in the vault (backward compat!)
            versionHolder1 = versionHolder1 ?? vault.GetOrCreateValue("$version");
            versionHolder2 = versionHolder2 ?? vault.GetOrCreateValue("$format");
            versionHolder3 = versionHolder3 ?? vault.GetOrCreateValue("$structureversion");
            var allHolders = new [] { versionHolder1, versionHolder2, versionHolder3 };

            // Now synchronize all version signatures across all holders
            foreach (var anyVersionHolder in allHolders)
            {
                if (anyVersionHolder != null)
                {
                    anyVersionHolder.SetContent(genuineVersion);
                }
            }

            // Return only the latest holder
            return(genuineHolder);
        }