Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:Update
virt-manager.5874
b08647c2-xmlbuilder-05.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File b08647c2-xmlbuilder-05.patch of Package virt-manager.5874
References: fate#319621 Subject: xmlbuilder: Handle setting conditional xpaths correctly From: Cole Robinson crobinso@redhat.com Mon Jul 18 14:40:58 2016 -0400 Date: Mon Jul 18 14:46:50 2016 -0400: Git: b08647c2f277e463971ae1e4430aaed28a4619f3 So if xml=<foo> and xpath=./bar[@baz='foo'] and val=XXX, xmlbuilder previously would generate XML <foo> <bar>XXX</bar> </foo> But now generates the expected <foo> <bar baz='foo'/>XXX</bar> </foo> No users yet, but they are incoming Index: virt-manager-1.4.0/virtinst/xmlbuilder.py =================================================================== --- virt-manager-1.4.0.orig/virtinst/xmlbuilder.py +++ virt-manager-1.4.0/virtinst/xmlbuilder.py @@ -167,6 +167,16 @@ def _build_xpath_node(ctx, xpath): And the node pointing to @baz will be returned, for the caller to do with as they please. + + There's also special handling to ensure that setting + xpath=./bar[@baz='foo']/frob will create + + <bar baz='foo'> + <frob></frob> + </bar> + + Even if <bar> didn't exist before. So we fill in the dependent property + expression values """ def _handle_node(nodename, parentnode, parentpath): # If the passed xpath snippet (nodename) exists, return the node @@ -209,6 +219,19 @@ def _build_xpath_node(ctx, xpath): for nodename in xpath.split("/"): parentnode, parentpath = _handle_node(nodename, parentnode, parentpath) + # Check if the xpath snippet had an '=' expression in it, example: + # + # ./foo[@bar='baz'] + # + # If so, we also want to set <foo bar='baz'/>, so that setting + # this XML element works as expected in this case. + if "[" not in nodename or "=" not in nodename: + continue + + propname, val = nodename.split("[")[1].strip("]").split("=") + propobj, ignore = _handle_node(propname, parentnode, parentpath) + propobj.setContent(val.strip("'")) + return parentnode
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor