repo: Refactor "repo" subcomand

Refactor the "repo" sub-command for easier maintenance
and readability. No functionality changes were made in this
refactoring.

As a side affect, this treats apt-ostree more like a library
so that other StarlingX projects can use apt-ostree to manage
images and/or packages.

Test Plan
PASSED Installed apt-ostree from git repo.
PASSED mkdir -p /var/repository
PASSED sudo apt-ostree repo init \
    --feed /var/repository --release bullseye
    --origin starlingx
PASSED sudo apt-ostree repo list --release bullseye

Story: 2010867
Task: 48556

Change-Id: Iaa5dbf6233b0175eefec67ba666c66b47bc01e66
Signed-off-by: Charles Short <charles.short@windriver.com>
This commit is contained in:
Charles Short 2023-09-12 08:26:59 -04:00
parent dce174f305
commit 70fdb9cd9b
6 changed files with 45 additions and 33 deletions

View File

@ -13,7 +13,7 @@ from apt_ostree.cmd.repo.list import show
from apt_ostree.cmd.repo.remove import remove
@click.group(help="Commands to create/manage Debian package repository")
@click.group(help="Create/manage Debian package repository.")
@click.pass_context
def repo(ctxt):
pass

View File

@ -4,7 +4,7 @@ Copyright (c) 2023 Wind River Systems, Inc.
SPDX-License-Identifier: Apache-2.0
"""
import shutil
import errno
import sys
import click
@ -13,7 +13,6 @@ from apt_ostree.cmd.options import feed_option
from apt_ostree.cmd.options import packages_option
from apt_ostree.cmd.options import release_option
from apt_ostree.cmd import pass_state_context
from apt_ostree.log import complete_step
from apt_ostree.repo import Repo
@ -23,10 +22,13 @@ from apt_ostree.repo import Repo
@release_option
@packages_option
def add(state, feed, release, packages):
if shutil.which("reprepro") is None:
click.secho("reprepro was not found in your $PATH")
sys.exit(0)
with complete_step(
f"Adding packages to {state.feed}"):
try:
Repo(state).add()
except KeyboardInterrupt:
click.secho("\n" + ("Exiting at your request."))
sys.exit(130)
except BrokenPipeError:
sys.exit()
except OSError as error:
if error.errno == errno.ENOSPC:
sys.exit("errror - No space left on device.")

View File

@ -5,7 +5,7 @@ SPDX-License-Identifier: Apache-2.0
"""
import shutil
import errno
import sys
import click
@ -15,7 +15,6 @@ from apt_ostree.cmd.options import feed_option
from apt_ostree.cmd.options import origin_option
from apt_ostree.cmd.options import release_option
from apt_ostree.cmd import pass_state_context
from apt_ostree.log import complete_step
from apt_ostree.repo import Repo
@ -25,10 +24,13 @@ from apt_ostree.repo import Repo
@release_option
@origin_option
def init(state, feed, release, origin):
if shutil.which("reprepro") is None:
click.secho("reprepro was not found in your $PATH")
sys.exit(0)
with complete_step(
f"Creating Debian package repository in {state.feed}."):
try:
Repo(state).init()
except KeyboardInterrupt:
click.secho("\n" + ("Exiting at your request."))
sys.exit(130)
except BrokenPipeError:
sys.exit()
except OSError as error:
if error.errno == errno.ENOSPC:
sys.exit("errror - No space left on device.")

View File

@ -5,7 +5,7 @@ SPDX-License-Identifier: Apache-2.0
"""
import shutil
import errno
import sys
import click
@ -21,8 +21,13 @@ from apt_ostree.repo import Repo
@feed_option
@release_option
def show(state, feed, release):
if shutil.which("reprepro") is None:
click.secho("reprepro was not found in your $PATH")
sys.exit(0)
Repo(state).show()
try:
Repo(state).show()
except KeyboardInterrupt:
click.secho("\n" + ("Exiting at your request."))
sys.exit(130)
except BrokenPipeError:
sys.exit()
except OSError as error:
if error.errno == errno.ENOSPC:
sys.exit("errror - No space left on device.")

View File

@ -5,7 +5,7 @@ SPDX-License-Identifier: Apache-2.0
"""
import shutil
import errno
import sys
import click
@ -14,20 +14,22 @@ from apt_ostree.cmd.options import feed_option
from apt_ostree.cmd.options import packages_option
from apt_ostree.cmd.options import release_option
from apt_ostree.cmd import pass_state_context
from apt_ostree.log import complete_step
from apt_ostree.repo import Repo
@click.command(help="Remove debian package(s) from reposiotry")
@click.command(help="Remove debian package(s) from reposiotry.")
@pass_state_context
@feed_option
@release_option
@packages_option
def remove(state, feed, release, packages):
if shutil.which("reprepro") is None:
click.secho("reprepro was not found in your $PATH")
sys.exit(0)
with complete_step(
f"Removing packages from {state.feed}"):
try:
Repo(state).remove()
except KeyboardInterrupt:
click.secho("\n" + ("Exiting at your request."))
sys.exit(130)
except BrokenPipeError:
sys.exit()
except OSError as error:
if error.errno == errno.ENOSPC:
sys.exit("errror - No space left on device.")

View File

@ -60,7 +60,7 @@ class Repo:
)
def add(self):
"""Add Debian package(s) to repository"""
"""Add Debian package(s) to repository."""
for pkg in self.state.packages:
log_step(f"Adding {pkg}")
r = run_command(
@ -102,6 +102,7 @@ class Repo:
self.console.print(table)
def remove(self):
"""Remove a Debian package from an archive."""
for pkg in self.state.packages:
log_step(f"Removing {pkg}")
r = run_command(