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); }
private static Expression Expand(VariableExpression vex, IVault vault, IVault repository, List<Expression> stack, Dictionary<String, IBranch> nodes) { var @ref = vault.GetBranch(vex.Name.FromElfIdentifier()); if (@ref == null) { throw new ReferencedBranchDoesNotExistException(vex.Name); } if (@ref.IsFov()) { if (@ref.GetOrCreateValue("declarationType", "source").ContentString == "source") { String val; if (repository == null) { val = @ref.GetValue("valueForTesting").ContentString; } else { var external = @ref.GetValue("repositoryValue").ContentString; val = repository.GetValue(external).ContentString; } return new LiteralExpression(String.Format("[[{0}]]{1}", @ref.GetValue("type").ContentString, val)); } else { return ExpandRhs(@ref, repository, stack, nodes); } } else { var varName = @ref.VPath.ToElfIdentifier(); nodes[varName] = @ref; return new VariableExpression(varName); } }