Hello community,
here is the log from the commit of package osc for openSUSE:Factory checked in at 2013-02-25 20:39:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/osc (Old)
and /work/SRC/openSUSE:Factory/.osc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osc", Maintainer is "adrian@suse.com"
Changes:
--------
--- /work/SRC/openSUSE:Factory/osc/osc.changes 2013-02-01 09:49:26.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.osc.new/osc.changes 2013-02-25 20:39:43.000000000 +0100
@@ -2 +2,14 @@
-Thu Jan 31 15:45:58 UTC 2013 - adrian@suse.com
+Mon Feb 25 14:41:27 UTC 2013 - adrian@suse.de
+
+- update to 0.139.0:
+ - bugfixes for owner search
+ - support generic emulator virtualization
+ - added "--host" argument to "osc build" (used to perform the build on a remote host)
+ - "search --maintained" is obsolete. Abort on usage.
+ - "maintainer --user" support to search for all official maintained instance for given user or group
+ - added support to abort a commit after displaying a default commit message in $EDITOR. As a result
+ other commands like "submitrequest" will also ask if the user wants to proceed if the default
+ comment/message wasn't changed.
+
+-------------------------------------------------------------------
+Thu Jan 31 15:45:58 UTC 2013 - adrian@suse.de
Old:
----
osc-0.138.0.tar.gz
New:
----
osc-0.139.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ osc.spec ++++++
--- /var/tmp/diff_new_pack.Iz2uE3/_old 2013-02-25 20:39:45.000000000 +0100
+++ /var/tmp/diff_new_pack.Iz2uE3/_new 2013-02-25 20:39:45.000000000 +0100
@@ -17,7 +17,7 @@
Name: osc
-Version: 0.138.0
+Version: 0.139.0
Release: 0
Summary: openSUSE Build Service Commander
License: GPL-2.0+
++++++ _service ++++++
--- /var/tmp/diff_new_pack.Iz2uE3/_old 2013-02-25 20:39:46.000000000 +0100
+++ /var/tmp/diff_new_pack.Iz2uE3/_new 2013-02-25 20:39:46.000000000 +0100
@@ -1,6 +1,6 @@
<services>
<service name="tar_scm" mode="disabled">
- <param name="version">0.138.0</param>
+ <param name="version">0.139.0</param>
<param name="url">git://github.com/openSUSE/osc.git</param>
<param name="scm">git</param>
</service>
++++++ osc-0.138.0.tar.gz -> osc-0.139.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/NEWS new/osc-0.139.0/NEWS
--- old/osc-0.138.0/NEWS 2013-01-31 16:46:36.000000000 +0100
+++ new/osc-0.139.0/NEWS 2013-02-25 15:41:16.000000000 +0100
@@ -1,3 +1,12 @@
+0.139
+ - support generic emulator virtualization
+ - added "--host" argument to "osc build" (used to perform the build on a remote host)
+ - "search --maintained" is obsolete. Abort on usage.
+ - "maintainer --user" support to search for all official maintained instance for given user or group
+ - added support to abort a commit after displaying a default commit message in $EDITOR. As a result
+ other commands like "submitrequest" will also ask if the user wants to proceed if the default
+ comment/message wasn't changed.
+
0.138
- add support to remove repositories recursively (mostly only usefull for admins)
- submitrequest: old not anymore used maintenance code got removed. It is possible now
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/build.py new/osc-0.139.0/osc/build.py
--- old/osc-0.138.0/osc/build.py 2013-01-31 16:46:36.000000000 +0100
+++ new/osc-0.139.0/osc/build.py 2013-02-25 15:41:16.000000000 +0100
@@ -41,10 +41,11 @@
'ppc', 'ppc64',
's390', 's390x',
'sparc64v', 'sparcv9v', 'sparcv9', 'sparcv8', 'sparc',
- 'hppa'
+ 'hppa',
]
can_also_build = {
+ 'aarch64':['aarch64'],
'armv4l': [ 'armv4l' ],
'armv6l' :[ 'armv4l', 'armv5l', 'armv6l', 'armv5el', 'armv6el' ],
'armv7l' :[ 'armv4l', 'armv5l', 'armv6l', 'armv7l', 'armv5el', 'armv6el', 'armv7el' ],
@@ -413,6 +414,8 @@
buildargs.append('--changelog')
if opts.root:
build_root = opts.root
+ if opts.target:
+ buildargs.append('--target=%s' % opts.target)
if opts.jobs:
buildargs.append('--jobs=%s' % opts.jobs)
elif config['build-jobs'] > 1:
@@ -651,7 +654,7 @@
elif hostarch != bi.buildarch:
if not bi.buildarch in can_also_build.get(hostarch, []):
# OBSOLETE: qemu_can_build should not be needed anymore since OBS 2.3
- if not bi.buildarch in qemu_can_build:
+ if vm_type != "emulator" and not bi.buildarch in qemu_can_build:
print >>sys.stderr, 'Error: hostarch \'%s\' cannot build \'%s\'.' % (hostarch, bi.buildarch)
return 1
print >>sys.stderr, 'WARNING: It is guessed to build on hostarch \'%s\' for \'%s\' via QEMU.' % (hostarch, bi.buildarch)
@@ -812,17 +815,16 @@
else:
os.symlink(path + "/" + filename, tffn)
- if bi.pacsuffix == 'rpm':
+ if vm_type == "xen" or vm_type == "kvm" or vm_type == "lxc":
+ print 'Skipping verification of package signatures due to secure VM build'
+ elif bi.pacsuffix == 'rpm':
if opts.no_verify:
print 'Skipping verification of package signatures'
else:
print 'Verifying integrity of cached packages'
verify_pacs(bi)
-
elif bi.pacsuffix == 'deb':
- if vm_type == "xen" or vm_type == "kvm" or vm_type == "lxc":
- print 'Skipping verification of package signatures due to secure VM build'
- elif opts.no_verify or opts.noinit:
+ if opts.no_verify or opts.noinit:
print 'Skipping verification of package signatures'
else:
print 'WARNING: deb packages get not verified, they can compromise your system !'
@@ -865,7 +867,7 @@
my_build_swap = build_root + '/swap'
vm_options = [ '--vm-type=%s'%vm_type ]
- if vm_type != 'lxc':
+ if vm_type != 'lxc' and vm_type != 'emulator':
vm_options += [ '--vm-disk=' + my_build_device ]
vm_options += [ '--vm-swap=' + my_build_swap ]
vm_options += [ '--logfile=%s/.build.log' % build_root ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/commandline.py new/osc-0.139.0/osc/commandline.py
--- old/osc-0.138.0/osc/commandline.py 2013-01-31 16:46:36.000000000 +0100
+++ new/osc-0.139.0/osc/commandline.py 2013-02-25 15:41:16.000000000 +0100
@@ -9,6 +9,7 @@
import oscerr
import sys
import time
+import urlparse
from optparse import SUPPRESS_HELP
@@ -913,11 +914,11 @@
# loop via all packages for checking their state
for p in meta_get_packagelist(apiurl, project):
- print "XXX", p
# get _link info from server, that knows about the local state ...
u = makeurl(apiurl, ['source', project, p])
f = http_GET(u)
root = ET.parse(f).getroot()
+ target_project = None
if len(args) == 1:
target_project = args[0]
linkinfo = root.find('linkinfo')
@@ -968,7 +969,7 @@
if actionxml != "":
xml = """<request> %s <state name="new"/> <description>%s</description> </request> """ % \
(actionxml, cgi.escape(opts.message or ""))
- u = makeurl(apiurl, ['request'], query='cmd=create')
+ u = makeurl(apiurl, ['request'], query='cmd=create&addrevision=1')
f = http_POST(u, data=xml)
root = ET.parse(f).getroot()
@@ -1089,7 +1090,7 @@
rdiff = None
if opts.diff or not opts.message:
try:
- rdiff = 'old: %s/%s\nnew: %s/%s rev %s' %(dst_project, dst_package, src_project, src_package, rev)
+ rdiff = 'old: %s/%s\nnew: %s/%s rev %s\n' %(dst_project, dst_package, src_project, src_package, rev)
rdiff += server_diff(apiurl,
dst_project, dst_package, None,
src_project, src_package, rev, True)
@@ -1293,7 +1294,7 @@
rdiff = None
if opts.diff:
try:
- rdiff = 'old: %s/%s\nnew: %s/%s' %(dst_project, dst_package, src_project, src_package)
+ rdiff = 'old: %s/%s\nnew: %s/%s\n' %(dst_project, dst_package, src_project, src_package)
rdiff += server_diff(apiurl,
dst_project, dst_package, opts.revision,
src_project, src_package, None, True)
@@ -3254,7 +3255,7 @@
for pac in pacs:
if not rev2:
for i in pac.get_diff(rev1):
- sys.stdout.write(''.join(i))
+ diff += ''.join(i)
else:
diff += server_diff_noex(pac.apiurl, pac.prjname, pac.name, rev1,
pac.prjname, pac.name, rev2, not opts.plain, opts.missingok)
@@ -5089,7 +5090,7 @@
print row
- def parse_repoarchdescr(self, args, noinit = False, alternative_project = None, ignore_descr = False):
+ def parse_repoarchdescr(self, args, noinit = False, alternative_project = None, ignore_descr = False, vm_type = None):
"""helper to parse the repo, arch and build description from args"""
import osc.build
import glob
@@ -5099,10 +5100,10 @@
if arg.endswith('.spec') or arg.endswith('.dsc') or arg.endswith('.kiwi') or arg == 'PKGBUILD':
arg_descr = arg
else:
- if (arg in osc.build.can_also_build.get(osc.build.hostarch, [])
- or arg in osc.build.qemu_can_build
- or arg in osc.build.hostarch) and arg_arch is None:
+ if osc.build.can_also_build.get(arg) != None and arg_arch is None:
arg_arch = arg
+ if not (arg in osc.build.can_also_build.get(osc.build.hostarch, []) or arg in osc.build.hostarch):
+ print "WARNING: native compile is not possible, an emulator must be configured!"
elif not arg_repository:
arg_repository = arg
else:
@@ -5244,6 +5245,8 @@
help='use hard links instead of a deep copied source')
@cmdln.option('--vm-type', metavar='TYPE',
help='use VM type TYPE (e.g. kvm)')
+ @cmdln.option('--target', metavar='TARGET',
+ help='define target plattform')
@cmdln.option('--alternative-project', metavar='PROJECT',
help='specify the build target project')
@cmdln.option('-d', '--debuginfo', action='store_true',
@@ -5264,6 +5267,8 @@
help='take previous build from DIR (special values: _self, _link)')
@cmdln.option('--shell', action='store_true',
help=SUPPRESS_HELP)
+ @cmdln.option('--host', metavar='HOST',
+ help='perform the build on a remote server - user@server:~/remote/directory')
def do_build(self, subcmd, opts, *args):
"""${cmd_name}: Build a package on your local machine
@@ -5320,7 +5325,7 @@
if len(args) > 3:
raise oscerr.WrongArgs('Too many arguments')
- args = self.parse_repoarchdescr(args, opts.noinit or opts.offline, opts.alternative_project)
+ args = self.parse_repoarchdescr(args, opts.noinit or opts.offline, opts.alternative_project, False, opts.vm_type)
# check for source services
r = None
@@ -5362,7 +5367,142 @@
raise oscerr.WrongOptions('--offline and --preload are mutually exclusive')
print 'Building %s for %s/%s' % (args[2], args[0], args[1])
- return osc.build.main(self.get_api_url(), opts, args)
+ if not opts.host:
+ return osc.build.main(self.get_api_url(), opts, args)
+ else:
+ return self._do_rbuild(subcmd, opts, *args)
+
+ def _do_rbuild(self, subcmd, opts, *args):
+
+ # drop the --argument, value tuple from the list
+ def drop_arg2(lst, name):
+ if not name: return lst
+ while name in lst:
+ i = lst.index(name)
+ lst.pop(i+1)
+ lst.pop(i)
+ return lst
+
+ # change the local directory to more suitable remote one in hostargs
+ # and perform the rsync to such location as well
+ def rsync_dirs_2host(hostargs, short_name, long_name, dirs):
+
+ drop_arg2(hostargs, short_name)
+ drop_arg2(hostargs, long_name)
+
+ for pdir in dirs:
+ # drop the last '/' from pdir name - this is because
+ # rsync foo remote:/bar create /bar/foo on remote machine
+ # rsync foo/ remote:/bar copy the content of foo in the /bar
+ if pdir[-1:] == os.path.sep:
+ pdir = pdir[:-1]
+
+ hostprefer = os.path.join(
+ hostpath,
+ basename,
+ "%s__" % (long_name.replace('-','_')),
+ os.path.basename(os.path.abspath(pdir)))
+ hostargs.append(long_name)
+ hostargs.append(hostprefer)
+
+ rsync_prefer_cmd = ['rsync', '-az', '-delete', '-e', 'ssh',
+ pdir,
+ "%s:%s" % (hostname, os.path.dirname(hostprefer))]
+ print 'Run: %s' % " ".join(rsync_prefer_cmd)
+ ret = subprocess.call(rsync_prefer_cmd)
+ if ret != 0:
+ return ret
+
+ return 0
+
+
+ cwd = os.getcwdu()
+ basename = os.path.basename(cwd)
+ if not ':' in opts.host:
+ hostname = opts.host
+ hostpath = "~/"
+ else:
+ hostname, hostpath = opts.host.split(':', 1)
+
+ # arguments for build: use all arguments behind build and drop --host 'HOST'
+ hostargs = sys.argv[sys.argv.index(subcmd)+1:]
+ drop_arg2(hostargs, '--host')
+
+ # global arguments: use first '-' up to subcmd
+ gi = 0
+ for i, a in enumerate(sys.argv):
+ if a == subcmd:
+ break
+ if a[0] == '-':
+ gi = i
+ break
+
+ if gi:
+ hostglobalargs = sys.argv[gi : sys.argv.index(subcmd)+1]
+ else:
+ hostglobalargs = (subcmd, )
+
+ # keep-pkgs
+ hostkeep = None
+ if opts.keep_pkgs:
+ drop_arg2(hostargs, '-k')
+ drop_arg2(hostargs, '--keep-pkgs')
+ hostkeep = os.path.join(
+ hostpath,
+ basename,
+ "__keep_pkgs__",
+ "") # <--- this adds last '/', thus triggers correct rsync behavior
+ hostargs.append('--keep-pkgs')
+ hostargs.append(hostkeep)
+
+ ### run all commands ###
+ # 1.) rsync sources
+ rsync_source_cmd = ['rsync', '-az', '-delete', '-e', 'ssh', cwd, "%s:%s" % (hostname, hostpath)]
+ print 'Run: %s' % " ".join(rsync_source_cmd)
+ ret = subprocess.call(rsync_source_cmd)
+ if ret != 0:
+ return ret
+
+ # 2.) rsync prefer-pkgs dirs, overlay and rsyns-src
+ if opts.prefer_pkgs:
+ ret = rsync_dirs_2host(hostargs, '-p', '--prefer-pkgs', opts.prefer_pkgs)
+ if ret != 0:
+ return ret
+
+ for arg, long_name in ((opts.rsyncsrc, '--rsync-src'), (opts.overlay, '--overlay')):
+ if not arg: continue
+ ret = rsync_dirs_2host(hostargs, None, long_name, (arg, ))
+ if ret != 0:
+ return ret
+
+ # 3.) call osc build
+ osc_cmd = "osc"
+ for var in ('OSC_SU_WRAPPER', 'OSC_BUILD_ROOT', 'OSC_PACKAGECACHEDIR'):
+ if os.getenv(var):
+ osc_cmd = "%s=%s %s" % (var, os.getenv(var), osc_cmd)
+
+ ssh_cmd = \
+ ['ssh', '-t', hostname,
+ "cd %(remote_dir)s; %(osc_cmd)s %(global_args)s %(local_args)s" % dict(
+ remote_dir = os.path.join(hostpath, basename),
+ osc_cmd = osc_cmd,
+ global_args = " ".join(hostglobalargs),
+ local_args = " ".join(hostargs))
+ ]
+ print 'Run: %s' % " ".join(ssh_cmd)
+ build_ret = subprocess.call(ssh_cmd)
+ if build_ret != 0:
+ return build_ret
+
+ # 4.) get keep-pkgs back
+ if opts.keep_pkgs:
+ ret = rsync_keep_cmd = ['rsync', '-az', '-e', 'ssh', "%s:%s" % (hostname, hostkeep), opts.keep_pkgs]
+ print 'Run: %s' % " ".join(rsync_keep_cmd)
+ ret = subprocess.call(rsync_keep_cmd)
+ if ret != 0:
+ return ret
+
+ return build_ret
@cmdln.option('--local-package', action='store_true',
@@ -5404,8 +5544,9 @@
package = os.path.splitext(descr)[0]
else:
package = store_read_package('.')
+ apihost = urlparse.urlsplit(self.get_api_url())[1]
buildroot = os.environ.get('OSC_BUILD_ROOT', conf.config['build-root']) \
- % {'repo': repository, 'arch': arch, 'project': project, 'package': package}
+ % {'repo': repository, 'arch': arch, 'project': project, 'package': package, 'apihost': apihost}
if not os.path.isdir(buildroot):
raise oscerr.OscIOError(None, '\'%s\' is not a directory' % buildroot)
@@ -5417,7 +5558,7 @@
else:
cmd = [sucmd, 'chroot', buildroot, 'su', '-', user]
if suargs:
- cmd.insert(1, suargs)
+ cmd[1:1] = suargs.split()
print 'running: %s' % ' '.join(cmd)
os.execvp(sucmd, cmd)
@@ -5970,7 +6111,7 @@
"""${cmd_name}: show waiting work, packages, projects or requests involving yourself
Examples:
- # list all tasks where it is expected to work on
+ # list all open tasks for me
osc ${cmd_name} [work]
# list packages where I am bugowner
osc ${cmd_name} pkg -b
@@ -6208,7 +6349,7 @@
@cmdln.option('-m', '--maintainer', action='store_true',
help='as -i, but only maintainer')
@cmdln.option('--maintained', action='store_true',
- help='limit search results to packages with maintained attribute set.')
+ help='OBSOLETE: please use maintained command instead.')
@cmdln.option('-M', '--mine', action='store_true',
help='shorthand for --bugowner --package')
@cmdln.option('--csv', action='store_true',
@@ -6251,6 +6392,9 @@
else:
search_term = args[0]
+ if opts.maintained:
+ raise oscerr.WrongOptions('The --maintained option is not anymore supported. Please use the maintained command instead.')
+
# XXX: is it a good idea to make this the default?
# support perl symbols:
if re.match('^perl\(\w+(::\w+)*\)$', search_term):
@@ -6625,6 +6769,10 @@
help='Set the bugowner to specified person')
@cmdln.option('-S', '--set-bugowner-request', metavar='user',
help='Set the bugowner to specified person via a request')
+ @cmdln.option('-U', '--user', metavar='USER',
+ help='All official maintained instances for the specified USER')
+ @cmdln.option('-G', '--group', metavar='GROUP',
+ help='All official maintained instances for the specified GROUP')
@cmdln.option('-d', '--delete', metavar='user',
help='delete a maintainer/bugowner (can be specified via --role)')
@cmdln.option('-r', '--role', metavar='role', action='append', default=[],
@@ -6633,8 +6781,13 @@
def do_maintainer(self, subcmd, opts, *args):
"""${cmd_name}: Show maintainers of a project/package
- osc maintainer <options>
+ # Search for official maintained sources in OBS instance
osc maintainer BINARY <options>
+ osc maintainer -U <user> <options>
+ osc maintainer -G <group> <options>
+
+ # Lookup in specific containers
+ osc maintainer <options>
osc maintainer PRJ <options>
osc maintainer PRJ PKG <options>
@@ -6656,11 +6809,14 @@
roles = [ 'bugowner', 'maintainer' ]
if len(opts.role):
roles = opts.role
- if opts.bugowner_only or opts.bugowner or opts.set_bugowner or opts.set_bugowner_request or subcmd == 'bugowner':
+ if opts.bugowner_only or opts.bugowner or subcmd == 'bugowner':
roles = [ 'bugowner' ]
args = slash_split(args)
- if len(args) == 0:
+ if opts.user or opts.group:
+ if len(args) != 0:
+ raise oscerr.WrongArgs('Either search for user or for packages.')
+ elif len(args) == 0:
try:
pac = store_read_package('.')
except oscerr.NoWorkingCopy:
@@ -6678,7 +6834,7 @@
apiurl = self.get_api_url()
# Try the OBS 2.4 way first.
- if pac==None and binary:
+ if binary or opts.user or opts.group:
limit=None
if opts.all:
limit=0
@@ -6686,7 +6842,14 @@
if filterroles == [ 'bugowner', 'maintainer' ]:
# use server side configured default
filterroles=None
- searchresult = owner(apiurl, binary, usefilter=filterroles, devel=None, limit=limit)
+ if binary:
+ searchresult = owner(apiurl, binary, "binary", usefilter=filterroles, devel=None, limit=limit)
+ elif opts.user:
+ searchresult = owner(apiurl, opts.user, "user", usefilter=filterroles, devel=None)
+ elif opts.group:
+ searchresult = owner(apiurl, opts.group, "group", usefilter=filterroles, devel=None)
+ else:
+ raise oscerr.WrongArgs('osc bug, no valid search criteria')
if opts.add:
if searchresult:
@@ -6726,7 +6889,26 @@
else:
for role in roles:
- setBugowner(apiurl, prj, pac, opts.delete, role)
+ try:
+ setBugowner(apiurl, prj, pac, opts.delete, role)
+ except urllib2.HTTPError, e:
+ if e.code == 403:
+ print "No write permission in", result.get('project'),
+ if result.get('package'):
+ print "/", result.get('package'),
+ print
+ repl = raw_input('\nCreating a request instead? (y/n) ')
+ if repl.lower() == 'y':
+ opts.set_bugowner_request = opts.set_bugowner
+ opts.set_bugowner = None
+ break
+
+ if opts.set_bugowner_request:
+ for role in roles:
+ args = [bugowner, prj]
+ if pac:
+ args = args + [pac]
+ requestactionsxml += self._set_bugowner(args,opts)
if requestactionsxml != "":
message = edit_message()
@@ -6772,7 +6954,7 @@
metaroot = ET.fromstring(''.join(m))
else:
# fallback to project lookup for old servers
- if not searchresult:
+ if prj and not searchresult:
m = show_project_meta(apiurl, prj)
metaroot = ET.fromstring(''.join(m))
@@ -6806,38 +6988,40 @@
print "Defined in package: %s/%s " %(definingproject, definingpackage)
else:
print "Defined in project: ", definingproject
-
- for role in roles:
- if opts.bugowner and not len(maintainers.get(role, [])):
- role = 'maintainer'
- if pac:
- print "%s%s of %s/%s : " %(indent, role, prj, pac)
- else:
- print "%s%s of %s : " %(indent, role, prj)
- if opts.email:
- emails = []
- for maintainer in maintainers.get(role, []):
- user = get_user_data(apiurl, maintainer, 'email')
- if len(user):
- emails.append(''.join(user))
- print indent,
- print ', '.join(emails) or '-'
- elif opts.verbose:
- userdata = []
- for maintainer in maintainers.get(role, []):
- user = get_user_data(apiurl, maintainer, 'login', 'realname', 'email')
- userdata.append(user[0])
- if user[1] != '-':
- userdata.append("%s <%s>"%(user[1], user[2]))
- else:
- userdata.append(user[2])
- for row in build_table(2, userdata, None, 3):
+
+ if prj:
+ # not for user/group search
+ for role in roles:
+ if opts.bugowner and not len(maintainers.get(role, [])):
+ role = 'maintainer'
+ if pac:
+ print "%s%s of %s/%s : " %(indent, role, prj, pac)
+ else:
+ print "%s%s of %s : " %(indent, role, prj)
+ if opts.email:
+ emails = []
+ for maintainer in maintainers.get(role, []):
+ user = get_user_data(apiurl, maintainer, 'email')
+ if len(user):
+ emails.append(''.join(user))
print indent,
- print row
- else:
- print indent,
- print ', '.join(maintainers.get(role, [])) or '-'
- print
+ print ', '.join(emails) or '-'
+ elif opts.verbose:
+ userdata = []
+ for maintainer in maintainers.get(role, []):
+ user = get_user_data(apiurl, maintainer, 'login', 'realname', 'email')
+ userdata.append(user[0])
+ if user[1] != '-':
+ userdata.append("%s <%s>"%(user[1], user[2]))
+ else:
+ userdata.append(user[2])
+ for row in build_table(2, userdata, None, 3):
+ print indent,
+ print row
+ else:
+ print indent,
+ print ', '.join(maintainers.get(role, [])) or '-'
+ print
@cmdln.alias('who')
@cmdln.alias('user')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/conf.py new/osc-0.139.0/osc/conf.py
--- old/osc-0.138.0/osc/conf.py 2013-01-31 16:46:36.000000000 +0100
+++ new/osc-0.139.0/osc/conf.py 2013-02-25 15:41:16.000000000 +0100
@@ -496,6 +496,8 @@
elif os.path.isdir(i):
capath = i
break
+ if not cafile and not capath:
+ raise Exception('No CA certificates found')
ctx = oscssl.mySSLContext()
if ctx.load_verify_locations(capath=capath, cafile=cafile) != 1:
raise Exception('No CA certificates found')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/core.py new/osc-0.139.0/osc/core.py
--- old/osc-0.138.0/osc/core.py 2013-01-31 16:46:36.000000000 +0100
+++ new/osc-0.139.0/osc/core.py 2013-02-25 15:41:16.000000000 +0100
@@ -3,7 +3,7 @@
# and distributed under the terms of the GNU General Public Licence,
# either version 2, or version 3 (at your option).
-__version__ = '0.138'
+__version__ = '0.139'
# __store_version__ is to be incremented when the format of the working copy
# "store" changes in an incompatible way. Please add any needed migration
@@ -765,7 +765,7 @@
upstream_del = [ pac for pac in self.pacs_have if not pac in self.pacs_available and self.get_state(pac) != 'A']
for pac in upstream_del:
- if self.status(pac) != '!' or pac in self.pacs_broken:
+ if self.status(pac) != '!':
p = Package(os.path.join(self.dir, pac))
self.delPackage(p, force = True)
delete_storedir(p.storedir)
@@ -773,7 +773,7 @@
os.rmdir(pac)
except:
pass
- self.pac_root.remove(self.get_package_node(p.name))
+ self.pac_root.remove(self.get_package_node(pac))
self.pacs_have.remove(pac)
for pac in self.pacs_have:
@@ -3481,12 +3481,13 @@
while 1:
run_editor(filename)
msg = open(filename).read().split(delim)[0].rstrip()
-
- if len(msg):
+ if msg and template != msg:
break
else:
- ri = raw_input('Log message not specified\n'
- 'a)bort, c)ontinue, e)dit: ')
+ reason = 'Log message not specified'
+ if template and template == msg:
+ reason = 'Log template was not changed'
+ ri = raw_input('%s\na)bort, c)ontinue, e)dit: ' % reason)
if ri in 'aA':
raise oscerr.UserAbort()
elif ri in 'cC':
@@ -5302,10 +5303,12 @@
et = int(node.get('endtime'))
endtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(et))
waittm = time.gmtime(et-st)
- if waittm.tm_hour:
- waitbuild = "%2dh %2dm %2ds" % (waittm.tm_hour, waittm.tm_min, waittm.tm_sec)
+ if waittm.tm_mday>1:
+ waitbuild = "%1dd %2dh %2dm %2ds" % (waittm.tm_mday-1, waittm.tm_hour, waittm.tm_min, waittm.tm_sec)
+ elif waittm.tm_hour:
+ waitbuild = " %2dh %2dm %2ds" % (waittm.tm_hour, waittm.tm_min, waittm.tm_sec)
else:
- waitbuild = " %2dm %2ds" % (waittm.tm_min, waittm.tm_sec)
+ waitbuild = " %2dm %2ds" % (waittm.tm_min, waittm.tm_sec)
if format == 'csv':
print '%s|%s|%s|%s|%s|%s' % (endtime, package, reason, code, waitbuild, worker)
@@ -5732,12 +5735,12 @@
res[urlpath] = ET.parse(f).getroot()
return res
-def owner(apiurl, binary, attribute=None, project=None, usefilter=None, devel=None, limit=None):
+def owner(apiurl, binary, mode="binary", attribute=None, project=None, usefilter=None, devel=None, limit=None):
"""
Perform a binary package owner search. This is supported since OBS 2.4.
"""
# find default project, if not specified
- query = { 'binary': binary }
+ query = { mode: binary }
if attribute:
query['attribute'] = attribute
if project:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/setup.py new/osc-0.139.0/setup.py
--- old/osc-0.138.0/setup.py 2013-01-31 16:46:36.000000000 +0100
+++ new/osc-0.139.0/setup.py 2013-02-25 15:41:16.000000000 +0100
@@ -57,7 +57,7 @@
author = 'openSUSE project',
author_email = 'opensuse-buildservice@opensuse.org',
license = 'GPL',
- platforms = ['Linux', 'Mac OSX', 'Windows XP/2000/NT', 'Windows 95/98/ME'],
+ platforms = ['Linux', 'Mac OSX', 'Windows XP/2000/NT', 'Windows 95/98/ME', 'FreeBSD'],
keywords = ['openSUSE', 'SUSE', 'RPM', 'build', 'buildservice'],
url = 'http://en.opensuse.org/openSUSE:OSC',
download_url = 'https://github.com/openSUSE/osc',
++++++ osc.dsc ++++++
--- /var/tmp/diff_new_pack.Iz2uE3/_old 2013-02-25 20:39:46.000000000 +0100
+++ /var/tmp/diff_new_pack.Iz2uE3/_new 2013-02-25 20:39:46.000000000 +0100
@@ -1,6 +1,6 @@
Format: 1.0
Source: osc
-Version: 0.138.0
+Version: 0.139.0
Binary: osc
Maintainer: Adrian Schroeter