Files
ahriman/src/ahriman/application/handlers/tree_migrate.py
Evgenii Alekseev 93ce7f9a51 feat: use split packages (#135)
* move argument parsers to handlers themselves

* use hatchling instead of flit

* Revert "use hatchling instead of flit"

This reverts commit d18d146d79.

* add package-splitt script

* replace simplify walk method

* split packages

* explicitly install packages

* separate support triggers from main package

* add docs examples

* sort actions

* docs update

* add metapackage

* review fixes
2024-11-01 16:07:04 +02:00

87 lines
3.1 KiB
Python

#
# Copyright (c) 2021-2024 ahriman team.
#
# This file is part of ahriman
# (see https://github.com/arcan1s/ahriman).
#
# 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 <http://www.gnu.org/licenses/>.
#
import argparse
from ahriman.application.handlers.handler import Handler, SubParserAction
from ahriman.core.configuration import Configuration
from ahriman.models.repository_id import RepositoryId
from ahriman.models.repository_paths import RepositoryPaths
class TreeMigrate(Handler):
"""
tree migration handler
"""
@classmethod
def run(cls, args: argparse.Namespace, repository_id: RepositoryId, configuration: Configuration, *,
report: bool) -> None:
"""
callback for command line
Args:
args(argparse.Namespace): command line args
repository_id(RepositoryId): repository unique identifier
configuration(Configuration): configuration instance
report(bool): force enable or disable reporting
"""
current_tree = configuration.repository_paths
target_tree = RepositoryPaths(current_tree.root, current_tree.repository_id, _force_current_tree=True)
# create repository tree
target_tree.tree_create()
# perform migration
TreeMigrate.tree_move(current_tree, target_tree)
@staticmethod
def _set_service_tree_migrate_parser(root: SubParserAction) -> argparse.ArgumentParser:
"""
add parser for tree migration subcommand
Args:
root(SubParserAction): subparsers for the commands
Returns:
argparse.ArgumentParser: created argument parser
"""
parser = root.add_parser("service-tree-migrate", help="migrate repository tree",
description="migrate repository tree between versions")
parser.set_defaults(lock=None, quiet=True, report=False)
return parser
@staticmethod
def tree_move(from_tree: RepositoryPaths, to_tree: RepositoryPaths) -> None:
"""
move files between trees. Trees must be created in advance
Args:
from_tree(RepositoryPaths): old repository tree
to_tree(RepositoryPaths): new repository tree
"""
# we don't care about devtools chroot
for attribute in (
RepositoryPaths.packages,
RepositoryPaths.pacman,
RepositoryPaths.repository,
):
attribute.fget(from_tree).rename(attribute.fget(to_tree)) # type: ignore[attr-defined]
arguments = [_set_service_tree_migrate_parser]