diff --git a/cache.inc.php b/cache.inc.php index defa2df..f3d0825 100644 --- a/cache.inc.php +++ b/cache.inc.php @@ -342,22 +342,6 @@ class ConfigCacheFileMap } } -class ConfigCacheUpdateResult -{ - public ConfigDirFiles $affected_files; - public array $affected_entries = array(); - - /** @var array */ - public array $errors = array(); - public int $corruptions = 0; - public int $fast_jsons = 0; - - function __construct(ConfigCacheUpdateParams $params) - { - $this->affected_files = $params->affected_files; - } -} - class ConfigCacheUpdateParams { const MAX_DEFAULT_WORKERS = 5; @@ -408,7 +392,7 @@ class ConfigCacheUpdateParams } } -function _config_cache_update(ConfigCacheUpdateParams $params) : ConfigCacheUpdateResult +function _config_cache_update(ConfigUpdateResult $result, ConfigCacheUpdateParams $params) { $jobs = $params->splitJobs(sort: true); @@ -427,18 +411,14 @@ function _config_cache_update(ConfigCacheUpdateParams $params) : ConfigCacheUpda } } - $result = _config_merge_update_results($params, $results_by_job); + _config_merge_update_results($result, $results_by_job); if($params->verbose) config_log("Miss(Fast): {$result->affected_files->count()}({$result->fast_jsons})"); - - return $result; } -function _config_merge_update_results(ConfigCacheUpdateParams $params, array $results_by_job) : ConfigCacheUpdateResult +function _config_merge_update_results(ConfigUpdateResult $result, array $results_by_job) { - $result = new ConfigCacheUpdateResult($params); - $total_fast_jsons = 0; foreach($results_by_job as $results) @@ -463,8 +443,6 @@ function _config_merge_update_results(ConfigCacheUpdateParams $params, array $re } $result->fast_jsons = $total_fast_jsons; - - return $result; } function _config_update_cache_entry(ConfigCacheUpdateParams $params, $base_dir, string $file, diff --git a/config.inc.php b/config.inc.php index a97e12d..fe16f97 100644 --- a/config.inc.php +++ b/config.inc.php @@ -48,7 +48,7 @@ enum ConfigUpdateMode : int { case Force = 1; case DetectChanged = 2; - case Patch = 3; + case Selected = 3; } class ConfigUpdateRequest @@ -57,19 +57,27 @@ class ConfigUpdateRequest public ?ConfigDirFiles $files; public ?string $result_file; public ?\taskman\TaskmanFileChanges $file_changes; + public bool $verbose = false; + public bool $return_entries = false; private function __construct() {} - static function force(?ConfigDirFiles $files = null) : ConfigUpdateRequest + static function force(\taskman\artefact\TaskmanDirFiles|ConfigDirFiles|null $files = null) : ConfigUpdateRequest { + if($files instanceof \taskman\artefact\TaskmanDirFiles) + $files = ConfigDirFiles::makeFromArtefactFiles($files); + $req = new ConfigUpdateRequest(); $req->mode = ConfigUpdateMode::Force; $req->files = $files; return $req; } - static function detectChanged(string $result_file, ?ConfigDirFiles $files = null) : ConfigUpdateRequest + static function detectChanged(string $result_file, \taskman\artefact\TaskmanDirFiles|ConfigDirFiles|null $files = null) : ConfigUpdateRequest { + if($files instanceof \taskman\artefact\TaskmanDirFiles) + $files = ConfigDirFiles::makeFromArtefactFiles($files); + $req = new ConfigUpdateRequest(); $req->mode = ConfigUpdateMode::DetectChanged; $req->files = $files; @@ -77,21 +85,32 @@ class ConfigUpdateRequest return $req; } - static function patch(\taskman\TaskmanFileChanges $file_changes, ConfigDirFiles $files) : ConfigUpdateRequest + static function selected(\taskman\artefact\TaskmanDirFiles|ConfigDirFiles $files, \taskman\TaskmanFileChanges|null $file_changes = null) : ConfigUpdateRequest { + if($files instanceof \taskman\artefact\TaskmanDirFiles) + $files = ConfigDirFiles::makeFromArtefactFiles($files); + $req = new ConfigUpdateRequest(); - $req->mode = ConfigUpdateMode::Patch; + $req->mode = ConfigUpdateMode::Selected; $req->files = $files; $req->file_changes = $file_changes; return $req; } +} - static function selected(ConfigDirFiles $files) : ConfigUpdateRequest +class ConfigUpdateResult +{ + public ConfigDirFiles $affected_files; + public array $affected_entries = array(); + + /** @var array */ + public array $errors = array(); + public int $corruptions = 0; + public int $fast_jsons = 0; + + function __construct(ConfigCacheUpdateParams $params) { - $req = new ConfigUpdateRequest(); - $req->mode = ConfigUpdateMode::Patch; - $req->files = $files; - return $req; + $this->affected_files = $params->affected_files; } } @@ -138,12 +157,12 @@ class ConfigManager return $this->file_map; } - function updateCache(ConfigUpdateRequest $req, bool $return_entries = false, bool $verbose = false) : ConfigCacheUpdateResult + function update(ConfigUpdateRequest $req) : ConfigUpdateResult { - config_log("Updating cache, mode '{$req->mode->name}'..."); + config_log("Updating configs, mode '{$req->mode->name}'..."); if($req->files === null) - $req->files = $this->scanFiles(extension: '.js', verbose: $verbose); + $req->files = $this->scanFiles(extension: '.js', verbose: $req->verbose); $added_files = []; $removed_files = []; @@ -159,7 +178,7 @@ class ConfigManager $update_params = new ConfigCacheUpdateParams( globals: $this->globals, affected_files: $affected_files, - verbose: $verbose + verbose: $req->verbose ); $update_result = self::_updateCache($update_params); @@ -168,7 +187,7 @@ class ConfigManager $this->_updateFileMap($req, $affected_files, $added_files, $removed_files); - if($return_entries) + if($req->return_entries) { foreach($affected_files as $file) { @@ -180,14 +199,16 @@ class ConfigManager return $update_result; } - private function _updateCache(ConfigCacheUpdateParams $params) : ConfigCacheUpdateResult + private function _updateCache(ConfigCacheUpdateParams $params) : ConfigUpdateResult { + $result = new ConfigUpdateResult($params); + if($params->affected_files->isEmpty()) - return new ConfigCacheUpdateResult($params); + return $result; $t = microtime(true); - $result = _config_cache_update($params); + _config_cache_update($result, $params); if($result->errors) { @@ -223,7 +244,7 @@ class ConfigManager list($added_files, $removed_files) = $fs_cache_map->compare($req->files->getAllFiles()); config_log("File map compare, added: ".count($added_files).", removed: ".count($removed_files)); } - else if($req->mode === ConfigUpdateMode::Patch) + else if($req->mode === ConfigUpdateMode::Selected) { if($req->file_changes != null) { @@ -299,7 +320,7 @@ class ConfigManager } } } - else if($req->mode === ConfigUpdateMode::Patch) + else if($req->mode === ConfigUpdateMode::Selected) { $affected_files = ConfigDirFiles::makeFor($this); @@ -448,3 +469,13 @@ function config_bench_load(ConfigGlobals $globals, string $file) config_log("Load: " . (microtime(true) - $t)); } +function config_changes_has_deleted_or_added(TaskmanFileChanges $file_changes, iterable $files) : bool +{ + foreach($files as $file) + { + if(str_ends_with($file, '.conf.js') && ($file_changes->isDeleted($file) || $file_changes->isCreated($file))) + return true; + } + return false; +} +