def make_repository(session, directory, relativeDName, category, target): logger.info("Checking into Repo %s - %s - cat: %s - target: %s" % (directory, relativeDName, category, target)) warning = "Won't make repository object" # For yum repos and ostree repos allowed_targets = ['repomd.xml', 'summary'] if target not in allowed_targets: logger.warning("%s: %r not in %r" % (warning, target, allowed_targets)) return if target == 'repomd.xml': (ver, arch) = guess_ver_arch_from_path(session, category, relativeDName) if ver is None or arch is None: logger.warning("%s: could not guess version and arch %r, %r" % (warning, ver, arch)) return None elif target == 'summary': # For ostree, we someday need to actually extract the arch information # from the ostree repo, but for now (F21 and F22) we will only be # shipping x86_64, so we hardcode that. At present, it is not possible # to query an ostree repo for the arch information. Bug walters about # this. arch = mirrormanager2.lib.get_arch_by_name(session, 'x86_64') # Furthermore, we'll grab the version piece from the path which looks # like atomic/rawhide or atomic/21. ver = relativeDName.rstrip('/').split('/')[-1] ver = mirrormanager2.lib.get_version_by_name_version( session, category.product.name, ver) if ver is None: if not relativeDName.endswith('/'): relativeDName += '/' ver = create_version_from_path(category, relativeDName) session.add(ver) session.flush() version_cache.append(ver) # stop making duplicate Repository objects. if len(directory.repositories) > 0: logger.warning("%s: directory already has a repository") return None repo = None prefix = repo_prefix(relativeDName, category, ver) repo = mirrormanager2.lib.get_repo_prefix_arch(session, prefix, arch.name) if not repo: # historically, Repository.name was a longer string with # product and category deliniations. But we were getting # unique constraint conflicts once we started introducing # repositories under repositories. And .name isn't used for # anything meaningful. So simply have it match dir.name, # which can't conflict. repo = Repository(name=directory.name, category=category, version=ver, arch=arch, directory=directory, prefix=prefix) logger.info( 'Created Repository(prefix=%s, version=%s, arch=%s, ' 'category=%s) -> Directory %s' % (prefix, ver.name, arch.name, category.name, directory.name)) session.add(repo) session.flush() else: logger.info('Adjusting prefix Repository(%s) %s -> %s' % (repo, repo.prefix, prefix)) if repo.prefix != prefix: repo.prefix = prefix return repo
def make_repository(session, directory, relativeDName, category, target): logger.info( "Checking into Repo %s - %s - cat: %s - target: %s" % (directory, relativeDName, category, target)) warning = "Won't make repository object" # For yum repos and ostree repos allowed_targets = ['repomd.xml', 'summary'] if target not in allowed_targets: logger.warning("%s: %r not in %r" % (warning, target, allowed_targets)) return if target == 'repomd.xml': (ver, arch) = guess_ver_arch_from_path( session, category, relativeDName) if ver is None or arch is None: logger.warning("%s: could not guess version and arch %r, %r" % ( warning, ver, arch)) return None elif target == 'summary': # For ostree, we someday need to actually extract the arch information # from the ostree repo, but for now (F21 and F22) we will only be # shipping x86_64, so we hardcode that. At present, it is not possible # to query an ostree repo for the arch information. Bug walters about # this. arch = mirrormanager2.lib.get_arch_by_name(session, 'x86_64') # Furthermore, we'll grab the version piece from the path which looks # like atomic/rawhide or atomic/21. ver = relativeDName.rstrip('/').split('/')[-1] ver = mirrormanager2.lib.get_version_by_name_version( session, category.product.name, ver) if ver is None: if not relativeDName.endswith('/'): relativeDName += '/' ver = create_version_from_path(category, relativeDName) session.add(ver) session.flush() version_cache.append(ver) # stop making duplicate Repository objects. if len(directory.repositories) > 0: logger.warning("%s: directory already has a repository") return None repo = None prefix = repo_prefix(relativeDName, category, ver) repo = mirrormanager2.lib.get_repo_prefix_arch( session, prefix, arch.name) if not repo: # historically, Repository.name was a longer string with # product and category deliniations. But we were getting # unique constraint conflicts once we started introducing # repositories under repositories. And .name isn't used for # anything meaningful. So simply have it match dir.name, # which can't conflict. repo = Repository( name=directory.name, category=category, version=ver, arch=arch, directory=directory, prefix=prefix) logger.info( 'Created Repository(prefix=%s, version=%s, arch=%s, ' 'category=%s) -> Directory %s' % (prefix, ver.name, arch.name, category.name, directory.name)) session.add(repo) session.flush() else: logger.info( 'Adjusting prefix Repository(%s) %s -> %s' % (repo, repo.prefix, prefix)) if repo.prefix != prefix: repo.prefix = prefix return repo