diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-08-25 10:18:33 +0200 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-09-28 12:54:53 +0200 |
commit | edbb8286146920583087080809f6e904ca856cc9 (patch) | |
tree | 0a7b3bf4c207707a211e66c45bafec7fab579e07 /src/hydrilla/proxy/state_impl/_operations | |
parent | f1204084f5fd377e66f15b3f23e81e13a063512e (diff) | |
download | haketilo-hydrilla-edbb8286146920583087080809f6e904ca856cc9.tar.gz haketilo-hydrilla-edbb8286146920583087080809f6e904ca856cc9.zip |
[proxy] make package version info page also display other versions; fix&improve some aspects of package loading and dependency recomputing
Diffstat (limited to 'src/hydrilla/proxy/state_impl/_operations')
-rw-r--r-- | src/hydrilla/proxy/state_impl/_operations/load_packages.py | 52 | ||||
-rw-r--r-- | src/hydrilla/proxy/state_impl/_operations/recompute_dependencies.py | 66 |
2 files changed, 79 insertions, 39 deletions
diff --git a/src/hydrilla/proxy/state_impl/_operations/load_packages.py b/src/hydrilla/proxy/state_impl/_operations/load_packages.py index defa9b6..76a24d1 100644 --- a/src/hydrilla/proxy/state_impl/_operations/load_packages.py +++ b/src/hydrilla/proxy/state_impl/_operations/load_packages.py @@ -64,18 +64,6 @@ def make_repo_iteration(cursor: sqlite3.Cursor, repo_id: int) -> int: cursor.execute( ''' - UPDATE - repos - SET - next_iteration = ? - WHERE - repo_id = ?; - ''', - (next_iteration + 1, repo_id) - ) - - cursor.execute( - ''' INSERT INTO repo_iterations(repo_id, iteration) VALUES(?, ?); ''', @@ -96,6 +84,30 @@ def make_repo_iteration(cursor: sqlite3.Cursor, repo_id: int) -> int: (repo_iteration_id,), = cursor.fetchall() + cursor.execute( + ''' + UPDATE + repos + SET + next_iteration = ?, + active_iteration_id = ( + CASE + WHEN repo_id = 1 THEN NULL + ELSE ? + END + ), + last_refreshed = ( + CASE + WHEN repo_id = 1 THEN NULL + ELSE STRFTIME('%s', 'NOW') + END + ) + WHERE + repo_id = ?; + ''', + (next_iteration + 1, repo_iteration_id, repo_id) + ) + return repo_iteration_id def get_or_make_item(cursor: sqlite3.Cursor, type: str, identifier: str) -> int: @@ -162,12 +174,9 @@ def update_or_make_item_version( item_versions SET installed = ( - CASE WHEN - installed = 'I' OR ? = 'I' - THEN - 'I' - ELSE - 'N' + CASE + WHEN installed = 'I' OR ? = 'I' THEN 'I' + ELSE 'N' END ), repo_iteration_id = ? @@ -213,10 +222,7 @@ def update_or_make_item_version( def make_mapping_status(cursor: sqlite3.Cursor, item_id: int) -> None: cursor.execute( - ''' - INSERT OR IGNORE INTO mapping_statuses(item_id, enabled, required) - VALUES(?, 'N', FALSE); - ''', + 'INSERT OR IGNORE INTO mapping_statuses(item_id) VALUES(?);', (item_id,) ) @@ -395,6 +401,8 @@ def _load_packages_no_state_update( repo_id = repo_id ) + prune_packages(cursor) + _recompute_dependencies_no_state_update( cursor = cursor, semirepo_file_resolver = MalcontentFileResolver(malcontent_path) diff --git a/src/hydrilla/proxy/state_impl/_operations/recompute_dependencies.py b/src/hydrilla/proxy/state_impl/_operations/recompute_dependencies.py index 494d130..4b48ce8 100644 --- a/src/hydrilla/proxy/state_impl/_operations/recompute_dependencies.py +++ b/src/hydrilla/proxy/state_impl/_operations/recompute_dependencies.py @@ -51,12 +51,13 @@ def _get_infos_of_type(cursor: sqlite3.Cursor, info_type: t.Type[AnyInfoVar],) \ cursor.execute( ''' SELECT - i.item_id, iv.definition, r.name, ri.iteration + ive.item_version_id, + ive.definition, + ive.repo, + ive.repo_iteration FROM - item_versions AS iv - JOIN items AS i USING (item_id) - JOIN repo_iterations AS ri USING (repo_iteration_id) - JOIN repos AS r USING (repo_id) + item_versions_extra AS ive + JOIN items AS i USING (item_id) WHERE i.type = ?; ''', @@ -65,9 +66,10 @@ def _get_infos_of_type(cursor: sqlite3.Cursor, info_type: t.Type[AnyInfoVar],) \ result: dict[int, AnyInfoVar] = {} - for item_id, definition, repo_name, repo_iteration in cursor.fetchall(): + for item_version_id, definition, repo_name, repo_iteration \ + in cursor.fetchall(): info = info_type.load(definition, repo_name, repo_iteration) - result[item_id] = info + result[item_version_id] = info return result @@ -93,11 +95,8 @@ def _recompute_dependencies_no_state_update_no_pull_files( ids_to_resources = _get_infos_of_type(cursor, item_infos.ResourceInfo) ids_to_mappings = _get_infos_of_type(cursor, item_infos.MappingInfo) - resources = ids_to_resources.items() - resources_to_ids = dict((info.identifier, id) for id, info in resources) - - mappings = ids_to_mappings.items() - mappings_to_ids = dict((info.identifier, id) for id, info in mappings) + resources_to_ids = dict((info, id) for id, info in ids_to_resources.items()) + mappings_to_ids = dict((info, id) for id, info in ids_to_mappings.items()) requirements = [*extra_requirements] @@ -150,17 +149,18 @@ def _recompute_dependencies_no_state_update_no_pull_files( UPDATE mapping_statuses SET - required = FALSE, active_version_id = NULL WHERE enabled != 'E'; ''' ) + cursor.execute("UPDATE item_versions SET active = 'N';") + cursor.execute('DELETE FROM payloads;') for choice in mapping_choices.values(): - mapping_ver_id = mappings_to_ids[choice.info.identifier] + mapping_ver_id = mappings_to_ids[choice.info] if choice.required: _mark_version_installed(cursor, mapping_ver_id) @@ -184,12 +184,23 @@ def _recompute_dependencies_no_state_update_no_pull_files( UPDATE mapping_statuses SET - required = ?, active_version_id = ? WHERE item_id = ?; ''', - (choice.required, mapping_ver_id, mapping_item_id) + (mapping_ver_id, mapping_item_id) + ) + + cursor.execute( + ''' + UPDATE + item_versions + SET + active = ? + WHERE + item_version_id = ?; + ''', + (mapping_ver_id, 'R' if choice.required else 'A') ) for num, (pattern, payload) in enumerate(choice.payloads.items()): @@ -226,7 +237,7 @@ def _recompute_dependencies_no_state_update_no_pull_files( (payload_id,), = cursor.fetchall() for res_num, resource_info in enumerate(payload.resources): - resource_ver_id = resources_to_ids[resource_info.identifier] + resource_ver_id = resources_to_ids[resource_info] if choice.required: _mark_version_installed(cursor, resource_ver_id) @@ -243,6 +254,27 @@ def _recompute_dependencies_no_state_update_no_pull_files( (payload_id, resource_ver_id, res_num) ) + new_status = 'R' if choice.required else 'A' + + cursor.execute( + ''' + UPDATE + item_versions + SET + active = ( + CASE + WHEN active = 'R' OR ? = 'R' THEN 'R' + WHEN active = 'A' OR ? = 'A' THEN 'A' + ELSE 'N' + END + ) + WHERE + item_version_id = ?; + ''', + (new_status, new_status, resource_ver_id) + ) + + def _recompute_dependencies_no_state_update( cursor: sqlite3.Cursor, extra_requirements: t.Iterable[sds.MappingRequirement] = (), |