Пример #1
0
class RosMeta(object):
    def __init__(self, repo_dir, do_clone, org='allenh1', repo='meta-ros'):
        self.repo = RepoInstance(org, repo, repo_dir, do_clone)
        self.branch_name = 'yocto-bot-%s' % rand_ascii_str()
        info('Creating new branch {0}...'.format(self.branch_name))
        self.repo.create_branch(self.branch_name)

    def clean_ros_recipe_dirs(self, distro=None):
        if distro:
            info('Cleaning up recipes-ros-{0} directory...'.format(distro))
            self.repo.git.rm('-rf', 'recipes-ros-{0}'.format(distro))
        else:
            info('Cleaning up recipes-ros-* directories...')
            self.repo.git.rm('-rf', 'recipes-ros-*')

    def commit_changes(self, distro):
        info('Adding changes...')
        if distro == 'all' or distro == 'update':
            self.repo.git.add('recipes-ros-*')
        else:
            self.repo.git.add('recipes-ros-{0}'.format(distro))
        commit_msg = {
            'update': 'rosdistro sync, {0}',
            'all': 'regenerate all distros, {0}',
            'lunar': 'regenerate ros-lunar, {0}',
            'indigo': 'regenerate ros-indigo, {0}',
            'kinetic': 'regenerate ros-kinetic, {0}',
        }[distro].format(time.ctime())
        info('Committing to branch {0}...'.format(self.branch_name))
        self.repo.git.commit(m='{0}'.format(commit_msg))

    def pull_request(self, message):
        pr_title = 'rosdistro sync, {0}'.format(time.ctime())
        self.repo.pull_request(message, pr_title)
Пример #2
0
class RosOverlay(object):
    def __init__(self,
                 repo_dir,
                 do_clone,
                 org='ros',
                 repo='ros-overlay',
                 from_branch=''):
        self.repo = RepoInstance(org,
                                 repo,
                                 repo_dir=repo_dir,
                                 do_clone=do_clone,
                                 from_branch=from_branch)
        self.branch_name = 'gentoo-bot-%s' % rand_ascii_str()
        info('Creating new branch {0}...'.format(self.branch_name))
        self.repo.create_branch(self.branch_name)

    def commit_changes(self, distro):
        info('Adding changes...')
        self.repo.git.add(self.repo.repo_dir)
        info('Committing to branch {0}...'.format(self.branch_name))
        if distro == 'all':
            commit_msg = 'regenerate all distros, {0}'
        elif distro:
            commit_msg = 'regenerate ros-{1}, {0}'
        else:
            commit_msg = 'rosdistro sync, {0}'
        commit_msg = commit_msg.format(time.ctime(), distro)
        self.repo.git.commit(m='{0}'.format(commit_msg))

    def regenerate_manifests(self,
                             regen_dict,
                             image_owner='allenh1',
                             image_name='ros_gentoo_base'):
        info("Pulling docker image '%s/%s:latest'..." %
             (image_owner, image_name))
        dock = Docker()
        dock.pull(image_owner, image_name)
        info('Running docker image...')
        info('Generating manifests...')
        dock.map_directory('/home/%s/.gnupg' % os.getenv('USER'),
                           '/root/.gnupg')
        dock.map_directory(self.repo.repo_dir, '/tmp/ros-overlay')
        for key in regen_dict.keys():
            for pkg in regen_dict[key]:
                pkg_dir = '/tmp/ros-overlay/ros-{0}/{1}'.format(key, pkg)
                dock.add_bash_command('cd {0}'.format(pkg_dir))
                dock.add_bash_command('repoman manifest')
        try:
            dock.run(show_cmd=True)
        except docker.errors.ContainerError:
            print(dock.log)
            raise

    def pull_request(self, message, overlay=None, title=''):
        if not title:
            title = 'rosdistro sync, {0}'.format(time.ctime())
        self.repo.pull_request(message, title)
