def test_generate_git():
    d = _get_test_dist()
    r = generate_rosinstall(d, ['betty'])[0]
    assert r['git']['local-name'] == 'riverdale/betty'
    assert r['git']['version'] == 'release/indigo/betty/1.2.3-0'
    assert r['git']['uri'] == 'https://example.com/riverdale-release.git'

    r = generate_rosinstall(d, ['betty'], flat=True)[0]
    assert r['git']['local-name'] == 'betty'
def test_generate_tar():
    d = _get_test_dist()

    r = generate_rosinstall(d, ['archie'], tar=True)[0]
    assert 'tar' not in r

    d.repositories['riverdale'].release_repository.url = 'https://github.com/example/riverdale-release.git'
    r = generate_rosinstall(d, ['archie'], tar=True)[0]
    assert r['tar']['uri'] == 'https://github.com/example/riverdale-release/archive/release/indigo/archie/1.2.3-0.tar.gz'

    d.repositories['riverdale'].release_repository.url = 'https://bitbucket.org/example/riverdale-release.git'
    r = generate_rosinstall(d, ['archie'], tar=True)[0]
    assert r['tar']['uri'] == 'https://bitbucket.org/example/riverdale-release/get/release/indigo/archie/1.2.3-0.tar.gz'

    d.repositories['riverdale'].release_repository.url = 'https://gitlab.example.com/example/riverdale-release.git'
    r = generate_rosinstall(d, ['archie'], tar=True)[0]
    assert r['tar']['uri'] == 'https://gitlab.example.com/example/riverdale-release/repository/archive.tar.gz?ref=release/indigo/archie/1.2.3-0'
Exemple #3
0
def main():
    rosdistro_index = rosdistro.get_index(ROSDISTRO_URL)

    cache = generate_distribution_cache(rosdistro_index, 'indigo')
    cached_distro = rosdistro.get_cached_distribution(rosdistro_index,
                                                      'indigo',
                                                      cache=cache)

    root_packages = {'roscpp'}

    package_names = root_packages.union(
        get_recursive_dependencies(cached_distro, root_packages))

    print(f'Found {len(package_names)} packages.')

    rosinstall_data = generate_rosinstall(cached_distro,
                                          package_names,
                                          flat=True,
                                          tar=True)

    remote_files = []

    for rosinstall_pkg in rosinstall_data:
        name = rosinstall_pkg['tar']['local-name']
        url = rosinstall_pkg['tar']['uri'].replace('.tar.gz', '.zip')
        print(name, url)

        # Fetch tarball to get its sha1sum
        r = requests.get(url)
        r.raise_for_status()
        sha1sum = hashlib.sha1(r.content).hexdigest()

        remote_files.append({
            'name': name,
            'url': url,
            'sha1': sha1sum,
        })

    sh.mkdir('-p', 'ros/rosdistro')

    # Save BUCK file with remote_file rules
    with open('ros/rosdistro/BUCK', 'w') as out_f:
        for rf in remote_files:
            s = f"""remote_file(
  name = '{rf['name']}.zip',
  url = '{rf['url']}',
  sha1 = '{rf['sha1']}',
  visibility = ['PUBLIC'],
)
"""
            out_f.write(s)

    # Save DEFS file with the list of tarballs
    with open('ros/rosdistro/DEFS', 'w') as out_f:
        out_f.write("rosdistro_tarballs = [\n{}\n]".format('\n'.join([
            f"  '//ros/rosdistro:{rf['name']}.zip'," for rf in remote_files
        ])))
def test_generate_tar_from_ssh():
    d = _get_test_dist()
    d.repositories['riverdale'].release_repository.url = '[email protected]:example/riverdale-release.git'
    r = generate_rosinstall(d, ['archie'], tar=True)[0]
    assert r['tar']['uri'] == 'https://gitlab.example.com/example/riverdale-release/repository/archive.tar.gz?ref=release/indigo/archie/1.2.3-0'