aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/proxy/state_impl/_operations/prune_packages.py
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2022-08-25 16:37:53 +0200
committerWojtek Kosior <koszko@koszko.org>2022-09-28 12:54:54 +0200
commit367ea85057368047a50ae98a3510e0113eadd744 (patch)
tree5aecfd3a2e44377e9d331ca77346666ca193006c /src/hydrilla/proxy/state_impl/_operations/prune_packages.py
parentc1f6a379b3a85303f487e1b366e96d9db90cd4e3 (diff)
downloadhaketilo-hydrilla-367ea85057368047a50ae98a3510e0113eadd744.tar.gz
haketilo-hydrilla-367ea85057368047a50ae98a3510e0113eadd744.zip
[proxy] make it possible to uninstall a package
This commit also brings some more refactoring under state_impl/.
Diffstat (limited to 'src/hydrilla/proxy/state_impl/_operations/prune_packages.py')
-rw-r--r--src/hydrilla/proxy/state_impl/_operations/prune_packages.py145
1 files changed, 0 insertions, 145 deletions
diff --git a/src/hydrilla/proxy/state_impl/_operations/prune_packages.py b/src/hydrilla/proxy/state_impl/_operations/prune_packages.py
deleted file mode 100644
index 6f4b3e7..0000000
--- a/src/hydrilla/proxy/state_impl/_operations/prune_packages.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# Haketilo proxy data and configuration (removal of packages that are not used).
-#
-# This file is part of Hydrilla&Haketilo.
-#
-# Copyright (C) 2022 Wojtek Kosior
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-#
-# I, Wojtek Kosior, thereby promise not to sue for violation of this
-# file's license. Although I request that you do not make use this code
-# in a proprietary program, I am not going to enforce this in court.
-
-"""
-....
-"""
-
-# Enable using with Python 3.7.
-from __future__ import annotations
-
-import sqlite3
-
-from pathlib import Path
-
-
-_remove_item_versions_sqls = [
- '''
- CREATE TEMPORARY TABLE removed_versions(
- item_version_id INTEGER PRIMARY KEY
- );
- ''', '''
- INSERT INTO
- removed_versions
- SELECT
- iv.item_version_id
- FROM
- item_versions AS iv
- JOIN orphan_iterations AS oi USING (repo_iteration_id)
- WHERE
- iv.installed != 'I';
- ''', '''
- UPDATE
- mapping_statuses
- SET
- active_version_id = NULL
- WHERE
- active_version_id IN removed_versions;
- ''', '''
- DELETE FROM
- item_versions
- WHERE
- item_version_id IN removed_versions;
- ''', '''
- DROP TABLE removed_versions;
- '''
-]
-
-_remove_items_sql = '''
-WITH removed_items AS (
- SELECT
- i.item_id
- FROM
- items AS i
- LEFT JOIN item_versions AS iv USING (item_id)
- LEFT JOIN mapping_statuses AS ms USING (item_id)
- WHERE
- iv.item_version_id IS NULL AND
- (i.type = 'R' OR ms.enabled = 'N')
-)
-DELETE FROM
- items
-WHERE
- item_id IN removed_items;
-'''
-
-_remove_files_sql = '''
-WITH removed_files AS (
- SELECT
- f.file_id
- FROM
- files AS f
- LEFT JOIN file_uses AS fu USING (file_id)
- WHERE
- fu.file_use_id IS NULL
-)
-DELETE FROM
- files
-WHERE
- file_id IN removed_files;
-'''
-
-_remove_repo_iterations_sql = '''
-WITH removed_iterations AS (
- SELECT
- oi.repo_iteration_id
- FROM
- orphan_iterations AS oi
- LEFT JOIN item_versions AS iv USING (repo_iteration_id)
- WHERE
- iv.item_version_id IS NULL
-)
-DELETE FROM
- repo_iterations
-WHERE
- repo_iteration_id IN removed_iterations;
-'''
-
-_remove_repos_sql = '''
-WITH removed_repos AS (
- SELECT
- r.repo_id
- FROM
- repos AS r
- LEFT JOIN repo_iterations AS ri USING (repo_id)
- WHERE
- r.deleted AND ri.repo_iteration_id IS NULL AND r.repo_id != 1
-)
-DELETE FROM
- repos
-WHERE
- repo_id IN removed_repos;
-'''
-
-def prune_packages(cursor: sqlite3.Cursor) -> None:
- assert cursor.connection.in_transaction
-
- for sql in _remove_item_versions_sqls:
- cursor.execute(sql)
- cursor.execute(_remove_items_sql)
- cursor.execute(_remove_files_sql)
- cursor.execute(_remove_repo_iterations_sql)
- cursor.execute(_remove_repos_sql)