Split command-line-generating code into its own function
This commit is contained in:
parent
0574ec032b
commit
4b285401ed
@ -7,7 +7,6 @@ import subprocess
|
|||||||
# ========== Constants ==========
|
# ========== Constants ==========
|
||||||
REPO_ADD_CMD = '/usr/bin/repo-add'
|
REPO_ADD_CMD = '/usr/bin/repo-add'
|
||||||
REPO_REMOVE_CMD = '/usr/bin/repo-remove'
|
REPO_REMOVE_CMD = '/usr/bin/repo-remove'
|
||||||
DB_EXT = 'db.tar.xz'
|
|
||||||
|
|
||||||
# ========== Logging setup ==========
|
# ========== Logging setup ==========
|
||||||
syslog = logging.getLogger(__name__)
|
syslog = logging.getLogger(__name__)
|
||||||
@ -19,6 +18,41 @@ class RepoAddError(BaseException):
|
|||||||
|
|
||||||
|
|
||||||
# ========== Functions ==========
|
# ========== Functions ==========
|
||||||
|
def gen_cmdline(operation, db, opts, *pkgs):
|
||||||
|
"""Generate a command suitable for invoking either repo-add or
|
||||||
|
repo-remove.
|
||||||
|
|
||||||
|
:param operation: run either repo-add or repo-remove
|
||||||
|
:type operation: str
|
||||||
|
:param db: the database file to operate on
|
||||||
|
:type db: str, bytes, or path-like object
|
||||||
|
:param opts: extra options to pass to repo-add
|
||||||
|
:type opts: list
|
||||||
|
:param pkgs: these arguments depend on whether the operation is
|
||||||
|
an add or remove.
|
||||||
|
If operation is 'add', then pkgs is all of the paths of the
|
||||||
|
package files to add to the database. If operation is 'remove',
|
||||||
|
then pkgs is the name of the packages to remove from the database.
|
||||||
|
:type pkgs: any iterable
|
||||||
|
:returns: list of command-line arguments suitable for passing to
|
||||||
|
subprocess.run()
|
||||||
|
:rtype: list
|
||||||
|
:raises: ValueError if operation was invalid
|
||||||
|
"""
|
||||||
|
if not operation == 'add' or operation == 'remove':
|
||||||
|
raise ValueError('Invalid operation was raised')
|
||||||
|
|
||||||
|
cmd = [f"/usr/bin/repo-{operation}"]
|
||||||
|
|
||||||
|
if opts is not None:
|
||||||
|
cmd.extend(opts)
|
||||||
|
|
||||||
|
cmd.append(db)
|
||||||
|
cmd.extend(pkgs)
|
||||||
|
|
||||||
|
return cmd
|
||||||
|
|
||||||
|
|
||||||
def repo_add(operation, db, *pkgs, opts=None):
|
def repo_add(operation, db, *pkgs, opts=None):
|
||||||
"""Run repo-add.
|
"""Run repo-add.
|
||||||
|
|
||||||
@ -43,29 +77,21 @@ def repo_add(operation, db, *pkgs, opts=None):
|
|||||||
"""
|
"""
|
||||||
if operation == 'add':
|
if operation == 'add':
|
||||||
syslog.info('Adding packages to database')
|
syslog.info('Adding packages to database')
|
||||||
cmd = [REPO_ADD_CMD]
|
|
||||||
else:
|
else:
|
||||||
syslog.info('Removing packages from database')
|
syslog.info('Removing packages from database')
|
||||||
cmd = [REPO_REMOVE_CMD]
|
|
||||||
|
|
||||||
syslog.debug(f"Database: {db}")
|
syslog.debug(f"Database: {db}")
|
||||||
syslog.debug(f"Options: {opts}")
|
syslog.debug(f"Options: {opts}")
|
||||||
syslog.debug(f"Packages: {pkgs}")
|
syslog.debug(f"Packages: {pkgs}")
|
||||||
|
|
||||||
if opts is not None:
|
|
||||||
cmd.extend(opts)
|
|
||||||
|
|
||||||
cmd.append(db)
|
|
||||||
cmd.extend(pkgs)
|
|
||||||
syslog.debug(f"Final repo-add command: {cmd}")
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
cmd = gen_cmdline(operation, db, opts, *pkgs)
|
||||||
process = subprocess.run(cmd,
|
process = subprocess.run(cmd,
|
||||||
check=True,
|
check=True,
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True)
|
text=True)
|
||||||
except RepoAddError:
|
except subprocess.CalledProcessError:
|
||||||
raise RepoAddError(process.stderr)
|
raise RepoAddError(process.stderr)
|
||||||
else:
|
else:
|
||||||
syslog.debug(process.stdout)
|
syslog.debug(process.stdout)
|
||||||
syslog.info('Finished adding packages to database')
|
syslog.info('Database operation complete')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user