if repo_map['release-name'] != args.rosdistro:
        print('release-name mismatch (%s != %s)' % (repo_map['release-name'], args.rosdistro))
        sys.exit(1)
    if 'repositories' not in repo_map:
        print('No "repositories" key in yaml file')
    if 'type' not in repo_map or repo_map['type'] != 'devel':
        print('Wrong type value in yaml file')
        sys.exit(1)

    workspace = args.repos
    try:
        if not args.repos:
            workspace = tempfile.mkdtemp()
        stacks = {}
        for name, repo in repo_map['repositories'].items():
            stacks[name] = get_stack_of_remote_repository(name, repo['type'], repo['url'], repo['version'] if 'version' in repo else None)

    finally:
        if not args.repos:
            shutil.rmtree(workspace)

    results_map = doit(repo_map,
        stacks,
        args.distros,
        args.fqdn,
        rosdistro=args.rosdistro,
        commit=args.commit,
        delete_extra_jobs=args.delete)

    if not args.commit:
        print('This was not pushed to the server.  If you want to do so use "--commit" to do it for real.')
def generate_ci_devel_yaml(yaml_filename, workspace=None):
    y = yaml.load(open(yaml_filename))
    #print y
    #for k in y.keys():
    #    print k
    source_repos = []
    release_repos = y['repositories']
    #print release_repos
    for name, release_repo in release_repos.items():
        url = release_repo['url']
        prefix = 'git://github.com/'
        suffix = '.git'
        if not url.startswith(prefix) or not url.endswith(suffix):
            sys.stderr.write('skipping unknown repository (%s, %s)\n' % (name, url))
            continue
        new_prefix = 'https://raw.github.com/'
        base_url = new_prefix + url[len(prefix):-len(suffix)]
        upstream, upstream_type = _get_upstream_info(base_url)
        #print upstream, upstream_type
        if upstream is None or upstream_type is None:
            sys.stderr.write('reading upstream info failed (%s, %s)\n' % (name, base_url))
            continue

        #print upstream, upstream_type
        if not upstream_type in ['git', 'hg', 'svn']:
            sys.stderr.write('skipping unknown repository type "%s" (%s, %s)\n' % (upstream_type, name, url))
            continue

        # fetch stack.xml from source repo
        try:
            stack = get_stack_of_remote_repository(name, upstream_type, upstream, workspace)
        except IOError:
            sys.stderr.write('skipping repository "%s" without stack.xml (%s)\n' % (name, url))
            continue
        except rospkg.stack.InvalidStack, e:
            sys.stderr.write('skipping repository "%s" with invalid stack.xml (%s): %s\n' % (name, url, str(e)))
            continue

        maintainer_email = ' '.join([m.email for m in stack.maintainers])
        stack_build_depends = [d.name for d in stack.build_depends]
        source_repo = {
            'type': 'catkin',
            'name': stack.name,
            'email': maintainer_email,
            'label': 'devel',
            'params': {
                'stack-build-depends': stack_build_depends,
                'profiles': ['devel'], # legacy stuff required by rospkg.distro
            }
        }
        upstream_type_data = {
            'distro-tag': 'distro', # legacy stuff required by rospkg.distro
            'release-tag': 'x.y.z', # legacy stuff required by rospkg.distro
        }
        if upstream_type == 'git' or upstream_type == 'hg':
            upstream_type_data['uri'] = upstream
            if upstream_type == 'git':
                upstream_type_data['dev-branch'] = 'master'
            elif upstream_type == 'hg':
                upstream_type_data['dev-branch'] = 'default'
        elif upstream_type == 'svn':
            upstream_type_data['dev'] = upstream
        source_repo['vcs_config'] = {upstream_type: upstream_type_data}

        sys.stderr.write(str(source_repo) + '\n')
        source_repos.append(source_repo)
def generate_ci_devel_yaml(yaml_filename, workspace=None):
    y = yaml.load(open(yaml_filename))
    #print y
    #for k in y.keys():
    #    print k
    source_repos = []
    release_repos = y['repositories']
    #print release_repos
    for name, release_repo in release_repos.items():
        url = release_repo['url']
        prefix = 'git://github.com/'
        suffix = '.git'
        if not url.startswith(prefix) or not url.endswith(suffix):
            sys.stderr.write('skipping unknown repository (%s, %s)\n' % (name, url))
            continue
        new_prefix = 'https://raw.github.com/'
        base_url = new_prefix + url[len(prefix):-len(suffix)]
        upstream, upstream_type = _get_upstream_info(base_url)
        #print upstream, upstream_type
        if upstream is None or upstream_type is None:
            sys.stderr.write('reading upstream info failed (%s, %s)\n' % (name, base_url))
            continue

        #print upstream, upstream_type
        if not upstream_type in ['git', 'hg', 'svn']:
            sys.stderr.write('skipping unknown repository type "%s" (%s, %s)\n' % (upstream_type, name, url))
            continue

        # fetch stack.xml from source repo
        try:
            stack = get_stack_of_remote_repository(name, upstream_type, upstream, workspace)
        except IOError:
            sys.stderr.write('skipping repository "%s" without stack.xml (%s)\n' % (name, url))
            continue
        except rospkg.stack.InvalidStack, e:
            sys.stderr.write('skipping repository "%s" with invalid stack.xml (%s): %s\n' % (name, url, str(e)))
            continue

        maintainer_email = ' '.join([m.email for m in stack.maintainers])
        stack_build_depends = [d.name for d in stack.build_depends]
        source_repo = {
            'type': 'catkin',
            'name': stack.name,
            'email': maintainer_email,
            'label': 'devel',
            'params': {
                'stack-build-depends': stack_build_depends,
                'profiles': ['devel'], # legacy stuff required by rospkg.distro
            }
        }
        upstream_type_data = {
            'distro-tag': 'distro', # legacy stuff required by rospkg.distro
            'release-tag': 'x.y.z', # legacy stuff required by rospkg.distro
        }
        if upstream_type == 'git' or upstream_type == 'hg':
            upstream_type_data['uri'] = upstream
            if upstream_type == 'git':
                upstream_type_data['dev-branch'] = 'master'
            elif upstream_type == 'hg':
                upstream_type_data['dev-branch'] = 'default'
        elif upstream_type == 'svn':
            upstream_type_data['dev'] = upstream
        source_repo['vcs_config'] = {upstream_type: upstream_type_data}

        sys.stderr.write(str(source_repo) + '\n')
        source_repos.append(source_repo)
              (repo_map['release-name'], args.rosdistro))
        sys.exit(1)
    if 'repositories' not in repo_map:
        print('No "repositories" key in yaml file')
    if 'type' not in repo_map or repo_map['type'] != 'devel':
        print('Wrong type value in yaml file')
        sys.exit(1)

    workspace = args.repos
    try:
        if not args.repos:
            workspace = tempfile.mkdtemp()
        stacks = {}
        for name, repo in repo_map['repositories'].items():
            stacks[name] = get_stack_of_remote_repository(
                name, repo['type'], repo['url'],
                repo['version'] if 'version' in repo else None)

    finally:
        if not args.repos:
            shutil.rmtree(workspace)

    results_map = doit(repo_map,
                       stacks,
                       args.distros,
                       args.fqdn,
                       rosdistro=args.rosdistro,
                       commit=args.commit,
                       delete_extra_jobs=args.delete)

    if not args.commit: