Hello community,

here is the log from the commit of package osc for openSUSE:Factory checked in 
at 2017-08-23 11:54:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/osc (Old)
 and      /work/SRC/openSUSE:Factory/.osc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "osc"

Wed Aug 23 11:54:09 2017 rev:120 rq:515178 version:0.159.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/osc/osc.changes  2017-05-09 18:10:11.445195834 
+0200
+++ /work/SRC/openSUSE:Factory/.osc.new/osc.changes     2017-08-23 
11:54:11.526968365 +0200
@@ -1,0 +2,23 @@
+Thu Jul 27 22:06:25 UTC 2017 - jbe...@suse.com
+
+- Provide non-deprecated plugin directory and macro for plugins.
+
+-------------------------------------------------------------------
+Thu Jul 20 21:18:21 UTC 2017 - adr...@suse.de
+
+- add Recommends: obs-service-obs_scm
+
+-------------------------------------------------------------------
+Tue Jul 18 22:49:23 UTC 2017 - adr...@suse.de
+
+- 0.159.0
+  - "osc buildhistory": show build duration
+  - Support builds using native Docker build descriptions
+  - Support usage of pre-build containers for Docker and KIWI builds
+  - "osc build -M ..": fixed behaviour of falvoured builds
+  - added switch to show only issues in rdiff
+  - show build duration in build history
+  - allow to cat/less files from deleted packages (using -D option)
+  - Allow to override man-page date
+
+-------------------------------------------------------------------

Old:
----
  osc-0.158.0.tar.gz

New:
----
  appimage.yml
  osc-0.159.0.tar.gz

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

Other differences:
------------------
++++++ osc.spec ++++++
--- /var/tmp/diff_new_pack.k4PVI5/_old  2017-08-23 11:54:12.546824800 +0200
+++ /var/tmp/diff_new_pack.k4PVI5/_new  2017-08-23 11:54:12.562822547 +0200
@@ -16,10 +16,12 @@
 #
 
 
-%define version_unconverted 0.158.0
+%define version_unconverted 0.159.0
+%define osc_plugin_dir %{_prefix}/lib/osc-plugins
+%define macros_file macros.osc
 
 Name:           osc
-Version:        0.158.0
+Version:        0.159.0
 Release:        0
 Summary:        Open Build Service Commander
 License:        GPL-2.0+
@@ -59,6 +61,7 @@
 Recommends:     obs-service-recompress
 Recommends:     obs-service-set_version
 Recommends:     obs-service-tar_scm
+Recommends:     obs-service-obs_scm
 Recommends:     obs-service-verify_file
 Recommends:     obs-service-download_files
 Recommends:     obs-service-format_spec_file
@@ -106,9 +109,15 @@
 # ("wrong", because no package provides "/bin/python").
 PATH="/usr/bin:$PATH" CFLAGS="%{optflags}" python setup.py build
 
+cat << eom > %{macros_file}
+%%osc_plugin_dir %{osc_plugin_dir}
+eom
+echo >> %{macros_file}
+
 %install
 python setup.py install --prefix=%{_prefix} --root=%{buildroot}
 ln -s osc-wrapper.py %{buildroot}/%{_bindir}/osc
+mkdir -p %{buildroot}%{osc_plugin_dir}
 mkdir -p %{buildroot}%{_localstatedir}/lib/osc-plugins
 install -Dm0644 dist/complete.csh %{buildroot}%{_sysconfdir}/profile.d/osc.csh
 %if 0%{?suse_version}
@@ -122,6 +131,8 @@
 install -Dm0755 dist/osc.complete %{buildroot}%{_libdir}/osc/complete
 %endif
 
+install -m644 %{macros_file} -D %{buildroot}%{_sysconfdir}/rpm/%{macros_file}
+
 %clean
 rm -rf %{buildroot}
 
@@ -136,6 +147,7 @@
 %else
 %config %{_sysconfdir}/profile.d/osc.sh
 %endif
+%config %{_sysconfdir}/rpm/%{macros_file}
 %dir %{_localstatedir}/lib/osc-plugins
 %{_mandir}/man1/osc.*
 %if 0%{?suse_version} > 1110
@@ -143,5 +155,6 @@
 %else
 %{_libdir}/osc
 %endif
+%dir %{osc_plugin_dir}
 
 %changelog

++++++ PKGBUILD ++++++
--- /var/tmp/diff_new_pack.k4PVI5/_old  2017-08-23 11:54:12.642811287 +0200
+++ /var/tmp/diff_new_pack.k4PVI5/_new  2017-08-23 11:54:12.642811287 +0200
@@ -1,5 +1,5 @@
 pkgname=osc
-pkgver=0.158.0
+pkgver=0.159.0
 pkgrel=0
 pkgdesc="Open Build Service client"
 arch=('i686' 'x86_64')

