Hello community, here is the log from the commit of package osc for openSUSE:Factory checked in at 2017-05-09 18:10:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/osc (Old) and /work/SRC/openSUSE:Factory/.osc.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osc" Tue May 9 18:10:09 2017 rev:119 rq:493676 version:0.158.0 Changes: -------- --- /work/SRC/openSUSE:Factory/osc/osc.changes 2017-03-21 22:51:47.343782728 +0100 +++ /work/SRC/openSUSE:Factory/.osc.new/osc.changes 2017-05-09 18:10:11.445195834 +0200 @@ -1,0 +2,15 @@ +Tue May 9 07:51:06 UTC 2017 - [email protected] + +- 0.158.0 + - cat/less/blame command: default to expand to stay in sync with checkout + - add support for highly experimental native appimage.yml support + - show package status when repository configuration is broken + - add '--blame' option to osc meta command + - try to autodetect local package when running 'osc build' + - comment requests in interactive mode + - fix github issue #236 (--no-cleanup not working) + - fix wipebinaries to prevent wiping of complete repository + - add '--build-opt' to osc build command + - fix requests codebase to fit old obs versions + +------------------------------------------------------------------- Old: ---- osc-0.157.2.tar.gz New: ---- osc-0.158.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ osc.spec ++++++ --- /var/tmp/diff_new_pack.4JqtzG/_old 2017-05-09 18:10:13.396920032 +0200 +++ /var/tmp/diff_new_pack.4JqtzG/_new 2017-05-09 18:10:13.400919467 +0200 @@ -16,10 +16,10 @@ # -%define version_unconverted 0.157.2 +%define version_unconverted 0.158.0 Name: osc -Version: 0.157.2 +Version: 0.158.0 Release: 0 Summary: Open Build Service Commander License: GPL-2.0+ ++++++ PKGBUILD ++++++ --- /var/tmp/diff_new_pack.4JqtzG/_old 2017-05-09 18:10:13.452912120 +0200 +++ /var/tmp/diff_new_pack.4JqtzG/_new 2017-05-09 18:10:13.452912120 +0200 @@ -1,5 +1,5 @@ pkgname=osc -pkgver=0.157.2 +pkgver=0.158.0 pkgrel=0 pkgdesc="Open Build Service client" arch=('i686' 'x86_64') ++++++ _service ++++++ --- /var/tmp/diff_new_pack.4JqtzG/_old 2017-05-09 18:10:13.480908164 +0200 +++ /var/tmp/diff_new_pack.4JqtzG/_new 2017-05-09 18:10:13.480908164 +0200 @@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="disabled"> - <param name="version">0.157.2</param> - <param name="revision">0.157.2</param> + <param name="version">0.158.0</param> + <param name="revision">0.158.0</param> <param name="url">git://github.com/openSUSE/osc.git</param> <param name="scm">git</param> </service> ++++++ debian.changelog ++++++ --- /var/tmp/diff_new_pack.4JqtzG/_old 2017-05-09 18:10:13.520902513 +0200 +++ /var/tmp/diff_new_pack.4JqtzG/_new 2017-05-09 18:10:13.520902513 +0200 @@ -1,4 +1,4 @@ -osc (0.157.2) unstable; urgency=low +osc (0.158.0) unstable; urgency=low - Install bash completion -- Nick Brown <[email protected]> Wed, 26 Oct 2016 10:00:00 +0200 ++++++ osc-0.157.2.tar.gz -> osc-0.158.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/NEWS new/osc-0.158.0/NEWS --- old/osc-0.157.2/NEWS 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/NEWS 2017-05-08 21:41:29.000000000 +0200 @@ -1,6 +1,14 @@ 0.158 - cat/less/blame command: default to expand to stay in sync with checkout - add support for highly experimental native appimage.yml support + - show package status when repository configuration is broken + - add '--blame' option to osc meta command + - try to autodetect local package when running 'osc build' + - comment requests in interactive mode + - fix github issue #236 (--no-cleanup not working) + - fix wipebinaries to prevent wiping of complete repository + - add '--build-opt' to osc build command + - fix requests codebase to fit old obs versions 0.157.2 - add compat code for older apis that do not support multibuild diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/osc/build.py new/osc-0.158.0/osc/build.py --- old/osc-0.157.2/osc/build.py 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/osc/build.py 2017-05-08 21:41:29.000000000 +0200 @@ -802,6 +802,9 @@ if bi.release: buildargs.append('--release=%s' % bi.release) + if opts.build_opt: + buildargs += opts.build_opt + # real arch of this machine # vs. # arch we are supposed to build for diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/osc/commandline.py new/osc-0.158.0/osc/commandline.py --- old/osc-0.157.2/osc/commandline.py 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/osc/commandline.py 2017-05-08 21:41:29.000000000 +0200 @@ -738,6 +738,8 @@ help='include defined attribute defaults') @cmdln.option('--attribute-project', action='store_true', help='include project values, if missing in packages ') + @cmdln.option('--blame', action='store_true', + help='show author and time of each line') @cmdln.option('-f', '--force', action='store_true', help='force the save operation, allows one to ignores some errors like depending repositories. For prj meta only.') @cmdln.option('-F', '--file', metavar='FILE', @@ -889,14 +891,14 @@ # show if not opts.edit and not opts.file and not opts.delete and not opts.create and not opts.set: if cmd == 'prj': - sys.stdout.write(''.join(show_project_meta(apiurl, project, opts.revision))) + sys.stdout.write(''.join(show_project_meta(apiurl, project, rev=opts.revision, blame=opts.blame))) elif cmd == 'pkg': - sys.stdout.write(''.join(show_package_meta(apiurl, project, package))) + sys.stdout.write(''.join(show_package_meta(apiurl, project, package, blame=opts.blame))) elif cmd == 'attribute': sys.stdout.write(''.join(show_attribute_meta(apiurl, project, package, subpackage, opts.attribute, opts.attribute_defaults, opts.attribute_project))) elif cmd == 'prjconf': - sys.stdout.write(''.join(show_project_conf(apiurl, project, opts.revision))) + sys.stdout.write(''.join(show_project_conf(apiurl, project, rev=opts.revision, blame=opts.blame))) elif cmd == 'user': r = get_user_meta(apiurl, user) if r: @@ -1199,7 +1201,7 @@ # submitting this package if opts.separate_requests or opts.seperate_requests: # create a single request - result = create_submit_request(apiurl, project, p) + result = create_submit_request(apiurl, project, p, src_update=src_update) if not result: sys.exit("submit request creation failed") sr_ids.append(result) @@ -2163,7 +2165,7 @@ project = None if len(args) > 0: project = args[0] - elif not opts.mine and not opts.user: + elif not opts.mine and not opts.user and not opts.group: try: project = store_read_project(os.curdir) package = store_read_package(os.curdir) @@ -2501,7 +2503,7 @@ if repl.lower() == 'y' or repl == '': (supersede, reqs) = check_existing_requests(apiurl, action.tgt_project, action.tgt_package, project, package) - msg = "%s (forwarded request %s from %s)" % (rq.description, reqid, rq.get_creator()) + msg = "%s (forwarded request %s from %s)" % (rq.description, reqid, rq.creator) rid = create_submit_request(apiurl, action.tgt_project, action.tgt_package, project, package, cgi.escape(msg)) print(msg) @@ -4993,6 +4995,8 @@ help='generate output in CSV format') @cmdln.option('', '--format', default='%(repository)s|%(arch)s|%(state)s|%(dirty)s|%(code)s|%(details)s', help='format string for csv output') + @cmdln.option('--show-excluded', action='store_true', + help='show repos that are excluded for this package') def do_results(self, subcmd, opts, *args): """${cmd_name}: Shows the build results of a package or project @@ -5042,7 +5046,7 @@ kwargs = {'apiurl': apiurl, 'project': project, 'package': package, 'lastbuild': opts.last_build, 'repository': opts.repo, - 'arch': opts.arch, 'wait': opts.watch} + 'arch': opts.arch, 'wait': opts.watch, 'showexcl': opts.show_excluded} if opts.multibuild_package: opts.no_multibuild = False kwargs['multibuild_packages'] = opts.multibuild_package @@ -5934,6 +5938,8 @@ help='disable feature X for build') @cmdln.option('--define', metavar='\'X Y\'', action='append', help='define macro X with value Y') + @cmdln.option('--build-opt', metavar='OPT', action='append', + help='pass option OPT to the build command') @cmdln.option('--userootforbuild', action='store_true', help='Run build as root. The default is to build as ' 'unprivileged user. Note that a line "# norootforbuild" ' @@ -6046,6 +6052,17 @@ print("WARNING: package is not existing on server yet") opts.local_package = True + if not opts.local_package: + try: + package = store_read_package(os.curdir) + prj = Project(os.pardir, getPackageList=False, wc_check=False) + if prj.status(package) == 'A': + # a package with state 'A' most likely does not exist on + # the server - hence, treat it as a local package + opts.local_package = True + except oscerr.NoWorkingCopy: + pass + if opts.offline or opts.local_package or r == None: print("WARNING: source service from package or project will not be executed. This may not be the same build as on server!") elif (conf.config['local_service_run'] and not opts.noservice) and not opts.noinit: @@ -6495,6 +6512,7 @@ usage: osc service COMMAND (inside working copy) osc service run [SOURCE_SERVICE] + osc service runall osc service localrun osc service disabledrun osc service remoterun [PROJECT PACKAGE] @@ -6505,7 +6523,10 @@ run r run defined services locally, it takes an optional parameter to run only a specified source service. In case parameters exist for this one in _service file they are used. - runall ra run all services independend of the used mode + runall ra run all services independent of the used mode + localrun lr run all services except the ones with mode "buildtime", "disabled", or + "serveronly" (deprecated) + disabledrun dr run all services with mode "disabled" or "serveronly" (deprecated) remoterun rr trigger a re-run on the server side merge commits all server side generated files and drops the _service definition wait waits until the service finishes and returns with an error if it failed @@ -6781,8 +6802,10 @@ codes.append('broken') if opts.unresolvable: codes.append('unresolvable') - if opts.all or opts.repo or opts.arch: - codes.append(None) + if len(codes) == 0: + # don't do a second wipe if a filter got specified + if opts.all or opts.repo or opts.arch: + codes.append(None) if len(codes) == 0: raise oscerr.WrongOptions('No option has been provided. If you want to delete all binaries, use --all option.') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/osc/core.py new/osc-0.158.0/osc/core.py --- old/osc-0.157.2/osc/core.py 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/osc/core.py 2017-05-08 21:41:29.000000000 +0200 @@ -5,7 +5,7 @@ from __future__ import print_function -__version__ = '0.157.2' +__version__ = '0.158' # __store_version__ is to be incremented when the format of the working copy # "store" changes in an incompatible way. Please add any needed migration @@ -2684,6 +2684,7 @@ def _init_attributes(self): """initialize attributes with default values""" self.reqid = None + self.creator = '' self.title = '' self.description = '' self.priority = None @@ -2699,6 +2700,9 @@ if not root.get('id'): raise oscerr.APIError('invalid request: %s\n' % ET.tostring(root, encoding=ET_ENCODING)) self.reqid = root.get('id') + if root.get('creator'): + # OBS 2.8 and later is delivering creator informations + self.creator = root.get('creator') if root.find('state') is None: raise oscerr.APIError('invalid request (state expected): %s\n' % ET.tostring(root, encoding=ET_ENCODING)) self.state = RequestState(root.find('state')) @@ -2737,16 +2741,19 @@ return [i for i in self.actions if i.type in types] def get_creator(self): - """return the creator of the request""" - if len(self.statehistory): - return self.statehistory[0].who - return self.state.who + """Return the creator of the request. + + This method is deprecated (use "creator" attribute instead"). + """ + return self.creator def to_xml(self): """serialize object to XML""" root = ET.Element('request') - if not self.reqid is None: + if self.reqid is not None: root.set('id', self.reqid) + if self.creator: + root.set('creator', self.creator) for action in self.actions: root.append(action.to_xml()) if not self.state is None: @@ -3396,9 +3403,11 @@ return sorted([ node.get('name') for node in root if node.get('name')]) -def show_project_meta(apiurl, prj, rev=None): +def show_project_meta(apiurl, prj, rev=None, blame=None): + query = {} + if blame: + query['view'] = "blame" if rev: - query = {} query['rev'] = rev url = makeurl(apiurl, ['source', prj, '_project', '_meta'], query) try: @@ -3413,16 +3422,23 @@ e.osc_msg = 'BuildService API error: %s' % error_help raise else: - url = makeurl(apiurl, ['source', prj, '_meta']) + if blame: + url = makeurl(apiurl, ['source', prj, '_project', '_meta'], query) + else: + url = makeurl(apiurl, ['source', prj, '_meta']) f = http_GET(url) return f.readlines() -def show_project_conf(apiurl, prj, rev=None): +def show_project_conf(apiurl, prj, rev=None, blame=None): query = {} + url = None if rev: query['rev'] = rev - - url = makeurl(apiurl, ['source', prj, '_config'], query) + if blame: + query['view'] = "blame" + url = makeurl(apiurl, ['source', prj, '_project', '_config'], query=query) + else: + url = makeurl(apiurl, ['source', prj, '_config'], query=query) f = http_GET(url) return f.readlines() @@ -3437,10 +3453,13 @@ raise -def show_package_meta(apiurl, prj, pac, meta=False): +def show_package_meta(apiurl, prj, pac, meta=False, blame=None): query = {} if meta: query['meta'] = 1 + if blame: + query['view'] = "blame" + query['meta'] = 1 # The fake packages _project has no _meta file if pac.startswith('_project'): @@ -4170,7 +4189,7 @@ tmpl_name = '%srequest_%s_template' % (action.type, newstate) tmpl = conf.config.get(tmpl_name, '') tmpl = tmpl.replace('\\t', '\t').replace('\\n', '\n') - data = {'reqid': req.reqid, 'type': action.type, 'who': req.get_creator()} + data = {'reqid': req.reqid, 'type': action.type, 'who': req.creator} if req.actions[0].type == 'submit': data.update({'src_project': action.src_project, 'src_package': action.src_package, 'src_rev': action.src_rev, @@ -5497,6 +5516,15 @@ # always a status element snodes = node.findall('status') is_multi = len(snodes) > 1 + if len(snodes) < 1: + # the repository setup is broken + smap = dict(rmap) + smap['pkg'] = "_repository" + smap['code'] = rmap['repostate'] + smap['details'] = node.get('details') + yield smap, is_multi + continue + for statusnode in snodes: smap = dict(rmap) smap['pkg'] = smap['package'] = smap['pac'] = statusnode.get('package') @@ -5522,9 +5550,12 @@ r = [] printed = False multibuild_packages = kwargs.pop('multibuild_packages', []) + show_excluded = kwargs.pop('showexcl', False) for results in get_package_results(apiurl, project, package, **kwargs): r = [] for res, is_multi in result_xml_to_dicts(results): + if not show_excluded and res['code'] == 'excluded': + continue if '_oldstate' in res: oldstate = res['_oldstate'] continue @@ -7035,8 +7066,6 @@ def print_source_buildstatus(src_actions, newline=False): if newline: print() - if not src_actions: - print('unable to get source buildstatus: no source actions defined') for action in src_actions: print('%s/%s:' % (action.src_project, action.src_package)) try: @@ -7048,18 +7077,18 @@ print_request(request) try: - prompt = '(a)ccept/(d)ecline/(r)evoke/c(l)one/(s)kip/(c)ancel > ' + prompt = '(a)ccept/(d)ecline/(r)evoke/c(l)one/co(m)ment/(s)kip/(c)ancel > ' editable_actions = request.get_actions('submit', 'maintenance_incident') # actions which have sources + buildresults src_actions = editable_actions + request.get_actions('maintenance_release') if editable_actions: - prompt = 'd(i)ff/(a)ccept/(d)ecline/(r)evoke/(b)uildstatus/c(l)one/(e)dit/(s)kip/(c)ancel > ' + prompt = 'd(i)ff/(a)ccept/(d)ecline/(r)evoke/(b)uildstatus/c(l)one/(e)dit/co(m)ment/(s)kip/(c)ancel > ' elif src_actions: # no edit for maintenance release requests - prompt = 'd(i)ff/(a)ccept/(d)ecline/(r)evoke/(b)uildstatus/c(l)one/(s)kip/(c)ancel > ' + prompt = 'd(i)ff/(a)ccept/(d)ecline/(r)evoke/(b)uildstatus/c(l)one/co(m)ment/(s)kip/(c)ancel > ' editprj = '' orequest = None - if source_buildstatus: + if source_buildstatus and src_actions: print_source_buildstatus(src_actions, newline=True) while True: if initial_cmd: @@ -7095,6 +7124,9 @@ elif repl == 'c': print('Aborting', file=sys.stderr) raise oscerr.UserAbort() + elif repl == 'm': + comment = edit_text() + create_comment(apiurl, 'request', comment, request.reqid) elif repl == 'b' and src_actions: print_source_buildstatus(src_actions) elif repl == 'e' and editable_actions: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/tests/request_fixtures/test_read_request1.xml new/osc-0.158.0/tests/request_fixtures/test_read_request1.xml --- old/osc-0.157.2/tests/request_fixtures/test_read_request1.xml 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/tests/request_fixtures/test_read_request1.xml 2017-05-08 21:41:29.000000000 +0200 @@ -1,4 +1,4 @@ -<request id="42"> +<request creator="creator" id="42"> <action type="submit"> <source package="bar" project="foo" rev="1" /> <target package="bar" project="foobar" /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/tests/request_fixtures/test_read_request2.xml new/osc-0.158.0/tests/request_fixtures/test_read_request2.xml --- old/osc-0.157.2/tests/request_fixtures/test_read_request2.xml 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/tests/request_fixtures/test_read_request2.xml 2017-05-08 21:41:29.000000000 +0200 @@ -1,4 +1,4 @@ -<request id="123"> +<request creator="creator" id="123"> <action type="submit"> <source package="abc" project="xyz" /> <options> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/tests/request_fixtures/test_request_list_view1.xml new/osc-0.158.0/tests/request_fixtures/test_request_list_view1.xml --- old/osc-0.157.2/tests/request_fixtures/test_request_list_view1.xml 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/tests/request_fixtures/test_request_list_view1.xml 2017-05-08 21:41:29.000000000 +0200 @@ -1,4 +1,4 @@ -<request id="62"> +<request creator="Admin" id="62"> <action type="set_bugowner"> <target project="foo" /> <person name="buguser" /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/tests/request_fixtures/test_request_list_view2.xml new/osc-0.158.0/tests/request_fixtures/test_request_list_view2.xml --- old/osc-0.157.2/tests/request_fixtures/test_request_list_view2.xml 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/tests/request_fixtures/test_request_list_view2.xml 2017-05-08 21:41:29.000000000 +0200 @@ -1,4 +1,4 @@ -<request id="21"> +<request creator="foobar" id="21"> <action type="set_bugowner"> <target project="foo" /> <person name="buguser" /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/tests/request_fixtures/test_request_str1.xml new/osc-0.158.0/tests/request_fixtures/test_request_str1.xml --- old/osc-0.157.2/tests/request_fixtures/test_request_str1.xml 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/tests/request_fixtures/test_request_str1.xml 2017-05-08 21:41:29.000000000 +0200 @@ -1,4 +1,4 @@ -<request id="123"> +<request creator="creator" id="123"> <action type="submit"> <source package="abc" project="xyz" /> <target project="foo" /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osc-0.157.2/tests/test_request.py new/osc-0.158.0/tests/test_request.py --- old/osc-0.157.2/tests/test_request.py 2017-03-21 13:33:10.000000000 +0100 +++ new/osc-0.158.0/tests/test_request.py 2017-05-08 21:41:29.000000000 +0200 @@ -384,7 +384,7 @@ self.assertEqual(r.statehistory[0].when, '2010-12-11T00:00:00') self.assertEqual(r.statehistory[0].who, 'creator') self.assertEqual(r.statehistory[0].comment, '') - self.assertEqual(r.get_creator(), 'creator') + self.assertEqual(r.creator, 'creator') self.assertTrue(len(r.statehistory) == 1) self.assertTrue(len(r.reviews) == 1) self.assertEqual(xml, r.to_str()) @@ -392,7 +392,7 @@ def test_read_request3(self): """read in a request (with an "empty" comment+description)""" from xml.etree import cElementTree as ET - xml = """<request id="2"> + xml = """<request creator="xyz" id="2"> <action type="set_bugowner"> <target project="foo" /> <person name="buguser" /> @@ -415,8 +415,8 @@ self.assertEqual(r.description, '') self.assertTrue(len(r.statehistory) == 0) self.assertTrue(len(r.reviews) == 0) - self.assertEqual(r.get_creator(), 'xyz') - exp = """<request id="2"> + self.assertEqual(r.creator, 'xyz') + exp = """<request creator="xyz" id="2"> <action type="set_bugowner"> <target project="foo" /> <person name="buguser" /> @@ -466,7 +466,7 @@ r = osc.core.Request() r = osc.core.Request() r.read(ET.fromstring(xml)) - self.assertEqual(r.get_creator(), 'creator') + self.assertEqual(r.creator, 'creator') exp = """\ Request: #123 @@ -496,7 +496,7 @@ """test the __str__ method""" from xml.etree import cElementTree as ET xml = """\ -<request id="98765"> +<request creator="creator" id="98765"> <action type="change_devel"> <source project="devprj" package="devpkg" /> <target project="foo" package="bar" /> @@ -508,7 +508,7 @@ </request>""" r = osc.core.Request() r.read(ET.fromstring(xml)) - self.assertEqual(r.get_creator(), 'creator') + self.assertEqual(r.creator, 'creator') exp = """\ Request: #98765 @@ -527,7 +527,7 @@ """load old-style submitrequest""" from xml.etree import cElementTree as ET xml = """\ -<request id="1234" type="submit"> +<request creator="olduser" id="1234" type="submit"> <submit> <source package="baz" project="foobar" /> <target package="baz" project="foo" /> @@ -548,9 +548,9 @@ self.assertEqual(r.state.when, '2010-12-30T02:11:22') self.assertEqual(r.state.who, 'olduser') self.assertEqual(r.state.comment, '') - self.assertEqual(r.get_creator(), 'olduser') + self.assertEqual(r.creator, 'olduser') exp = """\ -<request id="1234"> +<request creator="olduser" id="1234"> <action type="submit"> <source package="baz" project="foobar" /> <target package="baz" project="foo" /> ++++++ osc.dsc ++++++ --- /var/tmp/diff_new_pack.4JqtzG/_old 2017-05-09 18:10:13.944842605 +0200 +++ /var/tmp/diff_new_pack.4JqtzG/_new 2017-05-09 18:10:13.944842605 +0200 @@ -1,6 +1,6 @@ Format: 1.0 Source: osc -Version: 0.157.2 +Version: 0.158.0 Binary: osc Maintainer: Adrian Schroeter <[email protected]> Architecture: any
