Hello community,

here is the log from the commit of package osc for openSUSE:Factory checked in 
at 2014-03-01 07:54:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/osc (Old)
 and      /work/SRC/openSUSE:Factory/.osc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "osc"

Changes:
--------
--- /work/SRC/openSUSE:Factory/osc/osc.changes  2014-01-30 11:37:07.000000000 
+0100
+++ /work/SRC/openSUSE:Factory/.osc.new/osc.changes     2014-03-01 
07:54:15.000000000 +0100
@@ -1,0 +2,13 @@
+Fri Feb 28 14:42:30 UTC 2014 - adr...@suse.de
+
+- 0.144.1
+  - fixed "osc meta pkg -e" regression for special package names
+
+-------------------------------------------------------------------
+Thu Feb 27 09:42:55 UTC 2014 - adr...@suse.de
+
+- 0.144.0
+  - allow commiting to package sources from linked projects. osc will ask to 
branch it first.
+  - group support in bugowner and maintainer command
+
+-------------------------------------------------------------------

Old:
----
  osc-0.143.0.tar.gz

New:
----
  osc-0.144.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ osc.spec ++++++
--- /var/tmp/diff_new_pack.0Kn5IC/_old  2014-03-01 07:54:15.000000000 +0100
+++ /var/tmp/diff_new_pack.0Kn5IC/_new  2014-03-01 07:54:15.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           osc
-Version:        0.143.0
+Version:        0.144.1
 Release:        0
 Summary:        openSUSE Build Service Commander
 License:        GPL-2.0+

++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.0Kn5IC/_old  2014-03-01 07:54:15.000000000 +0100
+++ /var/tmp/diff_new_pack.0Kn5IC/_new  2014-03-01 07:54:15.000000000 +0100
@@ -1,5 +1,5 @@
 pkgname=osc
-pkgver=0.143.0
+pkgver=0.144.1
 pkgrel=0
 pkgdesc="Open Build Service client"
 arch=('i686' 'x86_64')
@@ -8,7 +8,7 @@
 groups=('base-devel')
 depends=('python')
 source=(osc-${pkgver}.tar.gz)
-md5sums=('ad1f262fbb93e6a4c132d615648e6bbe')
+md5sums=('d6f0d72f1716d5e57ef02b3ff8a101d8')
 
 package() {
   msg "Installing osc ..."

++++++ _service ++++++
--- /var/tmp/diff_new_pack.0Kn5IC/_old  2014-03-01 07:54:16.000000000 +0100
+++ /var/tmp/diff_new_pack.0Kn5IC/_new  2014-03-01 07:54:16.000000000 +0100
@@ -1,7 +1,7 @@
 <services>
   <service name="tar_scm" mode="disabled">
-    <param name="version">0.143.0</param>
-    <param name="revision">0.143.0</param>
+    <param name="version">0.144.1</param>
+    <param name="revision">0.144.1</param>
     <param name="url">git://github.com/openSUSE/osc.git</param>
     <param name="scm">git</param>
   </service>

++++++ osc-0.143.0.tar.gz -> osc-0.144.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.143.0/NEWS new/osc-0.144.1/NEWS
--- old/osc-0.143.0/NEWS        2014-01-24 10:50:08.000000000 +0100
+++ new/osc-0.144.1/NEWS        2014-02-28 21:51:20.000000000 +0100
@@ -1,3 +1,7 @@
+0.144
+  - allow commiting to package sources from linked projects. osc will ask to 
branch it first.
+  - group support in bugowner and maintainer command
+
 0.143
   - add option to add a auto-accept in future for delete requests (handy for 
admins)
   - many bugfixes:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.143.0/osc/build.py new/osc-0.144.1/osc/build.py
--- old/osc-0.143.0/osc/build.py        2014-01-24 10:50:08.000000000 +0100
+++ new/osc-0.144.1/osc/build.py        2014-02-28 21:51:20.000000000 +0100
@@ -53,6 +53,7 @@
         ]
 
 can_also_build = {
+             'aarch64':['aarch64'], # only needed due to used heuristics in 
build parameter evaluation
              'armv6l' :[                                         'armv4l', 
'armv5l', 'armv6l', 'armv5el', 'armv6el'                       ],
              'armv7l' :[                                         'armv4l', 
'armv5l', 'armv6l', 'armv7l', 'armv5el', 'armv6el', 'armv7el'            ],
              'armv5el':[                                         'armv4l', 
'armv5l', 'armv5el'                                  ], # not existing arch, 
just for compatibility
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.143.0/osc/commandline.py 
new/osc-0.144.1/osc/commandline.py
--- old/osc-0.143.0/osc/commandline.py  2014-01-24 10:50:08.000000000 +0100
+++ new/osc-0.144.1/osc/commandline.py  2014-02-28 21:51:20.000000000 +0100
@@ -731,22 +731,30 @@
             raise oscerr.WrongArgs('Too many arguments.')
 
         apiurl = self.get_api_url()
-        if len(args) < 2:
-            apiurl = store_read_apiurl(os.curdir)
 
-        # specific arguments
+        # Specific arguments
+        #
+        # If project or package arguments missing, assume to work
+        # with project and/or package in current local directory.
         attributepath = []
-        if cmd in ['pkg', 'prj', 'prjconf' ]:
-            if len(args) == 0:
+        if cmd in ['prj', 'prjconf']:
+            if len(args) < 1:
+                apiurl = store_read_apiurl(os.curdir)
                 project = store_read_project(os.curdir)
             else:
                 project = args[0]
 
-            if cmd == 'pkg':
-                if len(args) < 2:
+        elif cmd == 'pkg':
+            if len(args) < 2:
+                apiurl = store_read_apiurl(os.curdir)
+                project = store_read_project(os.curdir)
+                if len(args) < 1:
                     package = store_read_package(os.curdir)
                 else:
-                    package = args[1]
+                    package = args[0]
+            else:
+                project = args[0]
+                package = args[1]
 
         elif cmd == 'attribute':
             project = args[0]
@@ -1554,11 +1562,18 @@
         if len(args) > 2:
             package =  """package="%s" """ % (args[2])
 
-        if get_user_meta(apiurl, user) == None:
-            raise oscerr.WrongArgs('osc: an error occured.')
+        if user.startswith('group:'):
+            group = user.replace('group:','')
+            actionxml = """ <action type="set_bugowner"> <target project="%s" 
%s /> <group name="%s" /> </action> """ % \
+                    (project, package, group)
+            if get_group(apiurl, group) == None:
+                raise oscerr.WrongArgs('osc: an error occured.')
+        else:
+            actionxml = """ <action type="set_bugowner"> <target project="%s" 
%s /> <person name="%s" /> </action> """ % \
+                    (project, package, user)
+            if get_user_meta(apiurl, user) == None:
+                raise oscerr.WrongArgs('osc: an error occured.')
 
-        actionxml = """ <action type="set_bugowner"> <target project="%s" %s 
/> <person name="%s" /> </action> """ % \
-                (project, package, user)
 
         return actionxml
 
@@ -2252,14 +2267,18 @@
                                             review.by_project, 
review.by_package, opts.message or '', supersed=supersedid)
                                     print(r)
                                 except HTTPError as e:
-                                    if review.by_user:
-                                        print('No permission on review by user 
%s' % review.by_user)
-                                    if review.by_group:
-                                        print('No permission on review by 
group %s' % review.by_group)
-                                    if review.by_package:
-                                        print('No permission on review by 
package %s / %s' % (review.by_project, review.by_package))
-                                    elif review.by_project:
-                                        print('No permission on review by 
project %s' % review.by_project)
+                                    body = e.read()
+                                    if e.code in [403]:
+                                       if review.by_user:
+                                           print('No permission on review by 
user %s' % review.by_user)
+                                       if review.by_group:
+                                           print('No permission on review by 
group %s' % review.by_group)
+                                       if review.by_package:
+                                           print('No permission on review by 
package %s / %s' % (review.by_project, review.by_package))
+                                       elif review.by_project:
+                                           print('No permission on review by 
project %s' % review.by_project)
+                                    else:
+                                        print(e, file=sys.stderr)
                         else:
                             print('Request is closed, please reopen the 
request first before changing any reviews.')
             # Change state of entire request
@@ -2285,8 +2304,11 @@
                              reqid, state_map[cmd], opts.message or '', 
supersed=supersedid, force=opts.force)
                     print('Result of change request state: %s' % r)
                 except HTTPError as e:
+                    print(e, file=sys.stderr)
+                    details = e.headers.get('X-Opensuse-Errorcode')
+                    if details:
+                        print(details, file=sys.stderr)
                     if opts.or_revoke:
-                        print(e, file=sys.stderr)
                         body = e.read()
                         if e.code in [ 400, 403, 404, 500 ]:
                             print('Revoking it ...')
@@ -4259,6 +4281,8 @@
     @cmdln.alias('checkin')
     @cmdln.option('-m', '--message', metavar='TEXT',
                   help='specify log message TEXT')
+    @cmdln.option('-n', '--no-message', default=False, action='store_true',
+                  help='do not specify a log message')
     @cmdln.option('-F', '--file', metavar='FILE',
                   help='read log message from FILE, \'-\' denotes standard 
input.')
     @cmdln.option('-f', '--force', default=False, action="store_true",
@@ -4307,9 +4331,20 @@
             if conf.config['do_package_tracking'] and is_project_dir(arg):
                 try:
                     prj = Project(arg)
-                    if not msg:
+                    if not msg and not opts.no_message:
                         msg = edit_message()
-                    prj.commit(msg=msg, 
skip_local_service_run=skip_local_service_run, verbose=opts.verbose)
+
+                    # check any of the packages is a link, if so, as for 
branching
+                    pacs = (Package(os.path.join(prj.dir, pac))
+                            for pac in prj.pacs_have if prj.get_state(pac) == 
' ')
+                    can_branch = False
+                    if any(pac.is_link_to_different_project() for pac in pacs):
+                        repl = raw_input('Some of the packages are links to a 
different project!\n' \
+                                         'Create a local branch before commit? 
(y|N) ')
+                        if repl in('y', 'Y'):
+                            can_branch = True
+
+                    prj.commit(msg=msg, 
skip_local_service_run=skip_local_service_run, verbose=opts.verbose, 
can_branch=can_branch)
                 except oscerr.ExtRuntimeError as e:
                     print("ERROR: service run failed", e, file=sys.stderr)
                     return 1
@@ -4339,13 +4374,22 @@
                     pac.todo.sort()
             for prj_path, packages in prj_paths.items():
                 prj = Project(prj_path)
-                if not msg:
+                if not msg and not opts.no_message:
                     msg = get_commit_msg(prj.absdir, pac_objs[prj_path])
-                prj.commit(packages, msg=msg, files=files, 
skip_local_service_run=skip_local_service_run, verbose=opts.verbose)
+
+                # check any of the packages is a link, if so, as for branching
+                can_branch = False
+                if any(pac.is_link_to_different_project() for pac in pacs):
+                    repl = raw_input('Some of the packages are links to a 
different project!\n' \
+                                     'Create a local branch before commit? 
(y|N) ')
+                    if repl in('y', 'Y'):
+                        can_branch = True
+
+                prj.commit(packages, msg=msg, files=files, 
skip_local_service_run=skip_local_service_run, verbose=opts.verbose, 
can_branch=can_branch)
                 store_unlink_file(prj.absdir, '_commit_msg')
             for pac in single_paths:
                 p = Package(pac)
-                if not msg:
+                if not msg and not opts.no_message:
                     msg = get_commit_msg(p.absdir, [p])
                 p.commit(msg, skip_local_service_run=skip_local_service_run, 
verbose=opts.verbose)
                 store_unlink_file(p.absdir, '_commit_msg')
@@ -4355,7 +4399,7 @@
                 if not p.todo:
                     p.todo = p.filenamelist + p.filenamelist_unvers
                 p.todo.sort()
-                if not msg:
+                if not msg and not opts.no_message:
                     msg = get_commit_msg(p.absdir, [p])
                 p.commit(msg, skip_local_service_run=skip_local_service_run, 
verbose=opts.verbose)
                 store_unlink_file(p.absdir, '_commit_msg')
@@ -4714,7 +4758,7 @@
             opts.show_non_building = None
             opts.show_excluded = None
             self.do_prjresults('prjresults', opts, *args)
-            sys.exit(0)
+            return
 
         if opts.xml and opts.csv:
             raise oscerr.WrongOptions("--xml and --csv are mutual exclusive")
@@ -5436,7 +5480,7 @@
                   help='Skip initialization of build root and start with build 
immediately.')
     @cmdln.option('--nochecks', '--no-checks', action='store_true',
                   help='Do not run post build checks on the resulting 
packages.')
-    @cmdln.option('--no-verify', action='store_true',
+    @cmdln.option('--no-verify', '--noverify', action='store_true',
                   help='Skip signature verification of packages used for 
build. (Global config in .oscrc: no_verify)')
     @cmdln.option('--noservice', '--no-service', action='store_true',
                   help='Skip run of local source services as specified in 
_service file.')
@@ -6999,9 +7043,9 @@
     @cmdln.option('-A', '--all', action='store_true',
                   help='list all found entries not just the first one')
     @cmdln.option('-s', '--set-bugowner', metavar='user',
-                  help='Set the bugowner to specified person')
+                  help='Set the bugowner to specified person (or group via 
group: prefix)')
     @cmdln.option('-S', '--set-bugowner-request', metavar='user',
-                  help='Set the bugowner to specified person via a request')
+                  help='Set the bugowner to specified person via a request (or 
group via group: prefix)')
     @cmdln.option('-U', '--user', metavar='USER',
                         help='All official maintained instances for the 
specified USER')
     @cmdln.option('-G', '--group', metavar='GROUP',
@@ -7040,6 +7084,16 @@
         ${cmd_usage}
         ${cmd_option_list}
         """
+        def get_maintainer_data(apiurl, maintainer, verbose=False):
+            tags = ('email',)
+            if maintainer.startswith('group:'):
+                group = maintainer.replace('group:', '')
+                if verbose:
+                    return [maintainer] + get_group_data(apiurl, group, 
'title', *tags)
+                return get_group_data(apiurl, group, 'email')
+            if verbose:
+                tags = ('login', 'realname', 'email')
+            return get_user_data(apiurl, maintainer, *tags)
 
         binary = None
         prj = None
@@ -7203,7 +7257,7 @@
                             print("Following to the development space: %s/%s" 
% (prj, pac))
                         m = show_package_meta(apiurl, prj, pac)
                         metaroot = ET.fromstring(''.join(m))
-                    if not metaroot.findall('person'):
+                    if not metaroot.findall('person') and not 
metaroot.findall('group'):
                         if opts.verbose:
                             print("No dedicated persons in package defined, 
showing the project persons.")
                         pac = None
@@ -7262,7 +7316,7 @@
                         if opts.email:
                             emails = []
                             for maintainer in maintainers.get(role, []):
-                                user = get_user_data(apiurl, maintainer, 
'email')
+                                user = get_maintainer_data(apiurl, maintainer, 
verbose=False)
                                 if len(user):
                                     emails.append(''.join(user))
                             print(indent, end=' ')
@@ -7270,7 +7324,7 @@
                         elif opts.verbose:
                             userdata = []
                             for maintainer in maintainers.get(role, []):
-                                user = get_user_data(apiurl, maintainer, 
'login', 'realname', 'email')
+                                user = get_maintainer_data(apiurl, maintainer, 
verbose=True)
                                 userdata.append(user[0])
                                 if user[1] !=  '-':
                                     userdata.append("%s <%s>"%(user[1], 
user[2]))
@@ -7795,7 +7849,9 @@
             sys.stdout.write(buf)
 
     @cmdln.option('-m', '--message',
-                  help='add MESSAGE to changes (not open an editor)')
+                  help='add MESSAGE to changes (do not open an editor)')
+    @cmdln.option('-F', '--file', metavar='FILE',
+                  help='read changes message from FILE (do not open an 
editor)')
     @cmdln.option('-e', '--just-edit', action='store_true', default=False,
                   help='just open changes (cannot be used with -m)')
     def do_vc(self, subcmd, opts, *args):
@@ -7819,7 +7875,12 @@
         """
 
         from subprocess import Popen
-
+        if opts.message and opts.file:
+            raise oscerr.WrongOptions('\'--message\' and \'--file\' are 
mutually exclusive')
+        elif opts.message and opts.just_edit:
+            raise oscerr.WrongOptions('\'--message\' and \'--just-edit\' are 
mutually exclusive')
+        elif opts.file and opts.just_edit:
+            raise oscerr.WrongOptions('\'--file\' and \'--just-edit\' are 
mutually exclusive')
         meego_style = False
         if not args:
             import glob, re
@@ -7873,6 +7934,11 @@
             if opts.message:
                 cmd_list.append("-m")
                 cmd_list.append(opts.message)
+            if opts.file:
+                if not os.path.isfile(opts.file):
+                    raise oscerr.WrongOptions('\'%s\': is no file' % opts.file)
+                cmd_list.append("-m")
+                cmd_list.append(open(opts.file).read().strip())
 
             if opts.just_edit:
                 cmd_list.append("-e")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.143.0/osc/core.py new/osc-0.144.1/osc/core.py
--- old/osc-0.143.0/osc/core.py 2014-01-24 10:50:09.000000000 +0100
+++ new/osc-0.144.1/osc/core.py 2014-02-28 21:51:20.000000000 +0100
@@ -5,7 +5,7 @@
 
 from __future__ import print_function
 
-__version__ = '0.142git'
+__version__ = '0.144'
 
 # __store_version__ is to be incremented when the format of the working copy
 # "store" changes in an incompatible way. Please add any needed migration
@@ -860,7 +860,7 @@
             finally:
                 self.write_packages()
 
-    def commit(self, pacs = (), msg = '', files = {}, verbose = False, 
skip_local_service_run = False):
+    def commit(self, pacs = (), msg = '', files = {}, verbose = False, 
skip_local_service_run = False, can_branch=False):
         if len(pacs):
             try:
                 for pac in pacs:
@@ -879,7 +879,7 @@
                         else:
                             p = Package(os.path.join(self.dir, pac))
                         p.todo = todo
-                        p.commit(msg, verbose=verbose, 
skip_local_service_run=skip_local_service_run)
+                        p.commit(msg, verbose=verbose, 
skip_local_service_run=skip_local_service_run, can_branch=can_branch)
                     elif pac in self.pacs_unvers and not 
is_package_dir(os.path.join(self.dir, pac)):
                         print('osc: \'%s\' is not under version control' % pac)
                     elif pac in self.pacs_broken:
@@ -1297,7 +1297,7 @@
             todo.append(n.get('name'))
         return todo
 
-    def commit(self, msg='', verbose=False, skip_local_service_run=False):
+    def commit(self, msg='', verbose=False, skip_local_service_run=False, 
can_branch=False):
         # commit only if the upstream revision is the same as the working 
copy's
         upstream_rev = self.latest_rev()
         if self.rev != upstream_rev:
@@ -1310,6 +1310,21 @@
                 # information (like which service/command failed)
                 raise oscerr.ServiceRuntimeError('A service failed with error: 
%d' % r)
 
+        # check if it is a link, if so, branch the package
+        if self.is_link_to_different_project():
+            if can_branch:
+                orgprj = self.get_local_origin_project()
+                print("Branching {} from {} to {}".format(self.name, orgprj, 
self.prjname))
+                exists, targetprj, targetpkg, srcprj, srcpkg = branch_pkg(
+                    self.apiurl, orgprj, self.name, 
target_project=self.prjname)
+                # update _meta and _files to sychronize the local package
+                # to the new branched one in OBS
+                self.update_local_pacmeta()
+                self.update_local_filesmeta()
+            else:
+                print("{} Not commited because is link to a different 
project".format(self.name))
+                return 1
+
         if not self.todo:
             self.todo = [i for i in self.to_be_added if not i in 
self.filenamelist] + self.filenamelist
 
@@ -1538,6 +1553,21 @@
                 e.set('skipped', 'true')
         return ET.tostring(root, encoding=ET_ENCODING)
 
+    def get_local_meta(self):
+        """Get the local _meta file for the package."""
+        meta = store_read_file(self.absdir, '_meta')
+        return meta
+
+    def get_local_origin_project(self):
+        """Get the originproject from the _meta file."""
+        root = ET.fromstring(self.get_local_meta())
+        return root.get('project')
+
+    def is_link_to_different_project(self):
+        """Check if the package is a link to a different project."""
+        orgprj = self.get_local_origin_project()
+        return self.prjname != orgprj
+
     def update_datastructs(self):
         """
         Update the internal data structures if the local _files
@@ -2554,7 +2584,10 @@
         elif action.type == 'maintenance_incident':
             d['source'] = '%s ->' % action.src_project
             if action.src_package:
-                d['source'] = '%s ->' % prj_pkg_join(action.src_project, 
action.src_package)
+                d['source'] = '%s' % prj_pkg_join(action.src_project, 
action.src_package)
+                if action.src_rev:
+                    d['source'] = d['source'] + '@%s' % action.src_rev
+                d['source'] = d['source'] + ' ->'
             d['target'] = action.tgt_project
             if action.tgt_releaseproject:
                 d['target'] += " (release in " + action.tgt_releaseproject + 
")"
@@ -2562,13 +2595,18 @@
             if action.opt_sourceupdate and show_srcupdate:
                 srcupdate = '(%s)' % action.opt_sourceupdate
         elif action.type == 'maintenance_release':
-            d['source'] = '%s ->' % prj_pkg_join(action.src_project, 
action.src_package)
+            d['source'] = '%s' % prj_pkg_join(action.src_project, 
action.src_package)
+            if action.src_rev:
+                d['source'] = d['source'] + '@%s' % action.src_rev
+            d['source'] = d['source'] + ' ->'
             d['target'] = prj_pkg_join(action.tgt_project, action.tgt_package)
         elif action.type == 'submit':
-            srcupdate = ' '
+            d['source'] = '%s' % prj_pkg_join(action.src_project, 
action.src_package)
+            if action.src_rev:
+                d['source'] = d['source'] + '@%s' % action.src_rev
             if action.opt_sourceupdate and show_srcupdate:
-                srcupdate = '(%s)' % action.opt_sourceupdate
-            d['source'] = '%s%s ->' % (prj_pkg_join(action.src_project, 
action.src_package), srcupdate)
+                d['source'] = d['source'] + '(%s)' % action.opt_sourceupdate
+            d['source'] = d['source'] + ' ->'
             tgt_package = action.tgt_package
             if action.src_package == action.tgt_package:
                 tgt_package = ''
@@ -3376,6 +3414,17 @@
     if edit:
         change_is_required = True
 
+    if metatype == 'pkg':
+        # check if the package is a link to a different project
+        project, package = path_args
+        orgprj = ET.fromstring(''.join(data)).get('project')
+        if orgprj is not None and unquote(project) != orgprj:
+            print('The package is linked from a different project.')
+            print('If you want to edit the meta of the package create first a 
branch.')
+            print('  osc branch %s %s %s' % (orgprj, package, 
unquote(project)))
+            print('  osc meta pkg %s %s -e' % (unquote(project), package))
+            return
+
     url = make_meta_url(metatype, path_args, apiurl, force, 
remove_linking_repositories)
     f = metafile(url, data, change_is_required, 
metatypes[metatype]['file_ext'])
 
@@ -4013,26 +4062,30 @@
         return None
 
 
-def get_user_data(apiurl, user, *tags):
-    """get specified tags from the user meta"""
-    meta = get_user_meta(apiurl, user)
+def _get_xml_data(meta, *tags):
     data = []
     if meta != None:
         root = ET.fromstring(meta)
         for tag in tags:
-            try:
-                if root.find(tag).text != None:
-                    data.append(root.find(tag).text)
-                else:
-                    # tag is empty
-                    data.append('-')
-            except AttributeError:
-                # this part is reached if the tags tuple contains an invalid 
tag
-                print('The xml file for user \'%s\' seems to be broken' % user)
-                return []
+            elm = root.find(tag)
+            if elm is None or elm.text is None:
+                data.append('-')
+            else:
+                data.append(elm.text)
     return data
 
 
+def get_user_data(apiurl, user, *tags):
+    """get specified tags from the user meta"""
+    meta = get_user_meta(apiurl, user)
+    return _get_xml_data(meta, *tags)
+    
+
+def get_group_data(apiurl, group, *tags):
+    meta = get_group(apiurl, group)
+    return _get_xml_data(meta, *tags)
+
+
 def download(url, filename, progress_obj = None, mtime = None):
     import tempfile, shutil
     global BUFSIZE
@@ -6086,6 +6139,9 @@
                        path_args=path,
                        template_args=None,
                        create_new=False)
+    if user.startswith('group:'):
+        group=user.replace('group:','')
+        user=None
     if data:
         root = ET.fromstring(''.join(data))
         for group_element in root.getiterator('group'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/add/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/add/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/add/.osc/_meta        
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/add/.osc/_meta        
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="add" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/added_missing/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/added_missing/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/added_missing/.osc/_meta      
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/added_missing/.osc/_meta      
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="added_missing" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/allstates/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/allstates/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/allstates/.osc/_meta  
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/allstates/.osc/_meta  
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="allstates" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/branch/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/branch/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/branch/.osc/_meta     
2014-01-24 10:50:08.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/branch/.osc/_meta     
2014-02-28 21:51:20.000000000 +0100
@@ -1,5 +1,5 @@
-<package project="home:Admin" name="unix">
-  <title/>
-  <description>This package was branched from btest in order to 
...</description>
+<package name="branch" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
   <person role="maintainer" userid="Admin"/>
 </package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/conflict/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/conflict/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/conflict/.osc/_meta   
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/conflict/.osc/_meta   
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="conflict" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/delete/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/delete/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/delete/.osc/_meta     
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/delete/.osc/_meta     
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="delete" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/multiple/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/multiple/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/multiple/.osc/_meta   
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/multiple/.osc/_meta   
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="multiple" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/nochanges/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/nochanges/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/nochanges/.osc/_meta  
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/nochanges/.osc/_meta  
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="nochanges" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osc-0.143.0/tests/commit_fixtures/osctest/simple/.osc/_meta 
new/osc-0.144.1/tests/commit_fixtures/osctest/simple/.osc/_meta
--- old/osc-0.143.0/tests/commit_fixtures/osctest/simple/.osc/_meta     
1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.144.1/tests/commit_fixtures/osctest/simple/.osc/_meta     
2014-02-28 21:51:20.000000000 +0100
@@ -0,0 +1,4 @@
+<package name="simple" project="osctest">
+  <title>Title example</title>
+  <description>Description example</description>
+</package>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.143.0/tests/test_prdiff.py 
new/osc-0.144.1/tests/test_prdiff.py
--- old/osc-0.143.0/tests/test_prdiff.py        2014-01-24 10:50:08.000000000 
+0100
+++ new/osc-0.144.1/tests/test_prdiff.py        2014-02-28 21:51:20.000000000 
+0100
@@ -237,7 +237,7 @@
 differs:   common-two
 
 148023  State:new        By:user         When:2013-01-11T11:04:14
-        submit:          home:user:branches:some:project/common-two  ->     
some:project
+        submit:          home:user:branches:some:project/common-two@7 ->    
some:project
         Descr: - Fix it to work - Improve support for something
 
 differs:   common-three
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.143.0/tests/test_request.py 
new/osc-0.144.1/tests/test_request.py
--- old/osc-0.143.0/tests/test_request.py       2014-01-24 10:50:08.000000000 
+0100
+++ new/osc-0.144.1/tests/test_request.py       2014-02-28 21:51:20.000000000 
+0100
@@ -438,8 +438,8 @@
         add_role:        person: xyz as maintainer, group: group1 as reader 
foobar
         add_role:        person: abc as reviewer                            
foo/bar
         change_devel:    foo/bar                                            
developed in devprj/devpkg
-        submit:          srcprj/srcpackage  ->                              
tgtprj/tgtpackage
-        submit:          foo/bar  ->                                        baz
+        submit:          srcprj/srcpackage ->                               
tgtprj/tgtpackage
+        submit:          foo/bar ->                                         baz
         delete:                                                             
deleteme
         delete:                                                             
foo/bar\n"""
         r = osc.core.Request()

++++++ osc.dsc ++++++
--- /var/tmp/diff_new_pack.0Kn5IC/_old  2014-03-01 07:54:16.000000000 +0100
+++ /var/tmp/diff_new_pack.0Kn5IC/_new  2014-03-01 07:54:16.000000000 +0100
@@ -1,6 +1,6 @@
 Format: 1.0
 Source: osc
-Version: 0.143.0
+Version: 0.144.1
 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