Пример #3
0
class RosMeta(object):
    def __init__(
        self, dir, do_clone, branch, org='ros', repo='meta-ros', from_branch=''
    ):
        self.repo = RepoInstance(
            org, repo, dir, do_clone, from_branch=from_branch)
        self.branch_name = branch
        info('Creating new branch {0}...'.format(self.branch_name))
        self.repo.create_branch(self.branch_name)

    def clean_ros_recipe_dirs(self, distro=None):
        if distro:
            info(
                'Cleaning up generated-recipes-{} directory...'.format(distro))
            self.repo.git.rm('-rf', 'generated-recipes-{}'.format(distro))
        else:
            info('Cleaning up generated-recipes-* directories...')
            self.repo.git.rm('-rf', 'generated-recipes-*')

    def commit_changes(self, distro, commit_msg):
        info('Adding changes...')
        self.repo.git.add('generated-recipes-{0}'.format(distro))
        self.repo.git.add('conf/ros-distro/include/{0}/*.inc'.format(distro))
        self.repo.git.add('files/{0}/cache.*'.format(distro))
        self.repo.git.add('files/{0}/rosdep-resolve.yaml'.format(distro))
        self.repo.git.add(
            'files/{0}/newer-platform-components.list'.format(distro))
        self.repo.git.add(
            'files/{0}/superflore-change-summary.txt'.format(distro))
        info('Committing to branch {0}...'.format(self.branch_name))
        self.repo.git.commit(m=commit_msg)

    def pull_request(self, message, distro=None, title=''):
        self.repo.pull_request(message, title, branch=distro)

    def get_file_revision_logs(self, *file_path):
        return self.repo.git.log('--oneline', '--', *file_path)

    def get_change_summary(self):
        self.repo.git.add('generated-recipes-*')
        sep = '-' * 5
        return '\n'.join([
            sep, self.repo.git.status('--porcelain'), sep,
            self.repo.git.diff('conf'), sep, self.repo.git.diff(
                'files/*/cache.diffme',
                'files/*/newer-platform-components.list',
                'files/*/rosdep-resolve.yaml'
            ),
        ])
Пример #4
0
class RosOverlay(object):
    def __init__(self, repo_dir, do_clone, org='ros', repo='ros-overlay'):
        self.repo = RepoInstance(org,
                                 repo,
                                 repo_dir=repo_dir,
                                 do_clone=do_clone)
        self.branch_name = 'gentoo-bot-%s' % rand_ascii_str()
        info('Creating new branch {0}...'.format(self.branch_name))
        self.repo.create_branch(self.branch_name)

    def commit_changes(self, distro):
        info('Adding changes...')
        self.repo.git.add(self.repo.repo_dir)
        info('Committing to branch {0}...'.format(self.branch_name))
        commit_msg = {
            'update': 'rosdistro sync, ',
            'all': 'regenerate all distros, ',
            'lunar': 'regenerate ros-lunar, ',
            'indigo': 'regenerate ros-indigo, ',
            'kinetic': 'regenerate ros-kinetic, ',
        }[distro or 'update'] + time.ctime()
        self.repo.git.commit(m='{0}'.format(commit_msg))

    def regenerate_manifests(self, regen_dict):
        info('Building docker image...')
        docker_file = resource_filename('repoman_docker', 'Dockerfile')
        dock = Docker(docker_file, 'gentoo_repoman')
        dock.build()
        info('Running docker image...')
        info('Generating manifests...')
        dock.map_directory('/home/%s/.gnupg' % os.getenv('USER'),
                           '/root/.gnupg')
        dock.map_directory(self.repo.repo_dir, '/tmp/ros-overlay')
        for key in regen_dict.keys():
            for pkg in regen_dict[key]:
                pkg_dir = '/tmp/ros-overlay/ros-{0}/{1}'.format(key, pkg)
                dock.add_bash_command('cd {0}'.format(pkg_dir))
                dock.add_bash_command('repoman manifest')
                dock.add_bash_command('cd /tmp/ros-overlay')
        dock.run(show_cmd=True)

    def pull_request(self, message):
        pr_title = 'rosdistro sync, {0}'.format(time.ctime())
        self.repo.pull_request(message, pr_title)
