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

- copypac: do a server-side copy (via a single api call) when

used with -s / --server-side. 
  This might be the default behaviour later.
  An option to specify the source revision is missing yet.
This commit is contained in:
Dr. Peter Poeml 2008-03-17 21:46:42 +00:00
parent 8ce42e2dd9
commit 2493ea555a
2 changed files with 39 additions and 17 deletions

View File

@ -565,6 +565,8 @@ class Osc(cmdln.Cmdln):
return 1
aggregate_pac(src_project, src_package, dst_project, dst_package)
@cmdln.option('-s', '--server-side', action='store_true',
help='do a (faster) server-side copy')
@cmdln.option('-t', '--to-apiurl', metavar='URL',
help='URL of destination api server. Default is the source api server.')
def do_copypac(self, subcmd, opts, *args):
@ -607,8 +609,16 @@ class Osc(cmdln.Cmdln):
src_apiurl == dst_apiurl:
print >>sys.stderr, 'Error: source and destination are the same.'
return 1
copy_pac(src_apiurl, src_project, src_package,
dst_apiurl, dst_project, dst_package)
if opts.server_side and src_apiurl != dst_apiurl:
print >>sys.stderr, 'Error: a server-side copy can\'t be done to ' \
'copy from one API host to another.'
return 1
r = copy_pac(src_apiurl, src_project, src_package,
dst_apiurl, dst_project, dst_package,
server_side=opts.server_side)
print r
def do_deletepac(self, subcmd, opts, project, package):

View File

@ -2246,12 +2246,16 @@ def aggregate_pac(src_project, src_package, dst_project, dst_package):
print 'Done.'
def copy_pac(src_apiurl, src_project, src_package,
dst_apiurl, dst_project, dst_package):
"""
create a copy of a package
dst_apiurl, dst_project, dst_package,
server_side = False):
"""
Create a copy of a package.
import tempfile
Copying can be done by downloading the files from one package and commit
them into the other by uploading them (client-side copy) --
or by the server, in a single api call.
"""
src_meta = show_package_meta(src_apiurl, src_project, src_package)
src_meta = replace_pkg_meta(src_meta, dst_package, dst_project)
@ -2260,18 +2264,26 @@ def copy_pac(src_apiurl, src_project, src_package,
u = makeurl(dst_apiurl, ['source', dst_project, dst_package, '_meta'])
http_PUT(u, data=src_meta)
# copy one file after the other
print 'Copying files...'
tmpdir = tempfile.mkdtemp(prefix='osc_copypac', dir='/tmp')
os.chdir(tmpdir)
for n in meta_get_filelist(src_apiurl, src_project, src_package):
print ' ', n
get_source_file(src_apiurl, src_project, src_package, n, targetfilename=n)
u = makeurl(dst_apiurl, ['source', dst_project, dst_package, pathname2url(n)])
http_PUT(u, file = n)
os.unlink(n)
print 'Done.'
os.rmdir(tmpdir)
if server_side:
query = {'cmd': 'copy', 'oproject': src_project, 'opackage': src_package }
u = makeurl(dst_apiurl, ['source', dst_project, dst_package], query=query)
f = http_POST(u)
return f.read()
else:
# copy one file after the other
import tempfile
tmpdir = tempfile.mkdtemp(prefix='osc_copypac', dir='/tmp')
os.chdir(tmpdir)
for n in meta_get_filelist(src_apiurl, src_project, src_package):
print ' ', n
get_source_file(src_apiurl, src_project, src_package, n, targetfilename=n)
u = makeurl(dst_apiurl, ['source', dst_project, dst_package, pathname2url(n)])
http_PUT(u, file = n)
os.unlink(n)
os.rmdir(tmpdir)
return 'Done.'
def delete_package(apiurl, prj, pac):