qvm-template: Add --refresh option and allow DNF cache to be used.
This commit is contained in:
parent
8aa9ab9e89
commit
f960ed4726
@ -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':
|
||||||
|
Loading…
Reference in New Issue
Block a user