def make_from_stack_manifest(manifest_xml_str, package_name, packages, version): """ Return a package.xml sturcture for metapackages filled with the data from the given manifest_xml_str. See http://ros.org/wiki/catkin/package.xml#Metapackages for more. """ # TODO This function is very similar to make_from_manifest. Unify both # functions. # collect and save infos from the manifest.xml file manifest = ET.XML(manifest_xml_str) description = xml_lib.xml_find(manifest, 'description').text.strip() authors_str = xml_lib.xml_find(manifest, 'author').text authors = parse_authors_field(authors_str) licenses_str = xml_lib.xml_find(manifest, 'license').text licenses = SPACE_COMMA_RX.split(licenses_str) website_url = xml_lib.xml_find(manifest, 'url').text maintainers = [(a, {'email': ''}) if is_a_string(a) else a for a in authors] # put the collected infos into a new (package.)xml structure xml = create_project_xml(package_name=package_name, version=version, description=description, maintainers=maintainers, licenses=licenses, website_url=website_url, bugtracker_url='', authors=authors, build_depends=[], run_depends=packages, test_depends=[], replaces=[], conflicts=[], exports=[], architecture_independent=False, metapackage=True) return xml
def make_from_stack_manifest(manifest_xml_str, package_name, packages, version): """ Return a package.xml sturcture for metapackages filled with the data from the given manifest_xml_str. See http://ros.org/wiki/catkin/package.xml#Metapackages for more. """ # TODO This function is very similar to make_from_manifest. Unify both # functions. # collect and save infos from the manifest.xml file manifest = ET.XML(manifest_xml_str) description = xml_lib.xml_find(manifest, 'description').text.strip() authors_str = xml_lib.xml_find(manifest, 'author').text authors = parse_authors_field(authors_str) licenses_str = xml_lib.xml_find(manifest, 'license').text licenses = SPACE_COMMA_RX.split(licenses_str) website_url = xml_lib.xml_find(manifest, 'url').text maintainers = [(a, { 'email': '' }) if is_a_string(a) else a for a in authors] # put the collected infos into a new (package.)xml structure xml = create_project_xml(package_name=package_name, version=version, description=description, maintainers=maintainers, licenses=licenses, website_url=website_url, bugtracker_url='', authors=authors, build_depends=[], run_depends=packages, test_depends=[], replaces=[], conflicts=[], exports=[], architecture_independent=False, metapackage=True) return xml
def make_from_manifest(manifest_xml_str, package_name, version, architecture_independent, metapackage, bugtracker_url, replaces, conflicts): """ Return a package.xml sturcture filled with the data from the given manifest_xml_str. >>> manifest_xml_str = '\ <package>\ <description brief="one line of text">\ long description goes here, \ <em>XHTML is allowed</em>\ </description>\ <author>Alice/[email protected], Bob/[email protected]</author>\ <license>BSD</license>\ <url>http://pr.willowgarage.com/</url>\ <logo>http://pr.willowgarage.com/blog/photos/sensor_head1_500.jpg</logo>\ <depend package="pkgname"/>\ <depend package="common"/>\ <rosdep name="python" />\ <versioncontrol type="svn"\ url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk"/>\ <export>\ <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/>\ <cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib\ -Wl,-rpath,-L${prefix}lib -lrosthread -framework CoreServices"/>\ </export>\ </package>\ ' >>> pkg_xml = make_from_manifest( # doctest: +ELLIPSIS ... manifest_xml_str, ... package_name='my_pkg', version='0.1.2', ... architecture_independent=False, ... metapackage=False, ... bugtracker_url='https://github.com/ros/my_pkg/issues', ... replaces=[], conflicts=[]) >>> import xml.etree.ElementTree as ET >>> pkg = ET.XML(pkg_xml) """ # collect and save infos from the manifest.xml file manifest = ET.XML(manifest_xml_str) description = xml_lib.xml_find(manifest, 'description').text.strip() authors_str = xml_lib.xml_find(manifest, 'author').text authors = parse_authors_field(authors_str) licenses_str = xml_lib.xml_find(manifest, 'license').text licenses = SPACE_COMMA_RX.split(licenses_str) website_url = xml_lib.xml_find(manifest, 'url').text maintainers = [(a, {'email': ''}) if is_a_string(a) else a for a in authors] depend_tags = manifest.findall('depend') depends = [d.attrib['package'] for d in depend_tags] export_tags = xml_lib.xml_find(manifest, 'export').getchildren() exports = [(e.tag, e.attrib) for e in export_tags] # put the collected infos into a new (package.)xml structure xml = create_project_xml(package_name=package_name, version=version, description=description, maintainers=maintainers, licenses=licenses, website_url=website_url, bugtracker_url=bugtracker_url, authors=authors, build_depends=depends, run_depends=depends, test_depends=depends, replaces=replaces, conflicts=conflicts, exports=exports, architecture_independent=architecture_independent, metapackage=metapackage) # Most dependencies are build and run depends. Comment out only the # test_depend dependencies. for name in ['test_depend']: xml = xml_lib.comment_out_tags_named(xml, name) return xml
def make_from_stack_manifest(manifest_xml_str, package_name, packages, version): """ Make the contents of a project.xml file from the string contents of stack.xml. >>> manifest_xml_str = '\ <package>\ <description brief="one line of text">\ long description goes here, \ <em>XHTML is allowed</em>\ </description>\ <author>Alice/[email protected], Bob/[email protected]</author>\ <license>BSD</license>\ <url>http://pr.willowgarage.com/</url>\ <logo>http://pr.willowgarage.com/blog/photos/sensor_head1_500.jpg</logo>\ <depend package="pkgname"/>\ <depend package="common"/>\ <rosdep name="python" />\ <versioncontrol type="svn"\ url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk"/>\ <export>\ <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/>\ <cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib\ -Wl,-rpath,-L${prefix}lib -lrosthread -framework CoreServices"/>\ </export>\ </package>\ ' >>> pkg_xml = make_from_manifest( # doctest: +ELLIPSIS ... manifest_xml_str, ... package_name='my_pkg', version='0.1.2', ... architecture_independent=False, ... metapackage=False, ... bugtracker_url='https://github.com/ros/my_pkg/issues', ... replaces=[], conflicts=[]) >>> import xml.etree.ElementTree as ET >>> pkg = ET.XML(pkg_xml) """ manifest = ET.XML(manifest_xml_str) description = xml_lib.xml_find(manifest, 'description').text.strip() authors_str = xml_lib.xml_find(manifest, 'author').text authors = parse_authors_field(authors_str) licenses_str = xml_lib.xml_find(manifest, 'license').text licenses = SPACE_COMMA_RX.split(licenses_str) website_url = xml_lib.xml_find(manifest, 'url').text maintainers = [(a,{'email':''}) if isinstance(a,basestring) else a for a in authors ] xml = create_project_xml(package_name=package_name, version=version, description=description, maintainers=maintainers, licenses=licenses, website_url=website_url, bugtracker_url='', authors=authors, build_depends=[], run_depends=packages, test_depends=[], replaces=[], conflicts=[], exports=[], architecture_independent=False, metapackage=True) # Maintainer tags without e-mail addresses are already invalid without also being commented out #for name in ['maintainer']: # xml = xml_lib.comment_out_tags_named(xml, name) return xml
def make_from_manifest(manifest_xml_str, package_name, version, architecture_independent, metapackage, bugtracker_url, replaces, conflicts): """ Return a package.xml sturcture filled with the data from the given manifest_xml_str. >>> manifest_xml_str = '\ <package>\ <description brief="one line of text">\ long description goes here, \ <em>XHTML is allowed</em>\ </description>\ <author>Alice/[email protected], Bob/[email protected]</author>\ <license>BSD</license>\ <url>http://pr.willowgarage.com/</url>\ <logo>http://pr.willowgarage.com/blog/photos/sensor_head1_500.jpg</logo>\ <depend package="pkgname"/>\ <depend package="common"/>\ <rosdep name="python" />\ <versioncontrol type="svn"\ url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk"/>\ <export>\ <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/>\ <cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib\ -Wl,-rpath,-L${prefix}lib -lrosthread -framework CoreServices"/>\ </export>\ </package>\ ' >>> pkg_xml = make_from_manifest( # doctest: +ELLIPSIS ... manifest_xml_str, ... package_name='my_pkg', version='0.1.2', ... architecture_independent=False, ... metapackage=False, ... bugtracker_url='https://github.com/ros/my_pkg/issues', ... replaces=[], conflicts=[]) >>> import xml.etree.ElementTree as ET >>> pkg = ET.XML(pkg_xml) """ # collect and save infos from the manifest.xml file manifest = ET.XML(manifest_xml_str) description = xml_lib.xml_find(manifest, 'description').text.strip() authors_str = xml_lib.xml_find(manifest, 'author').text authors = parse_authors_field(authors_str) licenses_str = xml_lib.xml_find(manifest, 'license').text licenses = SPACE_COMMA_RX.split(licenses_str) website_url = xml_lib.xml_find(manifest, 'url').text maintainers = [(a, { 'email': '' }) if is_a_string(a) else a for a in authors] depend_tags = manifest.findall('depend') depends = [d.attrib['package'] for d in depend_tags] export_tags = xml_lib.xml_find(manifest, 'export').getchildren() exports = [(e.tag, e.attrib) for e in export_tags] # put the collected infos into a new (package.)xml structure xml = create_project_xml(package_name=package_name, version=version, description=description, maintainers=maintainers, licenses=licenses, website_url=website_url, bugtracker_url=bugtracker_url, authors=authors, build_depends=depends, run_depends=depends, test_depends=depends, replaces=replaces, conflicts=conflicts, exports=exports, architecture_independent=architecture_independent, metapackage=metapackage) # Most dependencies are build and run depends. Comment out only the # test_depend dependencies. for name in ['test_depend']: xml = xml_lib.comment_out_tags_named(xml, name) return xml
def make_from_stack_manifest(manifest_xml_str, package_name, packages, version): """ Make the contents of a project.xml file from the string contents of stack.xml. >>> manifest_xml_str = '\ <package>\ <description brief="one line of text">\ long description goes here, \ <em>XHTML is allowed</em>\ </description>\ <author>Alice/[email protected], Bob/[email protected]</author>\ <license>BSD</license>\ <url>http://pr.willowgarage.com/</url>\ <logo>http://pr.willowgarage.com/blog/photos/sensor_head1_500.jpg</logo>\ <depend package="pkgname"/>\ <depend package="common"/>\ <rosdep name="python" />\ <versioncontrol type="svn"\ url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/player/trunk"/>\ <export>\ <cpp cflags="-I${prefix}/include" lflags="-L${prefix}/lib -lros"/>\ <cpp os="osx" cflags="-I${prefix}/include" lflags="-L${prefix}/lib\ -Wl,-rpath,-L${prefix}lib -lrosthread -framework CoreServices"/>\ </export>\ </package>\ ' >>> pkg_xml = make_from_manifest( # doctest: +ELLIPSIS ... manifest_xml_str, ... package_name='my_pkg', version='0.1.2', ... architecture_independent=False, ... metapackage=False, ... bugtracker_url='https://github.com/ros/my_pkg/issues', ... replaces=[], conflicts=[]) >>> import xml.etree.ElementTree as ET >>> pkg = ET.XML(pkg_xml) """ manifest = ET.XML(manifest_xml_str) description = xml_lib.xml_find(manifest, 'description').text.strip() authors_str = xml_lib.xml_find(manifest, 'author').text authors = parse_authors_field(authors_str) licenses_str = xml_lib.xml_find(manifest, 'license').text licenses = SPACE_COMMA_RX.split(licenses_str) website_url = xml_lib.xml_find(manifest, 'url').text maintainers = authors xml = create_project_xml(package_name=package_name, version=version, description=description, maintainers=maintainers, licenses=licenses, website_url=website_url, bugtracker_url='', authors=authors, build_depends=[], run_depends=packages, test_depends=[], replaces=[], conflicts=[], exports=[], architecture_independent=False, metapackage=True) for name in ['maintainer']: xml = xml_lib.comment_out_tags_named(xml, name) return xml