Hello community,

here is the log from the commit of package osc for openSUSE:Factory checked in 
at 2014-01-30 11:37:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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-03 19:47:42.000000000 
+0100
+++ /work/SRC/openSUSE:Factory/.osc.new/osc.changes     2014-01-30 
11:37:07.000000000 +0100
@@ -1,0 +2,11 @@
+Fri Jan 24 09:38:32 UTC 2014 - [email protected]
+
+- 0.143.0
+  - add option to add a auto-accept in future for delete requests (handy for 
admins)
+  - many bugfixes:
+    - plugin loading
+    - bugowner handling
+    - download of server side generated source "up -S"
+    - wipebinaries command 
+
+-------------------------------------------------------------------

Old:
----
  osc-0.142.2.tar.gz

New:
----
  osc-0.143.0.tar.gz

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

Other differences:
------------------
++++++ osc.spec ++++++
--- /var/tmp/diff_new_pack.L1RbIo/_old  2014-01-30 11:37:07.000000000 +0100
+++ /var/tmp/diff_new_pack.L1RbIo/_new  2014-01-30 11:37:07.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package osc
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           osc
-Version:        0.142.2
+Version:        0.143.0
 Release:        0
 Summary:        openSUSE Build Service Commander
 License:        GPL-2.0+

++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.L1RbIo/_old  2014-01-30 11:37:07.000000000 +0100
+++ /var/tmp/diff_new_pack.L1RbIo/_new  2014-01-30 11:37:07.000000000 +0100
@@ -1,5 +1,5 @@
 pkgname=osc
-pkgver=0.142.2
+pkgver=0.143.0
 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=('cdce96f3d1a7c55f3bee980e33808b2e')
+md5sums=('ad1f262fbb93e6a4c132d615648e6bbe')
 
 package() {
   msg "Installing osc ..."

++++++ _service ++++++
--- /var/tmp/diff_new_pack.L1RbIo/_old  2014-01-30 11:37:07.000000000 +0100
+++ /var/tmp/diff_new_pack.L1RbIo/_new  2014-01-30 11:37:07.000000000 +0100
@@ -1,7 +1,7 @@
 <services>
   <service name="tar_scm" mode="disabled">
-    <param name="version">0.142.2</param>
-    <param name="revision">0.142.2</param>
+    <param name="version">0.143.0</param>
+    <param name="revision">0.143.0</param>
     <param name="url">git://github.com/openSUSE/osc.git</param>
     <param name="scm">git</param>
   </service>

++++++ osc-0.142.2.tar.gz -> osc-0.143.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/NEWS new/osc-0.143.0/NEWS
--- old/osc-0.142.2/NEWS        2013-12-04 09:26:09.000000000 +0100
+++ new/osc-0.143.0/NEWS        2014-01-24 10:50:08.000000000 +0100
@@ -1,3 +1,11 @@
+0.143
+  - add option to add a auto-accept in future for delete requests (handy for 
admins)
+  - many bugfixes:
+    - plugin loading
+    - bugowner handling
+    - download of server side generated source "up -S"
+    - wipebinaries command 
+
 0.142
   - ppc64p7 build support
   - request --no-devel to disable request forwarding
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/osc/commandline.py 
new/osc-0.143.0/osc/commandline.py
--- old/osc-0.142.2/osc/commandline.py  2013-12-04 09:26:09.000000000 +0100
+++ new/osc-0.143.0/osc/commandline.py  2014-01-24 10:50:08.000000000 +0100
@@ -592,9 +592,9 @@
     @cmdln.option('-t', '--trigger', metavar='TOKENID',
                         help='Trigger the action of a token')
     def do_token(self, subcmd, opts, *args):
-        """${cmd_name}: Show and manage authentification token
+        """${cmd_name}: Show and manage authentication token
 
-        Authentification token can be used to run specific commands without
+        Authentication token can be used to run specific commands without
         sending credentials.
 
         Usage:
@@ -1740,6 +1740,8 @@
                   help='specify message TEXT')
     @cmdln.option('-r', '--repository', metavar='TEXT',
                   help='specify message TEXT')
