def test_deb_changes(self, session): binary = models.Binary( 'ceph-1.1.changes', None, ref='firefly', distro='ubuntu', distro_version='trusty', arch='all', ) command = util.reprepro_command('/path', binary) assert command[-3] == 'include'
def test_deb_changes(self, session, tmpdir): pecan.conf.distributions_root = str(tmpdir) binary = models.Binary( 'ceph-1.1.changes', self.p, ref='firefly', distro='ubuntu', distro_version='trusty', arch='all', ) command = util.reprepro_command('/path', binary) assert command[-3] == 'include'
def create_deb_repo(repo_id): """ Go create or update repositories with specific IDs. """ # get the root path for storing repos # TODO: Is it possible we can get an ID that doesn't exist anymore? repo = models.Repo.get(repo_id) logger.info("processing repository: %s", repo) # Determine paths for this repository paths = util.repo_paths(repo) # determine if other repositories might need to be queried to add extra # binaries (repos are tied to binaries which are all related with refs, # archs, distros, and distro versions. conf_extra_repos = util.get_extra_repos(repo.project.name, repo.ref) combined_versions = util.get_combined_repos(repo.project.name) extra_binaries = [] for project_name, project_refs in conf_extra_repos.items(): for ref in project_refs: logger.info('fetching binaries for project: %s, ref: %s', project_name, ref) found_binaries = util.get_extra_binaries( project_name, None, repo.distro_version, distro_versions=combined_versions, ref=ref if ref != 'all' else None ) extra_binaries += found_binaries # check for the option to 'combine' repositories with different # debian/ubuntu versions for distro_version in combined_versions: logger.info( 'fetching distro_version %s for project: %s', distro_version, repo.project.name ) # When combining distro_versions we cannot filter by distribution as # well, otherwise it will be an impossible query. E.g. "get wheezy, # precise and trusty but only for the Ubuntu distro" extra_binaries += util.get_extra_binaries( repo.project.name, None, distro_version, ref=repo.ref ) # try to create the absolute path to the repository if it doesn't exist util.makedirs(paths['absolute']) all_binaries = extra_binaries + [b for b in repo.binaries] for binary in all_binaries: # XXX This is really not a good alternative but we are not going to be # using .changes for now although we can store it. if binary.extension == 'changes': continue try: command = util.reprepro_command(paths['absolute'], binary) except KeyError: # probably a tar.gz or similar file that should not be added directly continue try: logger.info('running command: %s', ' '.join(command)) except TypeError: logger.exception('was not able to add binary: %s', binary) continue else: try: subprocess.check_call(command) except subprocess.CalledProcessError: logger.exception('failed to add binary %s', binary.name) # Finally, set the repo path in the object and mark needs_update as False repo.path = paths['absolute'] repo.needs_update = False models.commit()