1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-12-26 09:56:13 +01:00

fixes 413 checkout deleted package

* altered command do_checkout
  new option -D | --deleted. Can only be used with PACKAGE and needs
  -o to work

* what happens:
  core function checkout_deleted_package fetches the file list of the deleted
  package and saves it to given destdir. If destdir is not existent it
  creates the destination directory. Otherwise the files will be written
  in the existing directory.
This commit is contained in:
lethliel 2018-07-19 13:34:49 +02:00
parent b730f880cf
commit 0123bb71db
2 changed files with 39 additions and 8 deletions

View File

@ -4280,6 +4280,8 @@ Please submit there instead, or use --nodevelproject to force direct submission.
@cmdln.option('-e', '--expand-link', action='store_true',
help='if a package is a link, check out the expanded '
'sources (no-op, since this became the default)')
@cmdln.option('-D', '--deleted', action='store_true',
help='checkout an already deleted package. No meta information ')
@cmdln.option('-u', '--unexpand-link', action='store_true',
help='if a package is a link, check out the _link file ' \
'instead of the expanded sources')
@ -4364,6 +4366,12 @@ Please submit there instead, or use --nodevelproject to force direct submission.
project_dir = os.curdir
package = args[0]
if opts.deleted and package:
if not opts.output_dir:
raise oscerr.WrongOptions('-o | --output-dir is needed to get deleted sources')
elif opts.deleted and not package:
raise oscerr.WrongOptions('-D | --deleted can only be used with a package')
rev, dummy = parseRevisionOption(opts.revision)
if rev == None:
rev = "latest"
@ -4379,14 +4387,17 @@ Please submit there instead, or use --nodevelproject to force direct submission.
get_source_file(apiurl, project, package, filename, revision=rev, progress_obj=self.download_progress)
elif package:
if opts.current_dir:
project_dir = None
checkout_package(apiurl, project, package, rev, expand_link=expand_link, \
prj_dir=project_dir, service_files = opts.source_service_files, \
server_service_files=opts.server_side_source_service_files, \
progress_obj=self.download_progress, size_limit=opts.limit_size, \
meta=opts.meta, outdir=opts.output_dir)
print_request_list(apiurl, project, package)
if opts.deleted:
checkout_deleted_package(apiurl, project, package, opts.output_dir)
else:
if opts.current_dir:
project_dir = None
checkout_package(apiurl, project, package, rev, expand_link=expand_link, \
prj_dir=project_dir, service_files = opts.source_service_files, \
server_service_files=opts.server_side_source_service_files, \
progress_obj=self.download_progress, size_limit=opts.limit_size, \
meta=opts.meta, outdir=opts.output_dir)
print_request_list(apiurl, project, package)
elif project:
prj_dir = opts.output_dir if opts.output_dir else project

View File

@ -7763,4 +7763,24 @@ def get_rpmlint_log(apiurl, proj, pkg, repo, arch):
f = http_GET(u)
return f.read()
def checkout_deleted_package(apiurl, proj, pkg, dst):
pl = meta_get_filelist(apiurl, proj, pkg, deleted=True)
query = {}
query['deleted'] = 1
if os.path.isdir(dst):
print('Restoring in existing directory %s' % dst)
else:
print('Creating %s' % dst)
os.makedirs(dst)
for filename in pl:
print('Restoring %s to %s' % (filename, dst))
full_file_path = os.path.join(dst, filename)
u = makeurl(apiurl, ['source', proj, pkg, filename], query=query)
with open(full_file_path, 'wb') as f:
for data in streamfile(u):
f.write(data)
print('done.')
# vim: sw=4 et