Hello community, here is the log from the commit of package osc for openSUSE:Factory checked in at 2013-02-25 20:39:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/osc (Old) and /work/SRC/openSUSE:Factory/.osc.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osc", Maintainer is "adr...@suse.com" Changes: -------- --- /work/SRC/openSUSE:Factory/osc/osc.changes 2013-02-01 09:49:26.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.osc.new/osc.changes 2013-02-25 20:39:43.000000000 +0100 @@ -2 +2,14 @@ -Thu Jan 31 15:45:58 UTC 2013 - adr...@suse.com +Mon Feb 25 14:41:27 UTC 2013 - adr...@suse.de + +- update to 0.139.0: + - bugfixes for owner search + - support generic emulator virtualization + - added "--host" argument to "osc build" (used to perform the build on a remote host) + - "search --maintained" is obsolete. Abort on usage. + - "maintainer --user" support to search for all official maintained instance for given user or group + - added support to abort a commit after displaying a default commit message in $EDITOR. As a result + other commands like "submitrequest" will also ask if the user wants to proceed if the default + comment/message wasn't changed. + +------------------------------------------------------------------- +Thu Jan 31 15:45:58 UTC 2013 - adr...@suse.de Old: ---- osc-0.138.0.tar.gz New: ---- osc-0.139.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ osc.spec ++++++ --- /var/tmp/diff_new_pack.Iz2uE3/_old 2013-02-25 20:39:45.000000000 +0100 +++ /var/tmp/diff_new_pack.Iz2uE3/_new 2013-02-25 20:39:45.000000000 +0100 @@ -17,7 +17,7 @@ Name: osc -Version: 0.138.0 +Version: 0.139.0 Release: 0 Summary: openSUSE Build Service Commander License: GPL-2.0+ ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Iz2uE3/_old 2013-02-25 20:39:46.000000000 +0100 +++ /var/tmp/diff_new_pack.Iz2uE3/_new 2013-02-25 20:39:46.000000000 +0100 @@ -1,6 +1,6 @@ <services> <service name="tar_scm" mode="disabled"> - <param name="version">0.138.0</param> + <param name="version">0.139.0</param> <param name="url">git://github.com/openSUSE/osc.git</param> <param name="scm">git</param> </service> ++++++ osc-0.138.0.tar.gz -> osc-0.139.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/NEWS new/osc-0.139.0/NEWS --- old/osc-0.138.0/NEWS 2013-01-31 16:46:36.000000000 +0100 +++ new/osc-0.139.0/NEWS 2013-02-25 15:41:16.000000000 +0100 @@ -1,3 +1,12 @@ +0.139 + - support generic emulator virtualization + - added "--host" argument to "osc build" (used to perform the build on a remote host) + - "search --maintained" is obsolete. Abort on usage. + - "maintainer --user" support to search for all official maintained instance for given user or group + - added support to abort a commit after displaying a default commit message in $EDITOR. As a result + other commands like "submitrequest" will also ask if the user wants to proceed if the default + comment/message wasn't changed. + 0.138 - add support to remove repositories recursively (mostly only usefull for admins) - submitrequest: old not anymore used maintenance code got removed. It is possible now diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/build.py new/osc-0.139.0/osc/build.py --- old/osc-0.138.0/osc/build.py 2013-01-31 16:46:36.000000000 +0100 +++ new/osc-0.139.0/osc/build.py 2013-02-25 15:41:16.000000000 +0100 @@ -41,10 +41,11 @@ 'ppc', 'ppc64', 's390', 's390x', 'sparc64v', 'sparcv9v', 'sparcv9', 'sparcv8', 'sparc', - 'hppa' + 'hppa', ] can_also_build = { + 'aarch64':['aarch64'], 'armv4l': [ 'armv4l' ], 'armv6l' :[ 'armv4l', 'armv5l', 'armv6l', 'armv5el', 'armv6el' ], 'armv7l' :[ 'armv4l', 'armv5l', 'armv6l', 'armv7l', 'armv5el', 'armv6el', 'armv7el' ], @@ -413,6 +414,8 @@ buildargs.append('--changelog') if opts.root: build_root = opts.root + if opts.target: + buildargs.append('--target=%s' % opts.target) if opts.jobs: buildargs.append('--jobs=%s' % opts.jobs) elif config['build-jobs'] > 1: @@ -651,7 +654,7 @@ elif hostarch != bi.buildarch: if not bi.buildarch in can_also_build.get(hostarch, []): # OBSOLETE: qemu_can_build should not be needed anymore since OBS 2.3 - if not bi.buildarch in qemu_can_build: + if vm_type != "emulator" and not bi.buildarch in qemu_can_build: print >>sys.stderr, 'Error: hostarch \'%s\' cannot build \'%s\'.' % (hostarch, bi.buildarch) return 1 print >>sys.stderr, 'WARNING: It is guessed to build on hostarch \'%s\' for \'%s\' via QEMU.' % (hostarch, bi.buildarch) @@ -812,17 +815,16 @@ else: os.symlink(path + "/" + filename, tffn) - if bi.pacsuffix == 'rpm': + if vm_type == "xen" or vm_type == "kvm" or vm_type == "lxc": + print 'Skipping verification of package signatures due to secure VM build' + elif bi.pacsuffix == 'rpm': if opts.no_verify: print 'Skipping verification of package signatures' else: print 'Verifying integrity of cached packages' verify_pacs(bi) - elif bi.pacsuffix == 'deb': - if vm_type == "xen" or vm_type == "kvm" or vm_type == "lxc": - print 'Skipping verification of package signatures due to secure VM build' - elif opts.no_verify or opts.noinit: + if opts.no_verify or opts.noinit: print 'Skipping verification of package signatures' else: print 'WARNING: deb packages get not verified, they can compromise your system !' @@ -865,7 +867,7 @@ my_build_swap = build_root + '/swap' vm_options = [ '--vm-type=%s'%vm_type ] - if vm_type != 'lxc': + if vm_type != 'lxc' and vm_type != 'emulator': vm_options += [ '--vm-disk=' + my_build_device ] vm_options += [ '--vm-swap=' + my_build_swap ] vm_options += [ '--logfile=%s/.build.log' % build_root ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/commandline.py new/osc-0.139.0/osc/commandline.py --- old/osc-0.138.0/osc/commandline.py 2013-01-31 16:46:36.000000000 +0100 +++ new/osc-0.139.0/osc/commandline.py 2013-02-25 15:41:16.000000000 +0100 @@ -9,6 +9,7 @@ import oscerr import sys import time +import urlparse from optparse import SUPPRESS_HELP @@ -913,11 +914,11 @@ # loop via all packages for checking their state for p in meta_get_packagelist(apiurl, project): - print "XXX", p # get _link info from server, that knows about the local state ... u = makeurl(apiurl, ['source', project, p]) f = http_GET(u) root = ET.parse(f).getroot() + target_project = None if len(args) == 1: target_project = args[0] linkinfo = root.find('linkinfo') @@ -968,7 +969,7 @@ if actionxml != "": xml = """<request> %s <state name="new"/> <description>%s</description> </request> """ % \ (actionxml, cgi.escape(opts.message or "")) - u = makeurl(apiurl, ['request'], query='cmd=create') + u = makeurl(apiurl, ['request'], query='cmd=create&addrevision=1') f = http_POST(u, data=xml) root = ET.parse(f).getroot() @@ -1089,7 +1090,7 @@ rdiff = None if opts.diff or not opts.message: try: - rdiff = 'old: %s/%s\nnew: %s/%s rev %s' %(dst_project, dst_package, src_project, src_package, rev) + rdiff = 'old: %s/%s\nnew: %s/%s rev %s\n' %(dst_project, dst_package, src_project, src_package, rev) rdiff += server_diff(apiurl, dst_project, dst_package, None, src_project, src_package, rev, True) @@ -1293,7 +1294,7 @@ rdiff = None if opts.diff: try: - rdiff = 'old: %s/%s\nnew: %s/%s' %(dst_project, dst_package, src_project, src_package) + rdiff = 'old: %s/%s\nnew: %s/%s\n' %(dst_project, dst_package, src_project, src_package) rdiff += server_diff(apiurl, dst_project, dst_package, opts.revision, src_project, src_package, None, True) @@ -3254,7 +3255,7 @@ for pac in pacs: if not rev2: for i in pac.get_diff(rev1): - sys.stdout.write(''.join(i)) + diff += ''.join(i) else: diff += server_diff_noex(pac.apiurl, pac.prjname, pac.name, rev1, pac.prjname, pac.name, rev2, not opts.plain, opts.missingok) @@ -5089,7 +5090,7 @@ print row - def parse_repoarchdescr(self, args, noinit = False, alternative_project = None, ignore_descr = False): + def parse_repoarchdescr(self, args, noinit = False, alternative_project = None, ignore_descr = False, vm_type = None): """helper to parse the repo, arch and build description from args""" import osc.build import glob @@ -5099,10 +5100,10 @@ if arg.endswith('.spec') or arg.endswith('.dsc') or arg.endswith('.kiwi') or arg == 'PKGBUILD': arg_descr = arg else: - if (arg in osc.build.can_also_build.get(osc.build.hostarch, []) - or arg in osc.build.qemu_can_build - or arg in osc.build.hostarch) and arg_arch is None: + if osc.build.can_also_build.get(arg) != None and arg_arch is None: arg_arch = arg + if not (arg in osc.build.can_also_build.get(osc.build.hostarch, []) or arg in osc.build.hostarch): + print "WARNING: native compile is not possible, an emulator must be configured!" elif not arg_repository: arg_repository = arg else: @@ -5244,6 +5245,8 @@ help='use hard links instead of a deep copied source') @cmdln.option('--vm-type', metavar='TYPE', help='use VM type TYPE (e.g. kvm)') + @cmdln.option('--target', metavar='TARGET', + help='define target plattform') @cmdln.option('--alternative-project', metavar='PROJECT', help='specify the build target project') @cmdln.option('-d', '--debuginfo', action='store_true', @@ -5264,6 +5267,8 @@ help='take previous build from DIR (special values: _self, _link)') @cmdln.option('--shell', action='store_true', help=SUPPRESS_HELP) + @cmdln.option('--host', metavar='HOST', + help='perform the build on a remote server - user@server:~/remote/directory') def do_build(self, subcmd, opts, *args): """${cmd_name}: Build a package on your local machine @@ -5320,7 +5325,7 @@ if len(args) > 3: raise oscerr.WrongArgs('Too many arguments') - args = self.parse_repoarchdescr(args, opts.noinit or opts.offline, opts.alternative_project) + args = self.parse_repoarchdescr(args, opts.noinit or opts.offline, opts.alternative_project, False, opts.vm_type) # check for source services r = None @@ -5362,7 +5367,142 @@ raise oscerr.WrongOptions('--offline and --preload are mutually exclusive') print 'Building %s for %s/%s' % (args[2], args[0], args[1]) - return osc.build.main(self.get_api_url(), opts, args) + if not opts.host: + return osc.build.main(self.get_api_url(), opts, args) + else: + return self._do_rbuild(subcmd, opts, *args) + + def _do_rbuild(self, subcmd, opts, *args): + + # drop the --argument, value tuple from the list + def drop_arg2(lst, name): + if not name: return lst + while name in lst: + i = lst.index(name) + lst.pop(i+1) + lst.pop(i) + return lst + + # change the local directory to more suitable remote one in hostargs + # and perform the rsync to such location as well + def rsync_dirs_2host(hostargs, short_name, long_name, dirs): + + drop_arg2(hostargs, short_name) + drop_arg2(hostargs, long_name) + + for pdir in dirs: + # drop the last '/' from pdir name - this is because + # rsync foo remote:/bar create /bar/foo on remote machine + # rsync foo/ remote:/bar copy the content of foo in the /bar + if pdir[-1:] == os.path.sep: + pdir = pdir[:-1] + + hostprefer = os.path.join( + hostpath, + basename, + "%s__" % (long_name.replace('-','_')), + os.path.basename(os.path.abspath(pdir))) + hostargs.append(long_name) + hostargs.append(hostprefer) + + rsync_prefer_cmd = ['rsync', '-az', '-delete', '-e', 'ssh', + pdir, + "%s:%s" % (hostname, os.path.dirname(hostprefer))] + print 'Run: %s' % " ".join(rsync_prefer_cmd) + ret = subprocess.call(rsync_prefer_cmd) + if ret != 0: + return ret + + return 0 + + + cwd = os.getcwdu() + basename = os.path.basename(cwd) + if not ':' in opts.host: + hostname = opts.host + hostpath = "~/" + else: + hostname, hostpath = opts.host.split(':', 1) + + # arguments for build: use all arguments behind build and drop --host 'HOST' + hostargs = sys.argv[sys.argv.index(subcmd)+1:] + drop_arg2(hostargs, '--host') + + # global arguments: use first '-' up to subcmd + gi = 0 + for i, a in enumerate(sys.argv): + if a == subcmd: + break + if a[0] == '-': + gi = i + break + + if gi: + hostglobalargs = sys.argv[gi : sys.argv.index(subcmd)+1] + else: + hostglobalargs = (subcmd, ) + + # keep-pkgs + hostkeep = None + if opts.keep_pkgs: + drop_arg2(hostargs, '-k') + drop_arg2(hostargs, '--keep-pkgs') + hostkeep = os.path.join( + hostpath, + basename, + "__keep_pkgs__", + "") # <--- this adds last '/', thus triggers correct rsync behavior + hostargs.append('--keep-pkgs') + hostargs.append(hostkeep) + + ### run all commands ### + # 1.) rsync sources + rsync_source_cmd = ['rsync', '-az', '-delete', '-e', 'ssh', cwd, "%s:%s" % (hostname, hostpath)] + print 'Run: %s' % " ".join(rsync_source_cmd) + ret = subprocess.call(rsync_source_cmd) + if ret != 0: + return ret + + # 2.) rsync prefer-pkgs dirs, overlay and rsyns-src + if opts.prefer_pkgs: + ret = rsync_dirs_2host(hostargs, '-p', '--prefer-pkgs', opts.prefer_pkgs) + if ret != 0: + return ret + + for arg, long_name in ((opts.rsyncsrc, '--rsync-src'), (opts.overlay, '--overlay')): + if not arg: continue + ret = rsync_dirs_2host(hostargs, None, long_name, (arg, )) + if ret != 0: + return ret + + # 3.) call osc build + osc_cmd = "osc" + for var in ('OSC_SU_WRAPPER', 'OSC_BUILD_ROOT', 'OSC_PACKAGECACHEDIR'): + if os.getenv(var): + osc_cmd = "%s=%s %s" % (var, os.getenv(var), osc_cmd) + + ssh_cmd = \ + ['ssh', '-t', hostname, + "cd %(remote_dir)s; %(osc_cmd)s %(global_args)s %(local_args)s" % dict( + remote_dir = os.path.join(hostpath, basename), + osc_cmd = osc_cmd, + global_args = " ".join(hostglobalargs), + local_args = " ".join(hostargs)) + ] + print 'Run: %s' % " ".join(ssh_cmd) + build_ret = subprocess.call(ssh_cmd) + if build_ret != 0: + return build_ret + + # 4.) get keep-pkgs back + if opts.keep_pkgs: + ret = rsync_keep_cmd = ['rsync', '-az', '-e', 'ssh', "%s:%s" % (hostname, hostkeep), opts.keep_pkgs] + print 'Run: %s' % " ".join(rsync_keep_cmd) + ret = subprocess.call(rsync_keep_cmd) + if ret != 0: + return ret + + return build_ret @cmdln.option('--local-package', action='store_true', @@ -5404,8 +5544,9 @@ package = os.path.splitext(descr)[0] else: package = store_read_package('.') + apihost = urlparse.urlsplit(self.get_api_url())[1] buildroot = os.environ.get('OSC_BUILD_ROOT', conf.config['build-root']) \ - % {'repo': repository, 'arch': arch, 'project': project, 'package': package} + % {'repo': repository, 'arch': arch, 'project': project, 'package': package, 'apihost': apihost} if not os.path.isdir(buildroot): raise oscerr.OscIOError(None, '\'%s\' is not a directory' % buildroot) @@ -5417,7 +5558,7 @@ else: cmd = [sucmd, 'chroot', buildroot, 'su', '-', user] if suargs: - cmd.insert(1, suargs) + cmd[1:1] = suargs.split() print 'running: %s' % ' '.join(cmd) os.execvp(sucmd, cmd) @@ -5970,7 +6111,7 @@ """${cmd_name}: show waiting work, packages, projects or requests involving yourself Examples: - # list all tasks where it is expected to work on + # list all open tasks for me osc ${cmd_name} [work] # list packages where I am bugowner osc ${cmd_name} pkg -b @@ -6208,7 +6349,7 @@ @cmdln.option('-m', '--maintainer', action='store_true', help='as -i, but only maintainer') @cmdln.option('--maintained', action='store_true', - help='limit search results to packages with maintained attribute set.') + help='OBSOLETE: please use maintained command instead.') @cmdln.option('-M', '--mine', action='store_true', help='shorthand for --bugowner --package') @cmdln.option('--csv', action='store_true', @@ -6251,6 +6392,9 @@ else: search_term = args[0] + if opts.maintained: + raise oscerr.WrongOptions('The --maintained option is not anymore supported. Please use the maintained command instead.') + # XXX: is it a good idea to make this the default? # support perl symbols: if re.match('^perl\(\w+(::\w+)*\)$', search_term): @@ -6625,6 +6769,10 @@ help='Set the bugowner to specified person') @cmdln.option('-S', '--set-bugowner-request', metavar='user', help='Set the bugowner to specified person via a request') + @cmdln.option('-U', '--user', metavar='USER', + help='All official maintained instances for the specified USER') + @cmdln.option('-G', '--group', metavar='GROUP', + help='All official maintained instances for the specified GROUP') @cmdln.option('-d', '--delete', metavar='user', help='delete a maintainer/bugowner (can be specified via --role)') @cmdln.option('-r', '--role', metavar='role', action='append', default=[], @@ -6633,8 +6781,13 @@ def do_maintainer(self, subcmd, opts, *args): """${cmd_name}: Show maintainers of a project/package - osc maintainer <options> + # Search for official maintained sources in OBS instance osc maintainer BINARY <options> + osc maintainer -U <user> <options> + osc maintainer -G <group> <options> + + # Lookup in specific containers + osc maintainer <options> osc maintainer PRJ <options> osc maintainer PRJ PKG <options> @@ -6656,11 +6809,14 @@ roles = [ 'bugowner', 'maintainer' ] if len(opts.role): roles = opts.role - if opts.bugowner_only or opts.bugowner or opts.set_bugowner or opts.set_bugowner_request or subcmd == 'bugowner': + if opts.bugowner_only or opts.bugowner or subcmd == 'bugowner': roles = [ 'bugowner' ] args = slash_split(args) - if len(args) == 0: + if opts.user or opts.group: + if len(args) != 0: + raise oscerr.WrongArgs('Either search for user or for packages.') + elif len(args) == 0: try: pac = store_read_package('.') except oscerr.NoWorkingCopy: @@ -6678,7 +6834,7 @@ apiurl = self.get_api_url() # Try the OBS 2.4 way first. - if pac==None and binary: + if binary or opts.user or opts.group: limit=None if opts.all: limit=0 @@ -6686,7 +6842,14 @@ if filterroles == [ 'bugowner', 'maintainer' ]: # use server side configured default filterroles=None - searchresult = owner(apiurl, binary, usefilter=filterroles, devel=None, limit=limit) + if binary: + searchresult = owner(apiurl, binary, "binary", usefilter=filterroles, devel=None, limit=limit) + elif opts.user: + searchresult = owner(apiurl, opts.user, "user", usefilter=filterroles, devel=None) + elif opts.group: + searchresult = owner(apiurl, opts.group, "group", usefilter=filterroles, devel=None) + else: + raise oscerr.WrongArgs('osc bug, no valid search criteria') if opts.add: if searchresult: @@ -6726,7 +6889,26 @@ else: for role in roles: - setBugowner(apiurl, prj, pac, opts.delete, role) + try: + setBugowner(apiurl, prj, pac, opts.delete, role) + except urllib2.HTTPError, e: + if e.code == 403: + print "No write permission in", result.get('project'), + if result.get('package'): + print "/", result.get('package'), + print + repl = raw_input('\nCreating a request instead? (y/n) ') + if repl.lower() == 'y': + opts.set_bugowner_request = opts.set_bugowner + opts.set_bugowner = None + break + + if opts.set_bugowner_request: + for role in roles: + args = [bugowner, prj] + if pac: + args = args + [pac] + requestactionsxml += self._set_bugowner(args,opts) if requestactionsxml != "": message = edit_message() @@ -6772,7 +6954,7 @@ metaroot = ET.fromstring(''.join(m)) else: # fallback to project lookup for old servers - if not searchresult: + if prj and not searchresult: m = show_project_meta(apiurl, prj) metaroot = ET.fromstring(''.join(m)) @@ -6806,38 +6988,40 @@ print "Defined in package: %s/%s " %(definingproject, definingpackage) else: print "Defined in project: ", definingproject - - for role in roles: - if opts.bugowner and not len(maintainers.get(role, [])): - role = 'maintainer' - if pac: - print "%s%s of %s/%s : " %(indent, role, prj, pac) - else: - print "%s%s of %s : " %(indent, role, prj) - if opts.email: - emails = [] - for maintainer in maintainers.get(role, []): - user = get_user_data(apiurl, maintainer, 'email') - if len(user): - emails.append(''.join(user)) - print indent, - print ', '.join(emails) or '-' - elif opts.verbose: - userdata = [] - for maintainer in maintainers.get(role, []): - user = get_user_data(apiurl, maintainer, 'login', 'realname', 'email') - userdata.append(user[0]) - if user[1] != '-': - userdata.append("%s <%s>"%(user[1], user[2])) - else: - userdata.append(user[2]) - for row in build_table(2, userdata, None, 3): + + if prj: + # not for user/group search + for role in roles: + if opts.bugowner and not len(maintainers.get(role, [])): + role = 'maintainer' + if pac: + print "%s%s of %s/%s : " %(indent, role, prj, pac) + else: + print "%s%s of %s : " %(indent, role, prj) + if opts.email: + emails = [] + for maintainer in maintainers.get(role, []): + user = get_user_data(apiurl, maintainer, 'email') + if len(user): + emails.append(''.join(user)) print indent, - print row - else: - print indent, - print ', '.join(maintainers.get(role, [])) or '-' - print + print ', '.join(emails) or '-' + elif opts.verbose: + userdata = [] + for maintainer in maintainers.get(role, []): + user = get_user_data(apiurl, maintainer, 'login', 'realname', 'email') + userdata.append(user[0]) + if user[1] != '-': + userdata.append("%s <%s>"%(user[1], user[2])) + else: + userdata.append(user[2]) + for row in build_table(2, userdata, None, 3): + print indent, + print row + else: + print indent, + print ', '.join(maintainers.get(role, [])) or '-' + print @cmdln.alias('who') @cmdln.alias('user') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/conf.py new/osc-0.139.0/osc/conf.py --- old/osc-0.138.0/osc/conf.py 2013-01-31 16:46:36.000000000 +0100 +++ new/osc-0.139.0/osc/conf.py 2013-02-25 15:41:16.000000000 +0100 @@ -496,6 +496,8 @@ elif os.path.isdir(i): capath = i break + if not cafile and not capath: + raise Exception('No CA certificates found') ctx = oscssl.mySSLContext() if ctx.load_verify_locations(capath=capath, cafile=cafile) != 1: raise Exception('No CA certificates found') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/osc/core.py new/osc-0.139.0/osc/core.py --- old/osc-0.138.0/osc/core.py 2013-01-31 16:46:36.000000000 +0100 +++ new/osc-0.139.0/osc/core.py 2013-02-25 15:41:16.000000000 +0100 @@ -3,7 +3,7 @@ # and distributed under the terms of the GNU General Public Licence, # either version 2, or version 3 (at your option). -__version__ = '0.138' +__version__ = '0.139' # __store_version__ is to be incremented when the format of the working copy # "store" changes in an incompatible way. Please add any needed migration @@ -765,7 +765,7 @@ upstream_del = [ pac for pac in self.pacs_have if not pac in self.pacs_available and self.get_state(pac) != 'A'] for pac in upstream_del: - if self.status(pac) != '!' or pac in self.pacs_broken: + if self.status(pac) != '!': p = Package(os.path.join(self.dir, pac)) self.delPackage(p, force = True) delete_storedir(p.storedir) @@ -773,7 +773,7 @@ os.rmdir(pac) except: pass - self.pac_root.remove(self.get_package_node(p.name)) + self.pac_root.remove(self.get_package_node(pac)) self.pacs_have.remove(pac) for pac in self.pacs_have: @@ -3481,12 +3481,13 @@ while 1: run_editor(filename) msg = open(filename).read().split(delim)[0].rstrip() - - if len(msg): + if msg and template != msg: break else: - ri = raw_input('Log message not specified\n' - 'a)bort, c)ontinue, e)dit: ') + reason = 'Log message not specified' + if template and template == msg: + reason = 'Log template was not changed' + ri = raw_input('%s\na)bort, c)ontinue, e)dit: ' % reason) if ri in 'aA': raise oscerr.UserAbort() elif ri in 'cC': @@ -5302,10 +5303,12 @@ et = int(node.get('endtime')) endtime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(et)) waittm = time.gmtime(et-st) - if waittm.tm_hour: - waitbuild = "%2dh %2dm %2ds" % (waittm.tm_hour, waittm.tm_min, waittm.tm_sec) + if waittm.tm_mday>1: + waitbuild = "%1dd %2dh %2dm %2ds" % (waittm.tm_mday-1, waittm.tm_hour, waittm.tm_min, waittm.tm_sec) + elif waittm.tm_hour: + waitbuild = " %2dh %2dm %2ds" % (waittm.tm_hour, waittm.tm_min, waittm.tm_sec) else: - waitbuild = " %2dm %2ds" % (waittm.tm_min, waittm.tm_sec) + waitbuild = " %2dm %2ds" % (waittm.tm_min, waittm.tm_sec) if format == 'csv': print '%s|%s|%s|%s|%s|%s' % (endtime, package, reason, code, waitbuild, worker) @@ -5732,12 +5735,12 @@ res[urlpath] = ET.parse(f).getroot() return res -def owner(apiurl, binary, attribute=None, project=None, usefilter=None, devel=None, limit=None): +def owner(apiurl, binary, mode="binary", attribute=None, project=None, usefilter=None, devel=None, limit=None): """ Perform a binary package owner search. This is supported since OBS 2.4. """ # find default project, if not specified - query = { 'binary': binary } + query = { mode: binary } if attribute: query['attribute'] = attribute if project: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.138.0/setup.py new/osc-0.139.0/setup.py --- old/osc-0.138.0/setup.py 2013-01-31 16:46:36.000000000 +0100 +++ new/osc-0.139.0/setup.py 2013-02-25 15:41:16.000000000 +0100 @@ -57,7 +57,7 @@ author = 'openSUSE project', author_email = 'opensuse-buildserv...@opensuse.org', license = 'GPL', - platforms = ['Linux', 'Mac OSX', 'Windows XP/2000/NT', 'Windows 95/98/ME'], + platforms = ['Linux', 'Mac OSX', 'Windows XP/2000/NT', 'Windows 95/98/ME', 'FreeBSD'], keywords = ['openSUSE', 'SUSE', 'RPM', 'build', 'buildservice'], url = 'http://en.opensuse.org/openSUSE:OSC', download_url = 'https://github.com/openSUSE/osc', ++++++ osc.dsc ++++++ --- /var/tmp/diff_new_pack.Iz2uE3/_old 2013-02-25 20:39:46.000000000 +0100 +++ /var/tmp/diff_new_pack.Iz2uE3/_new 2013-02-25 20:39:46.000000000 +0100 @@ -1,6 +1,6 @@ Format: 1.0 Source: osc -Version: 0.138.0 +Version: 0.139.0 Binary: osc Maintainer: Adrian Schroeter <adr...@suse.de> Architecture: any -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org