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]);
}
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);
return count($files) !== count($this_files) ||

View File

@ -56,6 +56,7 @@ class ConfigUpdateRequest
public ConfigUpdateMode $mode;
public ?ConfigDirFiles $files;
public ?string $result_file;
public ?\taskman\TaskmanFileChanges $file_changes;
private function __construct() {}
@ -76,7 +77,16 @@ class ConfigUpdateRequest
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->mode = ConfigUpdateMode::Patch;
@ -109,7 +119,7 @@ class ConfigManager
return $this->cache;
}
function getArtifactFilesSpec() : array
function getArtefactFilesSpec() : array
{
return [$this->globals->base_dirs, ['.js']];
}
@ -215,14 +225,15 @@ class ConfigManager
}
else if($req->mode === ConfigUpdateMode::Patch)
{
foreach($req->files as $file)
if($req->file_changes != null)
{
//TODO: is it robust enough?
//TODO: we should make difference between changed and added!
if(file_exists($file))
$added_files[] = $file;
else
$removed_files[] = $file;
foreach($req->files as $file)
{
if($req->file_changes->isCreated($file))
$added_files[] = $file;
else if($req->file_changes->isDeleted($file))
$removed_files[] = $file;
}
}
}
}
@ -295,17 +306,6 @@ class ConfigManager
{
$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)
{
$affected_files->addFile($file, unique: true);