Пример #5
0
class RosMeta(object):
    def __init__(
        self, dir, do_clone, branch, org='ros', repo='meta-ros',
        from_branch='', branch_name=''
    ):
        self.repo = RepoInstance(
            org, repo, dir, do_clone, from_branch=from_branch)
        self.branch_name = branch
        if branch:
            info('Creating new branch {0}...'.format(self.branch_name))
            self.repo.create_branch(self.branch_name)

    def clean_ros_recipe_dirs(self, distro=None):
        if distro:
            info(
                'Cleaning up meta-ros{}-{}/generated-recipes directory...'
                .format(yoctoRecipe._get_ros_version(distro), distro))
            self.repo.git.rm('-rf', 'meta-ros{}-{}/generated-recipes'.format(
                yoctoRecipe._get_ros_version(distro), distro))
        else:
            info('Cleaning up generated-recipes directories...')
            self.repo.git.rm('-rf', 'generated-recipes')

    def commit_changes(self, distro, commit_msg):
        info('Adding changes...')
        self.repo.git.add('meta-ros{0}-{1}/generated-recipes'.format(
            yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/conf/ros-distro/include/{1}/'
                          'generated/*.inc'.format(
                              yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/files/{1}/generated/'
                          'rosdep-resolve.yaml'.format(
                              yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/files/{1}/generated/'
                          'newer-platform-components.list'.format(
                              yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/files/{1}/generated/'
                          'superflore-change-summary.txt'.format(
                              yoctoRecipe._get_ros_version(distro), distro))
        if self.repo.git.status('--porcelain') == '':
            info('Nothing changed; no commit done')
        else:
            if self.branch_name:
                info('Committing to branch {0}...'.format(self.branch_name))
            else:
                info('Committing to current branch')
            self.repo.git.commit(m=commit_msg)

    def pull_request(self, message, distro=None, title=''):
        self.repo.pull_request(message, title, branch=distro)

    def get_file_revision_logs(self, *file_path):
        return self.repo.git.log('--oneline', '--', *file_path)

    def get_change_summary(self, distro):
        self.repo.git.add('meta-ros{0}-{1}/generated-recipes'.format(
            yoctoRecipe._get_ros_version(distro), distro))
        sep = '-' * 5
        return '\n'.join([
            sep,
            self.repo.git.status('--porcelain'),
            sep,
            self.repo.git.diff(
                'meta-ros{0}-{1}/conf/ros-distro/include/{1}/'
                'generated/*.inc'.format(
                    yoctoRecipe._get_ros_version(distro), distro)),
            sep,
            self.repo.git.diff(
                'meta-ros{0}-{1}/files/{1}/generated/'
                'newer-platform-components.list'.format(
                    yoctoRecipe._get_ros_version(distro), distro),
                'meta-ros{0}-{1}/files/{1}/generated/'
                'rosdep-resolve.yaml'.format(
                    yoctoRecipe._get_ros_version(distro), distro)
            ),
        ]) + '\n'
Пример #6
0
class RosMeta(object):
    def __init__(
        self, dir, do_clone, branch, org='ros', repo='meta-ros',
        from_branch='', branch_name=''
    ):
        self.repo = RepoInstance(
            org, repo, dir, do_clone, from_branch=from_branch)
        self.branch_name = branch
        if branch:
            info('Creating new branch {0}...'.format(self.branch_name))
            self.repo.create_branch(self.branch_name)

    def clean_ros_recipe_dirs(self, distro):
        # superflore-change-summary.txt is no longer being generated since:
        # https://github.com/ros-infrastructure/superflore/pull/273
        # but remove it here to make sure it gets deleted when new distro
        # release is being generated
        files = 'meta-ros{0}-{1}/generated-recipes '\
                'meta-ros{0}-{1}/conf/ros-distro/include/{1}/generated '\
                'meta-ros{0}-{1}/files/{1}/generated/'\
                'newer-platform-components.list '\
                'meta-ros{0}-{1}/files/{1}/generated/rosdep-resolve.yaml '\
                'meta-ros{0}-{1}/files/{1}/generated/'\
                'superflore-change-summary.txt '.format(
                    yoctoRecipe._get_ros_version(distro), distro)
        info(
            'Cleaning up:\n{0}'
            .format(files))
        self.repo.git.rm('-rf', '--ignore-unmatch', files)

    def commit_changes(self, distro, commit_msg):
        info('Commit changes...')
        if self.repo.git.status('--porcelain') == '':
            info('Nothing changed; no commit done')
        else:
            if self.branch_name:
                info('Committing to branch {0}...'.format(self.branch_name))
            else:
                info('Committing to current branch')
            self.repo.git.commit(m=commit_msg)

    def pull_request(self, message, distro=None, title=''):
        self.repo.pull_request(message, title, branch=distro)

    def get_file_revision_logs(self, *file_path):
        return self.repo.git.log('--oneline', '--', *file_path)

    def add_generated_files(self, distro):
        info('Adding changes...')
        self.repo.git.add('meta-ros{0}-{1}/generated-recipes'.format(
            yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/conf/ros-distro/include/{1}/'
                          'generated/*.inc'.format(
                              yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/files/{1}/generated/'
                          'rosdep-resolve.yaml'.format(
                              yoctoRecipe._get_ros_version(distro), distro))
        self.repo.git.add('meta-ros{0}-{1}/files/{1}/generated/'
                          'newer-platform-components.list'.format(
                              yoctoRecipe._get_ros_version(distro), distro))

    def get_change_summary(self, distro):
        sep = '-' * 5
        return '\n'.join([
            sep,
            self.repo.git.status('--porcelain'),
            sep,
            self.repo.git.diff(
                'HEAD',
                'meta-ros{0}-{1}/conf/ros-distro/include/{1}/'
                'generated/*.inc'.format(
                    yoctoRecipe._get_ros_version(distro), distro)),
            sep,
            self.repo.git.diff(
                'HEAD',
                'meta-ros{0}-{1}/files/{1}/generated/'
                'newer-platform-components.list'.format(
                    yoctoRecipe._get_ros_version(distro), distro),
                'meta-ros{0}-{1}/files/{1}/generated/'
                'rosdep-resolve.yaml'.format(
                    yoctoRecipe._get_ros_version(distro), distro)
            ),
        ]) + '\n'