Making cache updating more robust
Publish PHP Package / docker (push) Successful in 6s Details

This commit is contained in:
Pavel Shevaev 2025-04-18 11:49:29 +03:00
parent 7b73207251
commit 83fa074f7d
2 changed files with 24 additions and 21 deletions

View File

@ -268,8 +268,11 @@ class ConfigCacheFileMap
return array_keys($this->file2deps[$file]); return array_keys($this->file2deps[$file]);
} }
function differs(array $files) : bool function differs(ConfigDirFiles|\taskman\artefact\TaskmanDirFiles|array $files) : bool
{ {
if(!is_array($files))
$files = $files->getAllFiles();
$this_files = array_keys($this->file2deps); $this_files = array_keys($this->file2deps);
return count($files) !== count($this_files) || return count($files) !== count($this_files) ||

View File

@ -56,6 +56,7 @@ class ConfigUpdateRequest
public ConfigUpdateMode $mode; public ConfigUpdateMode $mode;
public ?ConfigDirFiles $files; public ?ConfigDirFiles $files;
public ?string $result_file; public ?string $result_file;
public ?\taskman\TaskmanFileChanges $file_changes;
private function __construct() {} private function __construct() {}
@ -76,7 +77,16 @@ class ConfigUpdateRequest
return $req; return $req;
} }
static function patch(ConfigDirFiles $files) : ConfigUpdateRequest static function patch(\taskman\TaskmanFileChanges $file_changes, ConfigDirFiles $files) : ConfigUpdateRequest
{
$req = new ConfigUpdateRequest();
$req->mode = ConfigUpdateMode::Patch;
$req->files = $files;
$req->file_changes = $file_changes;
return $req;
}
static function selected(ConfigDirFiles $files) : ConfigUpdateRequest
{ {
$req = new ConfigUpdateRequest(); $req = new ConfigUpdateRequest();
$req->mode = ConfigUpdateMode::Patch; $req->mode = ConfigUpdateMode::Patch;
@ -109,7 +119,7 @@ class ConfigManager
return $this->cache; return $this->cache;
} }
function getArtifactFilesSpec() : array function getArtefactFilesSpec() : array
{ {
return [$this->globals->base_dirs, ['.js']]; return [$this->globals->base_dirs, ['.js']];
} }
@ -214,18 +224,19 @@ class ConfigManager
config_log("File map compare, added: ".count($added_files).", removed: ".count($removed_files)); config_log("File map compare, added: ".count($added_files).", removed: ".count($removed_files));
} }
else if($req->mode === ConfigUpdateMode::Patch) else if($req->mode === ConfigUpdateMode::Patch)
{
if($req->file_changes != null)
{ {
foreach($req->files as $file) foreach($req->files as $file)
{ {
//TODO: is it robust enough? if($req->file_changes->isCreated($file))
//TODO: we should make difference between changed and added!
if(file_exists($file))
$added_files[] = $file; $added_files[] = $file;
else else if($req->file_changes->isDeleted($file))
$removed_files[] = $file; $removed_files[] = $file;
} }
} }
} }
}
private function _updateFileMap(ConfigUpdateRequest $req, ConfigDirFiles $affected_files, array $added_files, array $removed_files) private function _updateFileMap(ConfigUpdateRequest $req, ConfigDirFiles $affected_files, array $added_files, array $removed_files)
{ {
@ -295,17 +306,6 @@ class ConfigManager
{ {
$affected_files = ConfigDirFiles::makeFor($this); $affected_files = ConfigDirFiles::makeFor($this);
foreach($req->files as $file)
{
//removed config special case
if(str_ends_with($file, '.conf.js') && in_array($file, $removed_files))
{
//NOTE: let it be for now, rebuilds the whole bundle
$affected_files = $this->scanFiles(extension: '.conf.js');
return $affected_files;
}
}
foreach($req->files as $file) foreach($req->files as $file)
{ {
$affected_files->addFile($file, unique: true); $affected_files->addFile($file, unique: true);