++++++ _service ++++++
--- /var/tmp/diff_new_pack.k4PVI5/_old  2017-08-23 11:54:12.670807346 +0200
+++ /var/tmp/diff_new_pack.k4PVI5/_new  2017-08-23 11:54:12.670807346 +0200
@@ -1,7 +1,7 @@
 <services>
   <service name="tar_scm" mode="disabled">
-    <param name="version">0.158.0</param>
-    <param name="revision">0.158.0</param>
+    <param name="version">0.159.0</param>
+    <param name="revision">0.159.0</param>
     <param name="url">git://github.com/openSUSE/osc.git</param>
     <param name="scm">git</param>
   </service>

++++++ appimage.yml ++++++
app: osc

build:
  packages:
    - linuxdeployqt

ingredients:
  packages:
    - build
    - osc
    - python-yaml
    - obs-service-obs_scm
    - obs-service-tar_scm
    - obs-service-set_version
    - obs-service-recompress
    - openSUSE-release
    - openSUSE-release-ftp
    - rsync
    
script:
  - mkdir -p $BUILD_APPDIR/usr/share/pixmaps
  - cp /usr/share/pixmaps/appimage.png $BUILD_APPDIR/usr/share/pixmaps
  - mkdir -p $BUILD_APPDIR/usr/share/applications
  - echo "[Desktop Entry]"  >  $BUILD_APPDIR/usr/share/applications/osc.desktop
  - echo "Name=osc"         >> $BUILD_APPDIR/usr/share/applications/osc.desktop
  - echo "Exec=osc"         >> $BUILD_APPDIR/usr/share/applications/osc.desktop
  - echo "Icon=appimage"    >> $BUILD_APPDIR/usr/share/applications/osc.desktop
  - echo "Type=Application" >> $BUILD_APPDIR/usr/share/applications/osc.desktop
  - linuxdeployqt $BUILD_APPDIR/usr/share/applications/*.desktop 
-bundle-non-qt-libs -verbose=2
  - linuxdeployqt $BUILD_APPDIR/usr/share/applications/*.desktop 
-bundle-non-qt-libs -verbose=2


++++++ debian.changelog ++++++
--- /var/tmp/diff_new_pack.k4PVI5/_old  2017-08-23 11:54:12.746796650 +0200
+++ /var/tmp/diff_new_pack.k4PVI5/_new  2017-08-23 11:54:12.746796650 +0200
@@ -1,4 +1,4 @@
-osc (0.158.0) unstable; urgency=low
+osc (0.159.0-0) unstable; urgency=low
   - Install bash completion
 
  -- Nick Brown <bro...@brocade.com>  Wed, 26 Oct 2016 10:00:00 +0200

++++++ debian.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/debian/control new/debian/control
--- old/debian/control  2015-06-30 15:40:36.000000000 +0200
+++ new/debian/control  2017-07-09 18:39:33.000000000 +0200
@@ -8,7 +8,7 @@
 Package: osc
 Section: devel
 Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, python (>=2.5) 
| python-celementtree, python-urlgrabber, python-m2crypto, python-rpm, build
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}, python (>=2.5) 
| python-celementtree, python-urlgrabber, python-m2crypto, python-rpm, build | 
obs-build
 Suggests: python-keyring, sudo
 Description: Open Build Service Commander
   Commandline client for the Open Build Service.

++++++ osc-0.158.0.tar.gz -> osc-0.159.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/NEWS new/osc-0.159.0/NEWS
--- old/osc-0.158.0/NEWS        2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/NEWS        2017-07-19 00:48:15.000000000 +0200
@@ -1,3 +1,13 @@
+0.159
+  - "osc buildhistory": show build duration
+  - Support builds using native Docker build descriptions
+  - Support usage of pre-build containers for Docker and KIWI builds
+  - "osc build -M ..": fixed behaviour of falvoured builds
+  - added switch to show only issues in rdiff
+  - show build duration in build history
+  - allow to cat/less files from deleted packages (using -D option)
+  - Allow to override man-page date
+
 0.158
   - cat/less/blame command: default to expand to stay in sync with checkout
   - add support for highly experimental native appimage.yml support
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/osc/build.py new/osc-0.159.0/osc/build.py
--- old/osc-0.158.0/osc/build.py        2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/osc/build.py        2017-07-19 00:48:15.000000000 +0200
@@ -20,7 +20,7 @@
 
 from tempfile import NamedTemporaryFile, mkdtemp
 from osc.fetch import *
-from osc.core import get_buildinfo, store_read_apiurl, store_read_project, 
store_read_package, meta_exists, quote_plus, get_buildconfig, is_package_dir
+from osc.core import get_buildinfo, store_read_apiurl, store_read_project, 
store_read_package, meta_exists, quote_plus, get_buildconfig, is_package_dir, 
dgst
 from osc.core import get_binarylist, get_binary_file, run_external, raw_input
 from osc.util import rpmquery, debquery, archquery
 import osc.conf
@@ -200,7 +200,8 @@
         for i in ['binary', 'package',
                   'epoch', 'version', 'release', 'hdrmd5',
                   'project', 'repository',
-                  'preinstall', 'vminstall', 'noinstall', 'installonly', 
'runscripts',
+                  'preinstall', 'vminstall', 'runscripts',
+                  'noinstall', 'installonly', 'notmeta',
                  ]:
             self.mp[i] = node.get(i)
 
@@ -229,7 +230,9 @@
 
         self.mp['apiurl'] = apiurl
 
-        if pacsuffix == 'deb':
+        if self.mp['name'].startswith('container:'):
+            canonname = self.mp['name'] + '.tar.xz'
+        elif pacsuffix == 'deb':
             canonname = debquery.DebQuery.filename(self.mp['name'], 
self.mp['epoch'], self.mp['version'], self.mp['release'], self.mp['arch'])
         elif pacsuffix == 'arch':
             canonname = archquery.ArchQuery.filename(self.mp['name'], 
self.mp['epoch'], self.mp['version'], self.mp['release'], self.mp['arch'])
@@ -341,6 +344,11 @@
                                     '-type', 'f'],
                                    
stdout=subprocess.PIPE).stdout.read().strip()
         s_built = ''
+    elif buildtype == 'docker':
+        b_built = subprocess.Popen(['find', os.path.join(pacdir, 'DOCKER'),
+                                    '-type', 'f'],
+                                   
stdout=subprocess.PIPE).stdout.read().strip()
+        s_built = ''
     elif buildtype == 'dsc' or buildtype == 'collax':
         b_built = subprocess.Popen(['find', os.path.join(pacdir, 'DEBS'),
                                     '-name', '*.deb'],
@@ -510,9 +518,11 @@
         build_type = 'appimage'
     if os.path.basename(build_descr) == 'snapcraft.yaml':
         build_type = 'snapcraft'
-    if build_type not in ['spec', 'dsc', 'kiwi', 'arch', 'collax', 
'livebuild', 'snapcraft', 'appimage']:
+    if os.path.basename(build_descr) == 'Dockerfile':
+        build_type = 'docker'
+    if build_type not in ['spec', 'dsc', 'kiwi', 'arch', 'collax', 
'livebuild', 'snapcraft', 'appimage', 'docker']:
         raise oscerr.WrongArgs(
-                'Unknown build type: \'%s\'. Build description should end in 
.spec, .dsc, .kiwi, or .livebuild. Or being named PKGBUILD, build.collax, 
appimage.yml or snapcraft.yaml' \
+                'Unknown build type: \'%s\'. Build description should end in 
.spec, .dsc, .kiwi, or .livebuild. Or being named PKGBUILD, build.collax, 
appimage.yml, snapcraft.yaml or Dockerfile' \
                         % build_type)
     if not os.path.isfile(build_descr):
         raise oscerr.WrongArgs('Error: build description file named \'%s\' 
does not exist.' % build_descr)
@@ -594,6 +604,9 @@
             pac = '_repository'
         else:
             pac = store_read_package(os.curdir)
+    if opts.multibuild_package:
+        buildargs.append('--buildflavor=%s' % opts.multibuild_package)
+        pac = pac + ":" + opts.multibuild_package
     if opts.shell:
         buildargs.append("--shell")
 
@@ -948,29 +961,41 @@
         if old_pkg_dir != None:
             buildargs.append('--oldpackages=%s' % old_pkg_dir)
 
-    # Make packages from buildinfo available as repos for kiwi
-    if build_type == 'kiwi':
+    # Make packages from buildinfo available as repos for kiwi/docker
+    if build_type == 'kiwi' or build_type == 'docker':
         if os.path.exists('repos'):
             shutil.rmtree('repos')
+        if os.path.exists('containers'):
+            shutil.rmtree('containers')
         os.mkdir('repos')
         for i in bi.deps:
             if not i.extproject:
                 # remove
                 bi.deps.remove(i)
                 continue
+            if i.notmeta:
+                continue
             # project
             pdir = str(i.extproject).replace(':/', ':')
             # repo
             rdir = str(i.extrepository).replace(':/', ':')
             # arch
             adir = i.repoarch
-            # project/repo
-            prdir = "repos/"+pdir+"/"+rdir
-            # project/repo/arch
-            pradir = prdir+"/"+adir
             # source fullfilename
             sffn = i.fullfilename
             filename = sffn.split("/")[-1]
+            # project/repo
+            if i.name.startswith("container:"):
+                prdir = "containers/"+pdir+"/"+rdir
+                pradir = prdir
+                filename = filename[10:]
+                if build_type == 'kiwi':
+                    buildargs.append('--kiwi-parameter')
+                    buildargs.append('--set-container-derived-from=dir://./' + 
prdir + "/" + filename)
+            else:
+                prdir = "repos/"+pdir+"/"+rdir
+                # project/repo/arch
+                pradir = prdir+"/"+adir
             # target fullfilename
             tffn = pradir+"/"+filename
             if not os.path.exists(os.path.join(pradir)):
@@ -990,6 +1015,8 @@
                             os.link(path + "/" + filename, tffn)
                         else:
                             os.symlink(path + "/" + filename, tffn)
+
+    if build_type == 'kiwi':
         # Is a obsrepositories tag used?
         try:
             tree = ET.parse(build_descr)
@@ -1065,7 +1092,10 @@
     for i in bi.deps:
         if i.hdrmd5:
             from .util import packagequery
-            hdrmd5 = packagequery.PackageQuery.queryhdrmd5(i.fullfilename)
+            if i.name.startswith('container:'):
+                hdrmd5 = dgst(i.fullfilename)
+            else:
+                hdrmd5 = packagequery.PackageQuery.queryhdrmd5(i.fullfilename)
             if not hdrmd5:
                 print("Error: cannot get hdrmd5 for %s" % i.fullfilename)
                 sys.exit(1)
@@ -1075,7 +1105,7 @@
 
     print('Writing build configuration')
 
-    if build_type == 'kiwi':
+    if build_type == 'kiwi' or build_type == 'docker':
         rpmlist = [ '%s %s\n' % (i.name, i.fullfilename) for i in bi.deps if 
not i.noinstall ]
     else:
         rpmlist = [ '%s %s\n' % (i.name, i.fullfilename) for i in bi.deps ]
@@ -1091,9 +1121,9 @@
     rpmlist.append('preinstall: ' + ' '.join(bi.preinstall_list) + '\n')
     rpmlist.append('vminstall: ' + ' '.join(bi.vminstall_list) + '\n')
     rpmlist.append('runscripts: ' + ' '.join(bi.runscripts_list) + '\n')
-    if build_type != 'kiwi' and bi.noinstall_list:
+    if build_type != 'kiwi' and build_type != 'docker' and bi.noinstall_list:
         rpmlist.append('noinstall: ' + ' '.join(bi.noinstall_list) + '\n')
-    if build_type != 'kiwi' and bi.installonly_list:
+    if build_type != 'kiwi' and build_type != 'docker' and bi.installonly_list:
         rpmlist.append('installonly: ' + ' '.join(bi.installonly_list) + '\n')
 
     rpmlist_file = NamedTemporaryFile(prefix='rpmlist.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/osc/cmdln.py new/osc-0.159.0/osc/cmdln.py
--- old/osc-0.158.0/osc/cmdln.py        2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/osc/cmdln.py        2017-07-19 00:48:15.000000000 +0200
@@ -45,8 +45,9 @@
 import cmd
 import optparse
 import sys
+import time
 from pprint import pprint
-from datetime import date
+from datetime import datetime
 
 # this is python 2.x style
 def introspect_handler_2(handler):
@@ -619,9 +620,10 @@
         usage:
             ${name} man
         """
+        mandate = 
datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH', time.time())))
         self.stdout.write(bytes(
             self.man_header % {
-                'date': date.today().strftime('%b %Y'),
+                'date': mandate.strftime('%b %Y'),
                 'version': self.get_version(),
                 'name': self.name,
                 'ucname': self.name.upper()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/osc/commandline.py 
new/osc-0.159.0/osc/commandline.py
--- old/osc-0.158.0/osc/commandline.py  2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/osc/commandline.py  2017-07-19 00:48:15.000000000 +0200
@@ -12,6 +12,7 @@
 import time
 import imp
 import inspect
+import os
 try:
     from urllib.parse import urlsplit
     from urllib.error import HTTPError
@@ -1042,7 +1043,7 @@
                   help='specify message TEXT')
     @cmdln.option('-r', '--revision', metavar='REV',
                   help='specify a certain source revision ID (the md5 sum) for 
the source package')
-    @cmdln.option('-s', '--supersede', metavar='SUPERSEDE',
+    @cmdln.option('-s', '--supersede', metavar='REQUEST_ID',
                   help='Superseding another request by this one')
     @cmdln.option('--nodevelproject', action='store_true',
                   help='do not follow a defined devel project ' \
@@ -1678,7 +1679,7 @@
                   help='specify message TEXT')
     @cmdln.option('-r', '--revision', metavar='REV',
                   help='for "create", specify a certain source revision ID 
(the md5 sum)')
-    @cmdln.option('-s', '--supersede', metavar='SUPERSEDE',
+    @cmdln.option('-s', '--supersede', metavar='REQUEST_ID',
                   help='Superseding another request by this one')
     @cmdln.option('--nodevelproject', action='store_true',
                   help='do not follow a defined devel project ' \
@@ -1802,6 +1803,7 @@
             osc requestmaintainership                            # for current 
user in checked out package
             osc requestmaintainership USER                       # for 
specified user in checked out package
             osc requestmaintainership PROJECT                    # for current 
user if cwd is not a checked out package
+            osc requestmaintainership PROJECT group:NAME         # request for 
specified group
             osc requestmaintainership PROJECT PACKAGE            # for current 
user
             osc requestmaintainership PROJECT PACKAGE USER       # request for 
specified user
             osc requestmaintainership PROJECT PACKAGE group:NAME # request for 
specified group
@@ -1817,7 +1819,11 @@
         if len(args) == 2:
             project = args[0]
             package = args[1]
-            user = conf.get_apiurl_usr(apiurl)
+            if package.startswith('group:'):
+                user = package
+                package = None
+            else:
+                user = conf.get_apiurl_usr(apiurl)
         elif len(args) == 3:
             project = args[0]
             package = args[1]
@@ -3062,7 +3068,7 @@
                         help='specify incident number to merge in')
     @cmdln.option('--incident-project', metavar='INCIDENT_PROJECT',
                         help='specify incident project to merge in')
-    @cmdln.option('-s', '--supersede', metavar='SUPERSEDE',
+    @cmdln.option('-s', '--supersede', metavar='REQUEST_ID',
                   help='Superseding another request by this one')
     @cmdln.alias("mr")
     def do_maintenancerequest(self, subcmd, opts, *args):
@@ -3753,6 +3759,8 @@
     @cmdln.option('--oldpkg', metavar='OLDPKG',
                   help='package to compare against'
                   ' (deprecated, use 3 argument form)')
+    @cmdln.option('--issues-only', action='store_true',
+                        help='show only issues in diff')
     @cmdln.option('-M', '--meta', action='store_true',
                         help='diff meta data')
     @cmdln.option('-r', '--revision', metavar='N[:M]',
@@ -3842,9 +3850,12 @@
                             old_project, old_package, rev1,
                             new_project, new_package, rev2, not opts.plain, 
opts.missingok,
                             meta=opts.meta,
-                            expand=not opts.unexpand)
-
-        run_pager(rdiff)
+                            expand=not opts.unexpand,
+                            onlyissues=opts.issues_only)
+        if opts.issues_only:
+            print(rdiff)
+        else:
+            run_pager(rdiff)
 
     def _pdiff_raise_non_existing_package(self, project, package, msg = None):
         raise oscerr.PackageMissing(project, package, msg or '%s/%s does not 
exist.' % (project, package))
@@ -5053,6 +5064,9 @@
         if not opts.no_multibuild:
             kwargs['multibuild'] = kwargs['locallink'] = True
         if opts.xml or opts.csv:
+            # hmm should we filter excluded repos here as well?
+            # for now, ignore --show-excluded
+            del kwargs['showexcl']
             for xml in get_package_results(**kwargs):
                 if opts.xml:
                     print(xml, end='')
@@ -5775,7 +5789,7 @@
                 for subarch in osc.build.can_also_build.get(mainarch):
                     all_archs.append(subarch)
             for arg in args:
-                if arg.endswith('.spec') or arg.endswith('.dsc') or 
arg.endswith('.kiwi') or arg.endswith('.livebuild') or arg == 'PKGBUILD' or arg 
== 'build.collax':
+                if arg.endswith('.spec') or arg.endswith('.dsc') or 
arg.endswith('.kiwi') or arg.endswith('.livebuild') or arg == 'PKGBUILD' or arg 
== 'build.collax' or arg == 'Dockerfile':
                     arg_descr = arg
                 else:
                     if (arg == osc.build.hostarch or arg in all_archs) and 
arg_arch is None:
@@ -5836,7 +5850,8 @@
         # can be implemented using
         # reduce(lambda x, y: x + y, (glob.glob(x) for x in ('*.spec', 
'*.dsc', '*.kiwi')))
         # but be a bit more readable :)
-        descr = glob.glob('*.spec') + glob.glob('*.dsc') + glob.glob('*.kiwi') 
+ glob.glob('*.livebuild') + glob.glob('PKGBUILD') + glob.glob('build.collax')
+        descr = glob.glob('*.spec') + glob.glob('*.dsc') + glob.glob('*.kiwi') 
+ glob.glob('*.livebuild') \
+                + glob.glob('PKGBUILD') + glob.glob('build.collax') + 
glob.glob('Dockerfile')
 
         # FIXME:
         # * request repos from server and select by build type.
@@ -5853,7 +5868,12 @@
                 with tempfile.NamedTemporaryFile() as f:
                     f.write(bc)
                     f.flush()
-                    recipe = return_external('/usr/lib/build/queryconfig', 
'--dist', f.name, 'type')
+                    # some distros like Debian rename and move build to 
obs-build
+                    if not os.path.isfile('/usr/lib/build/queryconfig') and 
os.path.isfile('/usr/lib/obs-build/queryconfig'):
+                        queryconfig = '/usr/lib/obs-build/queryconfig'
+                    else:
+                        queryconfig = '/usr/lib/build/queryconfig'
+                    recipe = return_external(queryconfig, '--dist', f.name, 
'type')
                 recipe = recipe.strip()
                 if recipe == 'arch':
                     recipe = 'PKGBUILD'
@@ -5951,7 +5971,7 @@
                   help='build a package which does not exist on the server')
     @cmdln.option('--linksources', action='store_true',
                   help='use hard links instead of a deep copied source')
-    @cmdln.option('--vm-memory', metavar='TYPE',
+    @cmdln.option('--vm-memory', metavar='MEMORY',
                   help='use given MB for VM')
     @cmdln.option('--vm-type', metavar='TYPE',
                   help='use VM type TYPE (e.g. kvm)')
@@ -7484,6 +7504,9 @@
         else:
             project_dir = os.curdir
 
+        if not is_project_dir(project_dir):
+            raise oscerr.WrongArgs("'%s' is no project working copy" % 
project_dir)
+
         if conf.config['do_package_tracking']:
             project = Project(project_dir)
         else:
@@ -7955,6 +7978,8 @@
                   help='(default) force expansion of linked packages.')
     @cmdln.option('-u', '--unexpand', action='store_true',
                   help='always work with unexpanded packages.')
+    @cmdln.option('-D', '--deleted', action='store_true',
+                        help='access file in a deleted package')
     @cmdln.option('-M', '--meta', action='store_true',
                         help='list meta data files')
     @cmdln.alias('blame')
@@ -8008,10 +8033,12 @@
             query['view'] = "blame"
         if opts.meta:
             query['meta'] = 1
+        if opts.deleted:
+            query['deleted'] = 1
         if opts.revision:
             query['rev'] = opts.revision
         if not opts.unexpand:
-            query['rev'] = show_upstream_srcmd5(apiurl, project, package, 
expand=True, revision=opts.revision, meta=opts.meta)
+            query['rev'] = show_upstream_srcmd5(apiurl, project, package, 
expand=True, revision=opts.revision, meta=opts.meta, deleted=opts.deleted)
             query['expand'] = 1 # important for blame case to follow links in 
old revisions
         u = makeurl(apiurl, ['source', project, package, filename], 
query=query)
         if subcmd == 'less':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/osc/conf.py new/osc-0.159.0/osc/conf.py
--- old/osc-0.158.0/osc/conf.py 2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/osc/conf.py 2017-07-19 00:48:15.000000000 +0200
@@ -183,6 +183,12 @@
             'vc-cmd': '/usr/lib/build/vc'
 }
 
+# some distros like Debian rename and move build to obs-build
+if not os.path.isfile('/usr/bin/build') and 
os.path.isfile('/usr/bin/obs-build'):
+    DEFAULTS['build-cmd'] = '/usr/bin/obs-build'
+if not os.path.isfile('/usr/lib/build/vc') and 
os.path.isfile('/usr/lib/obs-build/vc'):
+    DEFAULTS['vc-cmd'] = '/usr/lib/obs-build/vc'
+
 # being global to this module, this dict can be accessed from outside
 # it will hold the parsed configuration
 config = DEFAULTS.copy()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/osc/core.py new/osc-0.159.0/osc/core.py
--- old/osc-0.158.0/osc/core.py 2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/osc/core.py 2017-07-19 00:48:15.000000000 +0200
@@ -5,7 +5,7 @@
 
 from __future__ import print_function
 
-__version__ = '0.158'
+__version__ = '0.159'
 
 # __store_version__ is to be incremented when the format of the working copy
 # "store" changes in an incompatible way. Please add any needed migration
@@ -3743,7 +3743,7 @@
         f.sync()
 
 
-def show_files_meta(apiurl, prj, pac, revision=None, expand=False, 
linkrev=None, linkrepair=False, meta=False):
+def show_files_meta(apiurl, prj, pac, revision=None, expand=False, 
linkrev=None, linkrepair=False, meta=False, deleted=False):
     query = {}
     if revision:
         query['rev'] = revision
@@ -3755,6 +3755,8 @@
         query['linkrev'] = 'base'
     if meta:
         query['meta'] = 1
+    if deleted:
+        query['deleted'] = 1
     if expand:
         query['expand'] = 1
     if linkrepair:
@@ -3762,8 +3764,8 @@
     f = http_GET(makeurl(apiurl, ['source', prj, pac], query=query))
     return f.read()
 
-def show_upstream_srcmd5(apiurl, prj, pac, expand=False, revision=None, 
meta=False, include_service_files=False):
-    m = show_files_meta(apiurl, prj, pac, expand=expand, revision=revision, 
meta=meta)
+def show_upstream_srcmd5(apiurl, prj, pac, expand=False, revision=None, 
meta=False, include_service_files=False, deleted=False):
+    m = show_files_meta(apiurl, prj, pac, expand=expand, revision=revision, 
meta=meta, deleted=deleted)
     et = ET.fromstring(''.join(m))
     if include_service_files:
         try:
@@ -4002,9 +4004,11 @@
         (fd, filename) = tempfile.mkstemp(prefix='osc-editor', suffix=suffix)
         os.close(fd)
         mtime = os.stat(filename).st_mtime
+        ri_err = False
         while True:
-            file_changed = _edit_message_open_editor(filename, data, mtime)
-            msg = open(filename).read()
+            if not ri_err:
+                file_changed = _edit_message_open_editor(filename, data, mtime)
+                msg = open(filename).read()
             if delim:
                 msg = msg.split(delim)[0].rstrip()
             if msg and file_changed:
@@ -4019,7 +4023,10 @@
                 elif ri in 'cC':
                     break
                 elif ri in 'eE':
-                    pass
+                    ri_err = False
+                else:
+                    print("%s is not a valid option." % ri)
+                    ri_err = True
     finally:
         os.unlink(filename)
     return msg
@@ -4419,6 +4426,9 @@
         print('There are already the following submit request: %s.' % \
               ', '.join([i.reqid for i in reqs]))
         repl = raw_input('Supersede the old requests? (y/n/c) ')
+        while repl.lower() not in ['c', 'y', 'n']:
+            print('%s is not a valid option.' % repl)
+            repl = raw_input('Supersede the old requests? (y/n/c) ')
         if repl.lower() == 'c':
             print('Aborting', file=sys.stderr)
             raise oscerr.UserAbort()
@@ -4437,6 +4447,9 @@
         print('There are already the following maintenance incident request: 
%s.' % \
               ', '.join([i.reqid for i in reqs]))
         repl = raw_input('Supersede the old requests? (y/n/c) ')
+        while repl.lower() not in ['c', 'y', 'n']:
+            print('%s is not a valid option.' % repl)
+            repl = raw_input('Supersede the old requests? (y/n/c) ')
         if repl.lower() == 'c':
             print('Aborting', file=sys.stderr)
             raise oscerr.UserAbort()
@@ -4649,7 +4662,7 @@
 def server_diff(apiurl,
                 old_project, old_package, old_revision,
                 new_project, new_package, new_revision,
-                unified=False, missingok=False, meta=False, expand=True, 
full=True):
+                unified=False, missingok=False, meta=False, expand=True, 
onlyissues=False, full=True):
     query = {'cmd': 'diff'}
     if expand:
         query['expand'] = 1
@@ -4670,21 +4683,31 @@
     if full:
         query['filelimit'] = 0
         query['tarlimit'] = 0
+    if onlyissues:
+        query['onlyissues'] = 1
+        query['view'] = 'xml'
+        query['unified'] = 0
 
     u = makeurl(apiurl, ['source', new_project, new_package], query=query)
-
     f = http_POST(u)
+    if onlyissues:
+        issue_list = []
+        root = ET.fromstring(f.read())
+        node = root.find('issues')
+        for issuenode in node.findall('issue'):
+            issue_list.append(issuenode.get('label'))
+        return '\n'.join(issue_list)
     return f.read()
 
 def server_diff_noex(apiurl,
                 old_project, old_package, old_revision,
                 new_project, new_package, new_revision,
-                unified=False, missingok=False, meta=False, expand=True):
+                unified=False, missingok=False, meta=False, expand=True, 
onlyissues=False):
     try:
         return server_diff(apiurl,
                             old_project, old_package, old_revision,
                             new_project, new_package, new_revision,
-                            unified, missingok, meta, expand)
+                            unified, missingok, meta, expand, onlyissues)
     except HTTPError as e:
         msg = None
         body = None
@@ -6009,17 +6032,20 @@
         srcmd5 = node.get('srcmd5')
         versrel = node.get('versrel')
         bcnt = int(node.get('bcnt'))
+        duration = node.get('duration')
         t = time.gmtime(int(node.get('time')))
         t = time.strftime('%Y-%m-%d %H:%M:%S', t)
+        if duration == None:
+           duration = ""
 
         if format == 'csv':
-            r.append('%s|%s|%s|%s.%d' % (t, srcmd5, rev, versrel, bcnt))
+            r.append('%s|%s|%s|%s.%d|%s' % (t, srcmd5, rev, versrel, bcnt, 
duration))
         else:
             bversrel='%s.%d' % (versrel, bcnt)
-            r.append('%s   %s    %s %s' % (t, srcmd5, bversrel.ljust(16)[:16], 
rev))
+            r.append('%s   %s    %s %s %s' % (t, srcmd5, 
bversrel.ljust(16)[:16], rev, duration.rjust(10)))
 
     if format == 'text':
-        r.insert(0, 'time                  srcmd5                              
vers-rel.bcnt    rev')
+        r.insert(0, 'time                  srcmd5                              
vers-rel.bcnt    rev   duration')
 
     return r
 
@@ -6768,9 +6794,9 @@
     prj_dir, pac_dir = getPrjPacPaths(pathname)
     if is_project_dir(prj_dir):
         global store
-        if not os.path.exists(pac_dir+store):
+        if not os.path.exists(os.path.join(pathname, store)):
             prj = prj_obj or Project(prj_dir, False)
-            Package.init_package(prj.apiurl, prj.name, pac_dir, pac_dir)
+            Package.init_package(prj.apiurl, prj.name, pac_dir, pathname)
             prj.addPackage(pac_dir)
             print(statfrmt('A', os.path.normpath(pathname)))
         else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osc-0.158.0/osc/fetch.py new/osc-0.159.0/osc/fetch.py
--- old/osc-0.158.0/osc/fetch.py        2017-05-08 21:41:29.000000000 +0200
+++ new/osc-0.159.0/osc/fetch.py        2017-07-19 00:48:15.000000000 +0200
@@ -17,7 +17,7 @@
 
 from urlgrabber.grabber import URLGrabber, URLGrabError
 from urlgrabber.mirror import MirrorGroup
-from .core import makeurl, streamfile
+from .core import makeurl, streamfile, dgst
 from .util import packagequery, cpio
 from . import conf
 from . import oscerr
@@ -129,7 +129,12 @@
                                               '(see .errors file)')
                     if package == '_repository':
                         n = re.sub(r'\.pkg\.tar\..z$', '.arch', hdr.filename)
-                        pac = pkgs[n.rsplit('.', 1)[0]]
+                        if n.startswith('container:'):
+                            n = re.sub(r'\.tar\..z$', '.tar', hdr.filename)
+                            pac = pkgs[n.rsplit('.', 1)[0]]
+                            pac.canonname = hdr.filename
+                        else:
+                            pac = pkgs[n.rsplit('.', 1)[0]]
                     else:
                         # this is a kiwi product
                         pac = pkgs[hdr.filename]
@@ -206,14 +211,18 @@
 
     def move_package(self, tmpfile, destdir, pac_obj=None):
         import shutil
-        pkgq = packagequery.PackageQuery.query(tmpfile, extra_rpmtags=(1044, 
1051, 1052))
-        if pkgq:
-            canonname = pkgq.canonname()
-        else:
-            if pac_obj is None:
-                print('Unsupported file type: ', tmpfile, file=sys.stderr)
-                sys.exit(1)
-            canonname = pac_obj.binary
+        canonname = None
+        if pac_obj and pac_obj.name.startswith('container:'):
+            canonname = pac_obj.canonname
+        if canonname is None:
+            pkgq = packagequery.PackageQuery.query(tmpfile, 
extra_rpmtags=(1044, 1051, 1052))
+            if pkgq:
+                canonname = pkgq.canonname()
+            else:
+                if pac_obj is None:
+                    print('Unsupported file type: ', tmpfile, file=sys.stderr)
+                    sys.exit(1)
+                canonname = pac_obj.binary
 
         fullfilename = os.path.join(destdir, canonname)
         if pac_obj is not None:
@@ -241,7 +250,10 @@
                 cached += 1
                 if i.hdrmd5:
                     from .util import packagequery
-                    hdrmd5 = 
packagequery.PackageQuery.queryhdrmd5(i.fullfilename)
+                    if i.name.startswith('container:'):
+                        hdrmd5 = dgst(i.fullfilename)
+                    else:
+                        hdrmd5 = 
packagequery.PackageQuery.queryhdrmd5(i.fullfilename)
                     if not hdrmd5 or hdrmd5 != i.hdrmd5:
                         os.unlink(i.fullfilename)
                         cached -= 1

++++++ osc.dsc ++++++
--- /var/tmp/diff_new_pack.k4PVI5/_old  2017-08-23 11:54:13.638671100 +0200
+++ /var/tmp/diff_new_pack.k4PVI5/_new  2017-08-23 11:54:13.646669974 +0200
@@ -1,6 +1,6 @@
 Format: 1.0
 Source: osc
-Version: 0.158.0
+Version: 0.159.0-0
 Binary: osc
 Maintainer: Adrian Schroeter <adr...@suse.de>
 Architecture: any


Reply via email to