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