diff --git a/cache.inc.php b/cache.inc.php index bf2817a..144863a 100644 --- a/cache.inc.php +++ b/cache.inc.php @@ -325,14 +325,24 @@ class ConfigCacheFileMap unset($this->file2deps[$file]); } - function updateDepsForEntry(ConfigCacheEntry $entry) + function updateDepsForEntry(array $base_dirs, ConfigCacheEntry $entry) { - foreach($entry->includes as $include) + //1. add includes + $all_refs = $entry->includes; + + //2. add refs + foreach($entry->refs as $ref => $_) { - if(isset($this->file2deps[$include])) - $this->file2deps[$include][$entry->file] = true; + $file = config_real_path($base_dirs, substr($ref, 1) . '.conf.js'); + $all_refs[] = $file; + } + + foreach($all_refs as $ref_file) + { + if(isset($this->file2deps[$ref_file])) + $this->file2deps[$ref_file][$entry->file] = true; else - $this->file2deps[$include] = [$entry->file => true]; + $this->file2deps[$ref_file] = [$entry->file => true]; } } diff --git a/config.inc.php b/config.inc.php index be667a4..b1dd52f 100644 --- a/config.inc.php +++ b/config.inc.php @@ -223,7 +223,7 @@ class ConfigManager $affected_all_files = $this->_getAffectedFiles($req, $added_files, $removed_files); $affected_conf_files = $this->filterConfigFiles($affected_all_files); - config_log("Affected configs: {$affected_conf_files->count()} (request: {$req->files->count()})"); + config_log("Affected configs: {$affected_conf_files->count()} (requested: {$req->files->count()})"); $update_result = new ConfigUpdateResult(); $update_result->request = $req; @@ -349,7 +349,7 @@ class ConfigManager foreach($affected_conf_files as $file) { $cache_entry = $this->cache->getOrLoadByPath($file); - $fs_cache_map->updateDepsForEntry($cache_entry); + $fs_cache_map->updateDepsForEntry($this->globals->base_dirs, $cache_entry); } if($req->mode == ConfigUpdateMode::Force || @@ -396,12 +396,9 @@ class ConfigManager //if there were removed files we need to rebuild affected files foreach($removed_files as $file) { - if(!config_is_file($file)) - { - $affected_by_file = $fs_cache_map->getAffectedFiles($file); - foreach($affected_by_file as $dep) - $affected_files->addFile($dep, unique: true); - } + $affected_by_file = $fs_cache_map->getAffectedFiles($file); + foreach($affected_by_file as $dep) + $affected_files->addFile($dep, unique: true); } } else if($req->mode === ConfigUpdateMode::Selected) @@ -411,13 +408,9 @@ class ConfigManager foreach($req->files as $file) { $affected_files->addFile($file, unique: true); - - if(!config_is_file($file)) - { - $affected_by_file = $fs_cache_map->getAffectedFiles($file); - foreach($affected_by_file as $dep) - $affected_files->addFile($dep, unique: true); - } + $affected_by_file = $fs_cache_map->getAffectedFiles($file); + foreach($affected_by_file as $dep) + $affected_files->addFile($dep, unique: true); } } diff --git a/util.inc.php b/util.inc.php index 58c6d37..2095a34 100644 --- a/util.inc.php +++ b/util.inc.php @@ -28,9 +28,11 @@ function config_real_path(array $base_dirs, string $rel_path, bool $strict = tru { foreach($base_dirs as $dir) if(is_file($dir . '/' . $rel_path)) - return $dir . '/' . $rel_path; + return normalize_path($dir . '/' . $rel_path); + if($strict) throw new Exception("No file for relative path '$rel_path'"); + return null; } @@ -104,6 +106,7 @@ function config_walk_fields(object $proto, callable $callback) } } +//TODO: doesn't really belong here function config_includes_map_find_text_origin(array $map, string $file, string $text) : array { if(!isset($map[$file]))