qvm-template: Add --refresh option and allow DNF cache to be used.

This commit is contained in:
WillyPillow 2020-07-29 19:47:48 +08:00
parent 8aa9ab9e89
commit f960ed4726

View File

@ -55,6 +55,8 @@ parser.add_argument('--repoid', action='append',
help='Enable just specific repositories.') help='Enable just specific repositories.')
parser.add_argument('--releasever', default=qubes_release(), parser.add_argument('--releasever', default=qubes_release(),
help='Override distro release version.') help='Override distro release version.')
parser.add_argument('--refresh', action='store_true',
help='Set repository metadata as expired before running the command.')
parser.add_argument('--cachedir', default=CACHE_DIR, parser.add_argument('--cachedir', default=CACHE_DIR,
help='Override cache directory.') help='Override cache directory.')
# qvm-template install # qvm-template install
@ -271,7 +273,7 @@ def qrexec_popen(args, app, service, stdout=subprocess.PIPE, filter_esc=True):
stdout=stdout, stdout=stdout,
stderr=subprocess.PIPE) stderr=subprocess.PIPE)
def qrexec_payload(args, app, spec): def qrexec_payload(args, app, spec, refresh):
# TODO: Support for force-refresh # TODO: Support for force-refresh
_ = app # unused _ = app # unused
@ -290,6 +292,8 @@ def qrexec_payload(args, app, spec):
for repo in args.repoid if args.repoid else []: for repo in args.repoid if args.repoid else []:
check_newline(repo, '--repoid') check_newline(repo, '--repoid')
payload += '--repoid=%s\n' % repo payload += '--repoid=%s\n' % repo
if refresh:
payload += '--refresh\n'
check_newline(args.releasever, '--releasever') check_newline(args.releasever, '--releasever')
payload += '--releasever=%s\n' % args.releasever payload += '--releasever=%s\n' % args.releasever
check_newline(spec, 'template name') check_newline(spec, 'template name')
@ -300,9 +304,9 @@ def qrexec_payload(args, app, spec):
payload += fd.read() + '\n' payload += fd.read() + '\n'
return payload return payload
def qrexec_repoquery(args, app, spec='*'): def qrexec_repoquery(args, app, spec='*', refresh=False):
proc = qrexec_popen(args, app, 'qubes.TemplateSearch') proc = qrexec_popen(args, app, 'qubes.TemplateSearch')
payload = qrexec_payload(args, app, spec) payload = qrexec_payload(args, app, spec, refresh)
stdout, stderr = proc.communicate(payload.encode('UTF-8')) stdout, stderr = proc.communicate(payload.encode('UTF-8'))
stdout = stdout.decode('ASCII') stdout = stdout.decode('ASCII')
if proc.wait() != 0: if proc.wait() != 0:
@ -357,12 +361,12 @@ def qrexec_repoquery(args, app, spec='*'):
" unexpected data format.")) " unexpected data format."))
return result return result
def qrexec_download(args, app, spec, path, dlsize=None): def qrexec_download(args, app, spec, path, dlsize=None, refresh=False):
with open(path, 'wb') as fd: with open(path, 'wb') as fd:
# Don't filter ESCs for binary files # Don't filter ESCs for binary files
proc = qrexec_popen(args, app, 'qubes.TemplateDownload', proc = qrexec_popen(args, app, 'qubes.TemplateDownload',
stdout=fd, filter_esc=False) stdout=fd, filter_esc=False)
payload = qrexec_payload(args, app, spec) payload = qrexec_payload(args, app, spec, refresh)
proc.stdin.write(payload.encode('UTF-8')) proc.stdin.write(payload.encode('UTF-8'))
proc.stdin.close() proc.stdin.close()
with tqdm.tqdm(desc=spec, total=dlsize, unit_scale=True, with tqdm.tqdm(desc=spec, total=dlsize, unit_scale=True,
@ -759,6 +763,9 @@ def main(args=None, app=None):
if app is None: if app is None:
app = qubesadmin.Qubes() app = qubesadmin.Qubes()
if args.refresh:
qrexec_repoquery(args, app, refresh=True)
if args.operation == 'install': if args.operation == 'install':
install(args, app) install(args, app)
elif args.operation == 'reinstall': elif args.operation == 'reinstall':