From 04fd79645c8e1266330a9db2783b443238968fa1 Mon Sep 17 00:00:00 2001 From: Pavel Shevaev Date: Mon, 21 Apr 2025 15:54:33 +0300 Subject: [PATCH] Adding convenience stuff and removing some specifics --- config.inc.php | 44 ++++++++++++++++++++++---------------------- util.inc.php | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/config.inc.php b/config.inc.php index fe16f97..c752c31 100644 --- a/config.inc.php +++ b/config.inc.php @@ -100,17 +100,25 @@ class ConfigUpdateRequest class ConfigUpdateResult { + public ConfigUpdateMode $mode; + public ConfigDirFiles $affected_files; public array $affected_entries = array(); + public array $added_files = array(); + public array $removed_files = array(); + /** @var array */ public array $errors = array(); public int $corruptions = 0; public int $fast_jsons = 0; - function __construct(ConfigCacheUpdateParams $params) + function isPatchPossible() : bool { - $this->affected_files = $params->affected_files; + return ($this->mode == ConfigUpdateMode::Selected || + $this->mode === ConfigUpdateMode::DetectChanged) && + count(array_filter($this->added_files, fn($f) => config_is_file($f))) == 0 && + count(array_filter($this->removed_files, fn($f) => config_is_file($f))) == 0; } } @@ -171,16 +179,22 @@ class ConfigManager $affected_files = $this->_getAffectedFiles($req, $added_files, $removed_files); //NOTE: at this point taking into account only config files - $affected_files->filter(fn($file) => str_ends_with($file, '.conf.js')); + $affected_files->filter(fn($file) => config_is_file($file)); config_log("Affected files: {$affected_files->count()}"); + $update_result = new ConfigUpdateResult(); + $update_result->mode = $req->mode; + $update_result->affected_files = $affected_files; + $update_result->added_files = $added_files; + $update_result->removed_files = $removed_files; + $update_params = new ConfigCacheUpdateParams( globals: $this->globals, affected_files: $affected_files, verbose: $req->verbose ); - $update_result = self::_updateCache($update_params); + self::_updateCache($update_result, $update_params); //let's clear internal cache once the update procedure is done $this->cache->clear(); @@ -199,12 +213,10 @@ class ConfigManager return $update_result; } - private function _updateCache(ConfigCacheUpdateParams $params) : ConfigUpdateResult + private function _updateCache(ConfigUpdateResult $result, ConfigCacheUpdateParams $params) { - $result = new ConfigUpdateResult($params); - if($params->affected_files->isEmpty()) - return $result; + return; $t = microtime(true); @@ -225,8 +237,6 @@ class ConfigManager if($params->verbose) config_log("Update cache: " . round(microtime(true) - $t,2) . " sec."); - - return $result; } private function _checkFileMap(ConfigUpdateRequest $req, array &$added_files, array &$removed_files) @@ -312,7 +322,7 @@ class ConfigManager //if there were removed files we need to rebuild affected files foreach($removed_files as $file) { - if(!str_ends_with($file, '.conf.js')) + if(!config_is_file($file)) { $affected_by_file = $fs_cache_map->getAffectedFiles($file); foreach($affected_by_file as $dep) @@ -328,7 +338,7 @@ class ConfigManager { $affected_files->addFile($file, unique: true); - if(!str_ends_with($file, '.conf.js')) + if(!config_is_file($file)) { $affected_by_file = $fs_cache_map->getAffectedFiles($file); foreach($affected_by_file as $dep) @@ -469,13 +479,3 @@ 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; -} - diff --git a/util.inc.php b/util.inc.php index 5846e99..58c6d37 100644 --- a/util.inc.php +++ b/util.inc.php @@ -36,7 +36,7 @@ function config_real_path(array $base_dirs, string $rel_path, bool $strict = tru function config_is_file(string $filename) : bool { - return (strrpos($filename, '.conf.js') === (strlen($filename) - 8)); + return str_ends_with($filename, '.conf.js'); } function config_file2id(string $conf_dir, string $filename) : int