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 "adr...@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 - adr...@suse.com
+Mon Feb 25 14:41:27 UTC 2013 - adr...@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 - adr...@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-buildserv...@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 <adr...@suse.de>
 Architecture: any

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to