Compare commits

..

No commits in common. "master" and "v6.0.0rc10" have entirely different histories.

4 changed files with 26 additions and 34 deletions

View File

@ -325,24 +325,14 @@ class ConfigCacheFileMap
unset($this->file2deps[$file]); unset($this->file2deps[$file]);
} }
function updateDepsForEntry(array $base_dirs, ConfigCacheEntry $entry) function updateDepsForEntry(ConfigCacheEntry $entry)
{ {
//1. add includes foreach($entry->includes as $include)
$all_refs = $entry->includes;
//2. add refs
foreach($entry->refs as $ref => $_)
{ {
$file = config_real_path($base_dirs, substr($ref, 1) . '.conf.js'); if(isset($this->file2deps[$include]))
$all_refs[] = $file; $this->file2deps[$include][$entry->file] = true;
}
foreach($all_refs as $ref_file)
{
if(isset($this->file2deps[$ref_file]))
$this->file2deps[$ref_file][$entry->file] = true;
else else
$this->file2deps[$ref_file] = [$entry->file => true]; $this->file2deps[$include] = [$entry->file => true];
} }
} }

View File

@ -223,7 +223,7 @@ class ConfigManager
$affected_all_files = $this->_getAffectedFiles($req, $added_files, $removed_files); $affected_all_files = $this->_getAffectedFiles($req, $added_files, $removed_files);
$affected_conf_files = $this->filterConfigFiles($affected_all_files); $affected_conf_files = $this->filterConfigFiles($affected_all_files);
config_log("Affected configs: {$affected_conf_files->count()} (requested: {$req->files->count()})"); config_log("Affected configs: {$affected_conf_files->count()} (request: {$req->files->count()})");
$update_result = new ConfigUpdateResult(); $update_result = new ConfigUpdateResult();
$update_result->request = $req; $update_result->request = $req;
@ -349,7 +349,7 @@ class ConfigManager
foreach($affected_conf_files as $file) foreach($affected_conf_files as $file)
{ {
$cache_entry = $this->cache->getOrLoadByPath($file); $cache_entry = $this->cache->getOrLoadByPath($file);
$fs_cache_map->updateDepsForEntry($this->globals->base_dirs, $cache_entry); $fs_cache_map->updateDepsForEntry($cache_entry);
} }
if($req->mode == ConfigUpdateMode::Force || if($req->mode == ConfigUpdateMode::Force ||
@ -396,9 +396,12 @@ class ConfigManager
//if there were removed files we need to rebuild affected files //if there were removed files we need to rebuild affected files
foreach($removed_files as $file) foreach($removed_files as $file)
{ {
$affected_by_file = $fs_cache_map->getAffectedFiles($file); if(!config_is_file($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) else if($req->mode === ConfigUpdateMode::Selected)
@ -408,9 +411,13 @@ class ConfigManager
foreach($req->files as $file) foreach($req->files as $file)
{ {
$affected_files->addFile($file, unique: true); $affected_files->addFile($file, unique: true);
$affected_by_file = $fs_cache_map->getAffectedFiles($file);
foreach($affected_by_file as $dep) if(!config_is_file($file))
$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);
}
} }
} }

View File

@ -458,20 +458,18 @@ function _config_patch_bundle_fmt3(
$chunk_entries = array_filter($header, fn($item) => $item[4] == $chunk_offset); $chunk_entries = array_filter($header, fn($item) => $item[4] == $chunk_offset);
//chunk contains only one patch entry //chunk contains only one patch entry
$patch_payload_lz4 = lz4_compress($patch_payload, 9); $patched_chunk = lz4_compress($patch_payload, 9);
$patched_chunk = pack("V", strlen($patch_payload_lz4)); if(strlen($patched_chunk) > $max_chunk_size)
$patched_chunk .= $patch_payload_lz4; $max_chunk_size = strlen($patched_chunk);
if(strlen($patch_payload) > $max_chunk_size)
$max_chunk_size = strlen($patch_payload);
//TODO: make a better generic algorithm for patching the whole chunk //TODO: make a better generic algorithm for patching the whole chunk
//special case for single entry //special case for single entry
if(count($chunk_entries) == 1 && $payloads_offset == 0) if(count($chunk_entries) == 1 && $payloads_offset == 0)
{ {
$lz4_chunk_size = unpack("V", substr($payloads_bundle, $chunk_offset, 4))[1]; $lz4_chunk_size = unpack("V", substr($packed_data, $chunk_offset, 4))[1];
//we can just replace chunk in place if the size of a patched chunk is less or equal //we can just replace chunk in place if the size of a patched chunk is less or equal
if(strlen($patch_payload_lz4) <= $lz4_chunk_size) if(strlen($patched_chunk) <= $lz4_chunk_size)
{ {
$payloads_bundle = substr_replace($payloads_bundle, $patched_chunk, $chunk_offset, strlen($patched_chunk)); $payloads_bundle = substr_replace($payloads_bundle, $patched_chunk, $chunk_offset, strlen($patched_chunk));
$header_entry[6] = strlen($patch_payload); $header_entry[6] = strlen($patch_payload);

View File

@ -28,11 +28,9 @@ function config_real_path(array $base_dirs, string $rel_path, bool $strict = tru
{ {
foreach($base_dirs as $dir) foreach($base_dirs as $dir)
if(is_file($dir . '/' . $rel_path)) if(is_file($dir . '/' . $rel_path))
return normalize_path($dir . '/' . $rel_path); return $dir . '/' . $rel_path;
if($strict) if($strict)
throw new Exception("No file for relative path '$rel_path'"); throw new Exception("No file for relative path '$rel_path'");
return null; return null;
} }
@ -106,7 +104,6 @@ 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 function config_includes_map_find_text_origin(array $map, string $file, string $text) : array
{ {
if(!isset($map[$file])) if(!isset($map[$file]))