Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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