+    @cmdln.option('--accept-in-hours', metavar='TEXT',
+                  help='specify message time when request shall get accepted 
automatically. Only works with write permissions in target.')
     @cmdln.alias("dr")
     @cmdln.alias("dropreq")
     @cmdln.alias("droprequest")
@@ -1793,6 +1795,8 @@
         r = Request()
         r.add_action('delete', tgt_project=project, tgt_package=package, 
tgt_repository=repository)
         r.description = cgi.escape(opts.message)
+        if opts.accept_in_hours:
+          r.accept_at_in_hours(int(opts.accept_in_hours))
         r.create(self.get_api_url())
         print(r.reqid)
 
@@ -2133,7 +2137,7 @@
             days = opts.days or conf.config['request_list_days']
             since = ''
             try:
-                days = int(days)
+                days = float(days)
             except ValueError:
                 days = 0
             if days > 0:
@@ -5630,7 +5634,7 @@
                 hostargs.append(long_name)
                 hostargs.append(hostprefer)
 
-                rsync_prefer_cmd = ['rsync', '-az', '-delete', '-e', 'ssh',
+                rsync_prefer_cmd = ['rsync', '-az', '--delete', '-e', 'ssh',
                         pdir,
                         "%s:%s" % (hostname, os.path.dirname(hostprefer))]
                 print('Run: %s' % " ".join(rsync_prefer_cmd))
@@ -5682,7 +5686,7 @@
 
         ### run all commands ###
         # 1.) rsync sources
-        rsync_source_cmd = ['rsync', '-az', '-delete', '-e', 'ssh', cwd, 
"%s:%s" % (hostname, hostpath)]
+        rsync_source_cmd = ['rsync', '-az', '--delete', '-e', 'ssh', cwd, 
"%s:%s" % (hostname, hostpath)]
         print('Run: %s' % " ".join(rsync_source_cmd))
         ret = run_external(rsync_source_cmd[0], *rsync_source_cmd[1:])
         if ret != 0:
@@ -7116,7 +7120,7 @@
                     if opts.set_bugowner:
                         for role in roles:
                             try:
-                                setBugowner(apiurl, result.get('project'), 
result.get('package'), bugowner)
+                                setBugowner(apiurl, result.get('project'), 
result.get('package'), opts.set_bugowner)
                             except HTTPError as e:
                                 if e.code == 403:
                                     print("No write permission in", 
result.get('project'), end=' ')
@@ -7140,7 +7144,7 @@
                 if opts.set_bugowner:
                     for role in roles:
                         try:
-                            setBugowner(apiurl, prj, pac, opts.delete, role)
+                            setBugowner(apiurl, prj, pac, opts.set_bugowner)
                         except HTTPError as e:
                             if e.code == 403:
                                 print("No write permission in" + 
result.get('project'), end=' ')
@@ -8132,7 +8136,7 @@
                         if (inspect.isfunction(data) and 
inspect.getmodule(data) == mod
                             or inspect.ismodule(data)):
                             setattr(self.__class__, name, data)
-                except SyntaxError as e:
+                except (SyntaxError, NameError) as e:
                     if (os.environ.get('OSC_PLUGIN_FAIL_IGNORE')):
                         print("%s: %s\n" % (os.path.join(plugin_dir, extfile), 
e), file=sys.stderr)
                     else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/osc/conf.py new/osc-0.143.0/osc/conf.py
--- old/osc-0.142.2/osc/conf.py 2013-12-04 09:26:09.000000000 +0100
+++ new/osc-0.143.0/osc/conf.py 2014-01-24 10:50:08.000000000 +0100
@@ -36,6 +36,7 @@
 
 """
 
+import bz2
 import base64
 import os
 import re
@@ -570,8 +571,8 @@
         cookiejar.load(ignore_discard=True)
     except IOError:
         try:
-            open(cookie_file, 'w').close()
-            os.chmod(cookie_file, 0o600)
+            fd = os.open(cookie_file, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 
mode=0o600)
+            os.close(fd)
         except:
             #print 'Unable to create cookiejar file: \'%s\'. Using RAM-based 
cookies.' % cookie_file
             cookiejar = CookieJar()
@@ -663,6 +664,13 @@
         return (opt, cp.get(section, opt, raw=True))
     return (opt, None)
 
+def passx_decode(passx):
+    """decode the obfuscated password back to plain text password"""
+    return 
bz2.decompress(base64.b64decode(passx.encode("ascii"))).decode("ascii")
+
+def passx_encode(passwd):
+    """encode plain text password to obfuscated form"""
+    return 
base64.b64encode(bz2.compress(passwd.encode('ascii'))).decode("ascii")
 
 def write_initial_config(conffile, entries, custom_template=''):
     """
@@ -694,7 +702,7 @@
     if not config['plaintext_passwd']:
         config['pass'] = ''
     else:
-        config['passx'] = base64.b64encode(config['pass'].encode('bz2'))
+        config['passx'] = passx_encode(config['pass'])
 
     sio = StringIO(conf_template.strip() % config)
     cp = OscConfigParser.OscConfigParser(DEFAULTS)
@@ -734,7 +742,7 @@
         cp.set(url, 'user', user)
         if not config['plaintext_passwd']:
             cp.remove_option(url, 'pass')
-            cp.set(url, 'passx', base64.b64encode(passwd.encode('bz2')))
+            cp.set(url, 'passx', passx_encode(passwd))
         else:
             cp.remove_option(url, 'passx')
             cp.set(url, 'pass', passwd)
@@ -817,7 +825,7 @@
             try:
                 # Read from keyring lib if available
                 user = cp.get(url, 'user', raw=True)
-                password = keyring.get_password(host, user)
+                password = str(keyring.get_password(host, user))
             except:
                 # Fallback to file based auth.
                 pass
@@ -829,7 +837,7 @@
                     raise oscerr.ConfigError('no user found in keyring', 
conffile)
                 user = gk_data[0]['user']
                 if 'password' in gk_data[0]:
-                    password = gk_data[0]['password']
+                    password = str(gk_data[0]['password'])
                 else:
                     # this is most likely an error
                     print('warning: no password found in keyring', 
file=sys.stderr)
@@ -856,7 +864,7 @@
             user = cp.get(url, 'user', raw=True)        # need to set raw to 
prevent '%' expansion
             password = cp.get(url, 'pass', raw=True)    # especially on 
password!
             try:
-                passwordx = cp.get(url, 'passx', 
raw=True).decode('base64').decode('bz2')  # especially on password!
+                passwordx = passx_decode(cp.get(url, 'passx', raw=True))  # 
especially on password!
             except:
                 passwordx = ''
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/osc/core.py new/osc-0.143.0/osc/core.py
--- old/osc-0.142.2/osc/core.py 2013-12-04 09:26:09.000000000 +0100
+++ new/osc-0.143.0/osc/core.py 2014-01-24 10:50:09.000000000 +0100
@@ -5,7 +5,7 @@
 
 from __future__ import print_function
 
-__version__ = '0.142'
+__version__ = '0.142git'
 
 # __store_version__ is to be incremented when the format of the working copy
 # "store" changes in an incompatible way. Please add any needed migration
@@ -357,7 +357,11 @@
         # cleanup existing generated files
         for filename in os.listdir(dir):
             if filename.startswith('_service:') or 
filename.startswith('_service_'):
-                os.unlink(os.path.join(dir, filename))
+                ent = os.path.join(dir, filename)
+                if os.path.isdir(ent):
+                    shutil.rmtree(ent)
+                else:
+                    os.unlink(ent)
 
         allservices = self.services or []
         if singleservice and not singleservice in allservices:
@@ -1235,26 +1239,23 @@
         u = makeurl(self.apiurl, ['source', self.prjname, self.name, 
pathname2url(n)], query=query)
         http_DELETE(u)
 
-    def put_source_file(self, n, copy_only=False):
-        cdir = os.path.join(self.storedir, '_in_commit')
-        try:
-            if not os.path.isdir(cdir):
-                os.mkdir(cdir)
-            query = 'rev=repository'
-            tmpfile = os.path.join(cdir, n)
-            shutil.copyfile(os.path.join(self.dir, n), tmpfile)
-            # escaping '+' in the URL path (note: not in the URL query string) 
is
-            # only a workaround for ruby on rails, which swallows it otherwise
-            if not copy_only:
-                u = makeurl(self.apiurl, ['source', self.prjname, self.name, 
pathname2url(n)], query=query)
-                http_PUT(u, file = os.path.join(self.dir, n))
-            os.rename(tmpfile, os.path.join(self.storedir, n))
-        finally:
-            if os.path.isdir(cdir):
-                shutil.rmtree(cdir)
+    def put_source_file(self, n, tdir, copy_only=False):
+        query = 'rev=repository'
+        tfilename = os.path.join(tdir, n)
+        shutil.copyfile(os.path.join(self.dir, n), tfilename)
+        # escaping '+' in the URL path (note: not in the URL query string) is
+        # only a workaround for ruby on rails, which swallows it otherwise
+        if not copy_only:
+            u = makeurl(self.apiurl, ['source', self.prjname, self.name, 
pathname2url(n)], query=query)
+            http_PUT(u, file = tfilename)
         if n in self.to_be_added:
             self.to_be_added.remove(n)
 
+    def __commit_update_store(self, tdir):
+        """move files from transaction directory into the store"""
+        for filename in os.listdir(tdir):
+            os.rename(os.path.join(tdir, filename), 
os.path.join(self.storedir, filename))
+
     def __generate_commitlist(self, todo_send):
         root = ET.Element('directory')
         for i in sorted(todo_send.keys()):
@@ -1364,24 +1365,33 @@
         real_send = [i for i in real_send if not i in send]
         # abort after 3 tries
         tries = 3
-        while len(send) and tries:
-            for filename in send[:]:
-                sys.stdout.write('.')
-                sys.stdout.flush()
-                self.put_source_file(filename)
-                send.remove(filename)
-            tries -= 1
-            sfilelist = self.__send_commitlog(msg, filelist)
-            send = self.__get_todo_send(sfilelist)
-        if len(send):
-            raise oscerr.PackageInternalError(self.prjname, self.name,
-                'server does not accept filelist:\n%s\nmissing:\n%s\n' \
-                % (ET.tostring(filelist, encoding=ET_ENCODING), 
ET.tostring(sfilelist, encoding=ET_ENCODING)))
-        # these files already exist on the server
-        # just copy them into the storedir
-        for filename in real_send:
-            self.put_source_file(filename, copy_only=True)
-
+        tdir = None
+        try:
+            tdir = os.path.join(self.storedir, '_in_commit')
+            if os.path.isdir(tdir):
+                shutil.rmtree(tdir)
+            os.mkdir(tdir)
+            while len(send) and tries:
+                for filename in send[:]:
+                    sys.stdout.write('.')
+                    sys.stdout.flush()
+                    self.put_source_file(filename, tdir)
+                    send.remove(filename)
+                tries -= 1
+                sfilelist = self.__send_commitlog(msg, filelist)
+                send = self.__get_todo_send(sfilelist)
+            if len(send):
+                raise oscerr.PackageInternalError(self.prjname, self.name,
+                    'server does not accept filelist:\n%s\nmissing:\n%s\n' \
+                    % (ET.tostring(filelist, encoding=ET_ENCODING), 
ET.tostring(sfilelist, encoding=ET_ENCODING)))
+            # these files already exist on the server
+            for filename in real_send:
+                self.put_source_file(filename, tdir, copy_only=True)
+            # update store with the committed files
+            self.__commit_update_store(tdir)
+        finally:
+            if tdir is not None and os.path.isdir(tdir):
+                shutil.rmtree(tdir)
         self.rev = sfilelist.get('rev')
         print()
         print('Committed revision %s.' % self.rev)
@@ -1457,7 +1467,7 @@
 
         shutil.copyfile(storefilename, filename)
         if mtime:
-            os.utime(filename, (-1, mtime))
+            utime(filename, (-1, mtime))
         if not origfile is None:
             os.unlink(origfile)
 
@@ -2480,6 +2490,8 @@
             ET.SubElement(root, 'title').text = self.title
         if self.description:
             ET.SubElement(root, 'description').text = self.description
+        if self.accept_at:
+            ET.SubElement(root, 'accept_at').text = self.accept_at
         return root
 
     def to_str(self):
@@ -2488,6 +2500,14 @@
         xmlindent(root)
         return ET.tostring(root, encoding=ET_ENCODING)
 
+    def accept_at_in_hours(self, hours):
+        """set auto accept_at time"""
+        import datetime
+
+        now = datetime.datetime.utcnow()
+        now = now + datetime.timedelta(hours=hours)
+        self.accept_at = now.isoformat()
+
     @staticmethod
     def format_review(review, show_srcupdate=False):
         """
@@ -2901,7 +2921,7 @@
     return urlunsplit((scheme, netloc, '/'.join(l), query, ''))
 
 
-def http_request(method, url, headers={}, data=None, file=None, timeout=0):
+def http_request(method, url, headers={}, data=None, file=None):
     """wrapper around urllib2.urlopen for error handling,
     and to support additional (PUT, DELETE) methods"""
     def create_memoryview(obj):
@@ -2967,18 +2987,12 @@
 
     if conf.config['debug']: print(method, url, file=sys.stderr)
 
-    old_timeout = socket.getdefaulttimeout()
-    # XXX: dirty hack as timeout doesn't work with python-m2crypto
-    if old_timeout != timeout and not api_host_options.get('sslcertck'):
-        socket.setdefaulttimeout(timeout)
     try:
         if isinstance(data, str):
             data = bytes(data, "utf-8")
         fd = urlopen(req, data=data)
 
     finally:
-        if old_timeout != timeout and not api_host_options.get('sslcertck'):
-            socket.setdefaulttimeout(old_timeout)
         if hasattr(conf.cookiejar, 'save'):
             conf.cookiejar.save(ignore_discard=True)
 
@@ -3396,7 +3410,7 @@
     if include_service_files:
         try:
             sinfo = et.find('serviceinfo')
-            if sinfo and sinfo.get('xsrcmd5') and not sinfo.get('error'):
+            if sinfo != None and sinfo.get('xsrcmd5') and not 
sinfo.get('error'):
                 return sinfo.get('xsrcmd5')
         except:
             pass
@@ -3433,7 +3447,7 @@
     if include_service_files:
         try:
             sinfo = et.find('serviceinfo')
-            if sinfo and sinfo.get('xsrcmd5') and not sinfo.get('error'):
+            if sinfo != None and sinfo.get('xsrcmd5') and not 
sinfo.get('error'):
                 return sinfo.get('xsrcmd5')
         except:
             pass
@@ -4028,7 +4042,7 @@
         prefix = os.path.basename(filename)
         path = os.path.dirname(filename)
         (fd, tmpfile) = tempfile.mkstemp(dir=path, prefix = prefix, suffix = 
'.osctmp')
-        os.chmod(tmpfile, 0o644)
+        os.fchmod(fd, 0o644)
         try:
             o = os.fdopen(fd, 'wb')
             for buf in streamfile(url, http_GET, BUFSIZE, 
progress_obj=progress_obj):
@@ -4043,7 +4057,7 @@
             o.close()
 
     if mtime:
-        os.utime(filename, (-1, mtime))
+        utime(filename, (-1, mtime))
 
 def get_source_file(apiurl, prj, package, filename, targetfilename=None, 
revision=None, progress_obj=None, mtime=None, meta=False):
     targetfilename = targetfilename or filename
@@ -5161,7 +5175,7 @@
         row = ['_'] + ['/'.join(tg) for tg in targets]
         r.append(';'.join(row))
         for pac in pacs:
-            row = [pac] + [status[pac][tg] for tg in targets]
+            row = [pac] + [status[pac][tg] for tg in targets if tg in 
status[pac]]
             r.append(';'.join(row))
         return r
 
@@ -6074,12 +6088,12 @@
                        create_new=False)
     if data:
         root = ET.fromstring(''.join(data))
-        for group in root.getiterator('group'):
-            if  group.get('role') == "bugowner":
-                root.remove(group)
-        for person in root.getiterator('person'):
-            if person.get('role') == "bugowner":
-                root.remove(person)
+        for group_element in root.getiterator('group'):
+            if  group_element.get('role') == "bugowner":
+                root.remove(group_element)
+        for person_element in root.getiterator('person'):
+            if person_element.get('role') == "bugowner":
+                root.remove(person_element)
         if user:
             root.insert(2, ET.Element('person', role='bugowner', userid=user))
         elif group:
@@ -6405,10 +6419,10 @@
     print_request(request)
     try:
         prompt = '(a)ccept/(d)ecline/(r)evoke/c(l)one/(s)kip/(c)ancel > '
-        sr_actions = request.get_actions('submit')
+        editable_actions = request.get_actions('submit', 
'maintenance_incident')
         # actions which have sources + buildresults
-        src_actions = sr_actions + request.get_actions('maintenance_release', 
'maintenance_incident')
-        if sr_actions:
+        src_actions = editable_actions + 
request.get_actions('maintenance_release')
+        if editable_actions:
             prompt = 
'd(i)ff/(a)ccept/(d)ecline/(r)evoke/(b)uildstatus/c(l)one/(e)dit/(s)kip/(c)ancel
 > '
         elif src_actions:
             # no edit for maintenance release requests
@@ -6453,13 +6467,13 @@
                 for action in src_actions:
                     print('%s/%s:' % (action.src_project, action.src_package))
                     print('\n'.join(get_results(apiurl, action.src_project, 
action.src_package)))
-            elif repl == 'e' and sr_actions:
-                # this is only for sr_actions
+            elif repl == 'e' and editable_actions:
+                # this is only for editable actions
                 if not editprj:
                     editprj = clone_request(apiurl, request.reqid, 'osc 
editrequest')
                     orequest = request
                 request = edit_submitrequest(apiurl, editprj, orequest, 
request)
-                src_actions = sr_actions = request.get_actions('submit')
+                src_actions = editable_actions = request.get_actions('submit', 
'maintenance_incident')
                 print_request(request)
                 prompt = 'd(i)ff/(a)ccept/(b)uildstatus/(e)dit/(s)kip/(c)ancel 
> '
             else:
@@ -6728,6 +6742,15 @@
             pass
     return None
 
-
+def utime(filename, arg, ignore_einval=True):
+    """wrapper around os.utime which ignore errno EINVAL by default"""
+    try:
+        # workaround for bnc#857610): if filename resides on a nfs share
+        # os.utime might raise EINVAL
+        os.utime(filename, arg)
+    except OSError as e:
+        if e.errno == errno.EINVAL and ignore_einval:
+            return
+        raise
 
 # vim: sw=4 et
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/tests/conf_fixtures/oscrc 
new/osc-0.143.0/tests/conf_fixtures/oscrc
--- old/osc-0.142.2/tests/conf_fixtures/oscrc   1970-01-01 01:00:00.000000000 
+0100
+++ new/osc-0.143.0/tests/conf_fixtures/oscrc   2014-01-24 10:50:08.000000000 
+0100
@@ -0,0 +1,103 @@
+[general]
+# URL to access API server, e.g. https://api.opensuse.org
+# you also need a section [https://api.opensuse.org] with the credentials
+apiurl = http://localhost
+# Downloaded packages are cached here. Must be writable by you.
+#packagecachedir = /var/tmp/osbuild-packagecache
+# Wrapper to call build as root (sudo, su -, ...)
+#su-wrapper = su -c
+# rootdir to setup the chroot environment
+# can contain %(repo)s, %(arch)s, %(project)s and %(package)s for replacement, 
e.g.
+# /srv/oscbuild/%(repo)s-%(arch)s or
+# /srv/oscbuild/%(repo)s-%(arch)s-%(project)s-%(package)s
+#build-root = /var/tmp/build-root
+# compile with N jobs (default: "getconf _NPROCESSORS_ONLN")
+#build-jobs = N
+# build-type to use - values can be (depending on the capabilities of the 
'build' script)
+# empty    -  chroot build
+# kvm      -  kvm VM build  (needs build-device, build-swap, build-memory)
+# xen      -  xen VM build  (needs build-device, build-swap, build-memory)
+#   experimental:
+#     qemu -  qemu VM build
+#     lxc  -  lxc build
+#build-type =
+# build-device is the disk-image file to use as root for VM builds
+# e.g. /var/tmp/FILE.root
+#build-device = /var/tmp/FILE.root
+# build-swap is the disk-image to use as swap for VM builds
+# e.g. /var/tmp/FILE.swap
+#build-swap = /var/tmp/FILE.swap
+# build-memory is the amount of memory used in the VM
+# value in MB - e.g. 512
+#build-memory = 512
+# build-vmdisk-rootsize is the size of the disk-image used as root in a VM 
build
+# values in MB - e.g. 4096
+#build-vmdisk-rootsize = 4096
+# build-vmdisk-swapsize is the size of the disk-image used as swap in a VM 
build
+# values in MB - e.g. 1024
+#build-vmdisk-swapsize = 1024
+# Numeric uid:gid to assign to the "abuild" user in the build-root
+# or "caller" to use the current users uid:gid
+# This is convenient when sharing the buildroot with ordinary userids
+# on the host.
+# This should not be 0
+# build-uid =
+# extra packages to install when building packages locally (osc build)
+# this corresponds to osc build's -x option and can be overridden with that
+# -x '' can also be given on the command line to override this setting, or
+# you can have an empty setting here.
+#extra-pkgs = vim gdb strace
+# build platform is used if the platform argument is omitted to osc build
+#build_repository = openSUSE_Factory
+# default project for getpac or bco
+#getpac_default_project = openSUSE:Factory
+# alternate filesystem layout: have multiple subdirs, where colons were.
+#checkout_no_colon = 0
+# local files to ignore with status, addremove, ....
+#exclude_glob = .osc CVS .svn .* _linkerror *~ #*# *.orig *.bak *.changes.*
+# keep passwords in plaintext. If you see this comment, your osc
+# already uses the encrypted password, and only keeps them in plain text
+# for backwards compatibility. Default will change to 0 in future releases.
+# You can remove the plaintext password without harm, if you do not need
+# backwards compatibility.
+#plaintext_passwd = 1
+# limit the age of requests shown with 'osc req list'.
+# this is a default only, can be overridden by 'osc req list -D NNN'
+# Use 0 for unlimted.
+#request_list_days = 0
+# show info useful for debugging
+#debug = 1
+# show HTTP traffic useful for debugging
+#http_debug = 1
+# Skip signature verification of packages used for build.
+#no_verify = 1
+# jump into the debugger in case of errors
+#post_mortem = 1
+# print call traces in case of errors
+#traceback = 1
+# use KDE/Gnome/MacOS/Windows keyring for credentials if available
+#use_keyring = 1
+# check for unversioned/removed files before commit
+#check_filelist = 1
+# check for pending requests after executing an action (e.g. checkout, update, 
commit)
+#check_for_request_on_action = 0
+# what to do with the source package if the submitrequest has been accepted. If
+# nothing is specified the API default is used
+#submitrequest_on_accept_action = cleanup|update|noupdate
+#review requests interactively (default: off)
+#request_show_review = 1
+# Directory with executables to validate sources, esp before committing
+#source_validator_directory = /usr/lib/osc/source_validators
+
+[http://localhost]
+user=Admin
+pass=opensuse
+# set aliases for this apiurl
+# aliases = foo, bar
+# email used in .changes, unless the one from osc meta prj <user> will be used
+# email =
+# additional headers to pass to a request, e.g. for special authentication
+#http_headers = Host: foofoobar,
+#       User: mumblegack
+# Force using of keyring for this API
+#keyring = 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/tests/suite.py 
new/osc-0.143.0/tests/suite.py
--- old/osc-0.142.2/tests/suite.py      2013-12-04 09:26:09.000000000 +0100
+++ new/osc-0.143.0/tests/suite.py      2014-01-24 10:50:08.000000000 +0100
@@ -22,6 +22,7 @@
 import test_request
 import test_setlinkrev
 import test_prdiff
+import test_conf
 
 suite = unittest.TestSuite()
 suite.addTests(test_addfiles.suite())
@@ -38,6 +39,7 @@
 suite.addTests(test_request.suite())
 suite.addTests(test_setlinkrev.suite())
 suite.addTests(test_prdiff.suite())
+suite.addTests(test_conf.suite())
 
 if have_xmlrunner:
     result = xmlrunner.XMLTestRunner(output=os.path.join(os.getcwd(), 
'junit-xml-results')).run(suite)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/tests/test_commit.py 
new/osc-0.143.0/tests/test_commit.py
--- old/osc-0.142.2/tests/test_commit.py        2013-12-04 09:26:09.000000000 
+0100
+++ new/osc-0.143.0/tests/test_commit.py        2014-01-24 10:50:08.000000000 
+0100
@@ -2,6 +2,7 @@
 import osc.oscerr
 import os
 import sys
+import urllib2
 from common import GET, PUT, POST, DELETE, OscTestCase
 from xml.etree import cElementTree as ET
 FIXTURES_DIR = os.path.join(os.getcwd(), 'commit_fixtures')
@@ -287,6 +288,25 @@
         self._check_status(p, 'add', '!')
         self._check_status(p, 'bar', ' ')
 
+    @GET('http://localhost/source/osctest/simple?rev=latest', 
file='testSimple_filesremote')
+    @POST('http://localhost/source/osctest/simple?cmd=getprojectservices',
+          exp='', text='<services />')
+    
@POST('http://localhost/source/osctest/simple?comment=&cmd=commitfilelist&user=Admin',
+          file='testSimple_missingfilelist', expfile='testSimple_lfilelist')
+    @PUT('http://localhost/source/osctest/simple/nochange?rev=repository',
+          exp='This file didn\'t change but\nis modified.\n', text=rev_dummy)
+    
@POST('http://localhost/source/osctest/simple?comment=&cmd=commitfilelist&user=Admin',
 
+          expfile='testSimple_lfilelist', text='an error occured', code=500)
+    def test_commitfilelist_error(self):
+        """commit modified file but when committing the filelist the server 
returns status 500 (see ticket #65)"""
+        self._change_to_pkg('simple')
+        p = osc.core.Package('.')
+        self._check_status(p, 'nochange', 'M')
+        self.assertRaises(urllib2.HTTPError, p.commit)
+        exp = 'Sending    nochange\nTransmitting file data .'
+        self.assertEqual(sys.stdout.getvalue(), exp)
+        self._check_status(p, 'nochange', 'M')
+
 if __name__ == '__main__':
     import unittest
     unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.142.2/tests/test_conf.py 
new/osc-0.143.0/tests/test_conf.py
--- old/osc-0.142.2/tests/test_conf.py  1970-01-01 01:00:00.000000000 +0100
+++ new/osc-0.143.0/tests/test_conf.py  2014-01-24 10:50:08.000000000 +0100
@@ -0,0 +1,32 @@
+from osc.conf import passx_encode, passx_decode
+from common import OscTestCase
+
+import os
+
+FIXTURES_DIR = os.path.join(os.getcwd(), 'conf_fixtures')
+
+def suite():
+    import unittest
+    return unittest.makeSuite(TestConf)
+
+class TestConf(OscTestCase):
+    def _get_fixtures_dir(self):
+        return FIXTURES_DIR
+
+    def setUp(self):
+        return super(TestConf, self).setUp(copytree=False)
+    
+    def testPassxEncodeDecode(self):
+        
+        passwd = "J0e'sPassword!@#"
+        passx = passx_encode(passwd)
+        #base64.b64encode(passwd.encode('bz2'))
+        passx27 = 
"QlpoOTFBWSZTWaDg4dQAAAKfgCiAQABAEEAAJgCYgCAAMQAACEyYmTyei67AsYSDSaLuSKcKEhQcHDqA"
+        
+        self.assertEqual(passwd, passx_decode(passx))
+        self.assertEqual(passwd, passx_decode(passx27))
+        self.assertEqual(passx, passx27)
+
+if __name__ == '__main__':
+    import unittest
+    unittest.main()

++++++ osc.dsc ++++++
--- /var/tmp/diff_new_pack.L1RbIo/_old  2014-01-30 11:37:08.000000000 +0100
+++ /var/tmp/diff_new_pack.L1RbIo/_new  2014-01-30 11:37:08.000000000 +0100
@@ -1,6 +1,6 @@
 Format: 1.0
 Source: osc
-Version: 0.142.2
+Version: 0.143.0
 Binary: osc
 Maintainer: Adrian Schroeter <[email protected]>
 Architecture: any

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to