Esempio n. 1
0
        /// <summary>
        /// Computes assembly dependencies from a config file.
        /// </summary>
        /// <param name="file">The file.</param>
        private void ComputeDependencies(CheckFileNode checkFileNode, ConfigFile file)
        {
            // Review all includes file
            foreach (var includeRule in file.Includes)
            {
                if (includeRule.Attach.HasValue && includeRule.Attach.Value || includeRule.AttachTypes.Any())
                {
                    // Link this assembly to its config file (for checking checkfiles)
                    checkFileNode.AddLinkedConfigFile(file);
                }
            }

            // Add link to extensions if any
            if (file.Extension.Count > 0)
            {
                checkFileNode.AddLinkedConfigFile(file);
            }

            // Find all dependencies from all linked config files
            var dependencyList = new List <ConfigFile>();

            foreach (var linkedConfigFile in checkFileNode.ConfigFilesLinked)
            {
                linkedConfigFile.FindAllDependencies(dependencyList);
            }

            // Add full dependency for this assembly from all config files
            foreach (var linkedConfigFile in dependencyList)
            {
                checkFileNode.AddLinkedConfigFile(linkedConfigFile);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Checks the assembly is up to date relative to its config dependencies.
        /// </summary>
        /// <param name="checkFilesNode">The assembly.</param>
        /// <param name="checkFilesPath">The path to where the check file is located.</param>
        private void CheckIfNodeUpToDate(CheckFileNode checkFilesNode, string checkFilesPath)
        {
            var maxUpdateTime = ConfigFile.GetLatestTimestamp(checkFilesNode.ConfigFilesLinked);

            if (checkFilesPath != null && File.Exists(Path.Combine(checkFilesPath, checkFilesNode.CheckFileName)))
            {
                if (maxUpdateTime > File.GetLastWriteTime(Path.Combine(checkFilesPath, checkFilesNode.CheckFileName)))
                {
                    checkFilesNode.NeedsToBeUpdated = true;
                }
            }
            else
            {
                checkFilesNode.NeedsToBeUpdated = true;
            }

            // Force generate
            if (ForceGenerator)
            {
                checkFilesNode.NeedsToBeUpdated = true;
            }

            if (checkFilesNode.NeedsToBeUpdated)
            {
                foreach (var linkedConfigFile in checkFilesNode.ConfigFilesLinked)
                {
                    linkedConfigFile.ProcessMappings = true;
                }
            }
            string updateForMessage = (checkFilesNode.NeedsToBeUpdated) ? "Config changed. Need to update from" : "Config unchanged. No need to update from";

            Logger.Message("Process assembly [{0}] => {1} dependencies: [{2}]", checkFilesNode.Name, updateForMessage,
                           string.Join(",", checkFilesNode.ConfigFilesLinked));
        }
Esempio n. 3
0
        private Dictionary <string, CheckFileNode> CheckIfUpdated(IEnumerable <ConfigFile> configFiles, string checkFilesPath)
        {
            var checkFileNodes = new Dictionary <string, CheckFileNode>();

            // Compute assembly dependencies first
            // In order to calculate which assembly we need to process
            foreach (var configFile in configFiles)
            {
                if (!string.IsNullOrEmpty(configFile.Assembly))
                {
                    if (!checkFileNodes.TryGetValue(configFile.Assembly, out var checkFileNode))
                    {
                        checkFileNode = new CheckFileNode(configFile.Assembly);
                        checkFileNodes[configFile.Assembly] = checkFileNode;
                    }
                    ComputeDependencies(checkFileNode, configFile);
                }
            }

            // Check which assembly to update
            foreach (var checkFileNode in checkFileNodes.Values)
            {
                CheckIfNodeUpToDate(checkFileNode, checkFilesPath);
            }
            return(checkFileNodes);
        }