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)
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)
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' ), ])
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)
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'
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'