Example #1
0
    def getpackages(self, **kwargs):
        """ Valid parameters:
        :param local_info_repo: local rdoinfo repo to use instead of fetching
                                the default one using rdopkg.
        :param tags: OpenStack release tags to use (mitaka, newton, etc).
        """
        local_info_repo = kwargs.get('local_info_repo')
        tags = kwargs.get('tags')
        inforepo = None

        if local_info_repo:
            inforepo = rdoinfo.RdoinfoRepo(local_repo_path=local_info_repo,
                                           apply_tag=tags,
                                           include_fns=[])
        elif self.config_options.rdoinfo_repo:
            inforepo = rdoinfo.RdoinfoRepo(rdopkg_cfg['HOME_DIR'],
                                           self.config_options.rdoinfo_repo,
                                           apply_tag=tags,
                                           include_fns=[])
            inforepo.init()
        else:
            inforepo = rdoinfo.get_default_inforepo(apply_tag=tags,
                                                    include_fns=[])
            # rdopkg will clone/pull rdoinfo repo as needed (~/.rdopkg/rdoinfo)
            inforepo.init()

        pkginfo = inforepo.get_info()

        self.packages = pkginfo["packages"]
        if tags:
            # FIXME allow list of tags?
            self.packages = rdoinfo.filter_pkgs(self.packages, {'tags': tags})
        return self.packages
Example #2
0
def info(pkgs=None, local_info=None, apply_tag=None, force_fetch=False):
    if local_info:
        inforepo = rdoinfo.RdoinfoRepo(local_repo_path=local_info,
                                       apply_tag=apply_tag)
    else:
        inforepo = rdoinfo.get_default_inforepo(apply_tag=apply_tag)
    inforepo.init(force_fetch=force_fetch)
    if pkgs:
        filters = {}
        for pf in pkgs:
            attr, sep, rex = pf.partition(':')
            if not sep:
                # filter by name by default
                attr = 'name'
                rex = pf
            filters[attr] = rex
        inforepo.print_pkgs(filters)
    else:
        inforepo.print_summary()
        print('')
        print("Supply regex filter(s) to list package details, e.g.:\n{t.cmd}"
              "    rdopkg info nova\n"
              "    rdopkg info conf:client maintainers:jruzicka\n"
              "    rdopkg info '.*'"
              "{t.normal}".format(t=log.term))
Example #3
0
def info(pkgs=None, info_repo=None, force_fetch=False, verbose=False):
    if not info_repo:
        info_repo = cfg["RDOINFO_REPO"]
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=force_fetch)
    if pkgs:
        filters = {}
        for pf in pkgs:
            attr, sep, rex = pf.partition(":")
            if not sep:
                # filter by name by default
                attr = "name"
                rex = pf
            filters[attr] = rex
        inforepo.print_pkgs(filters)
    else:
        inforepo.print_summary()
        print
        print(
            "Supply regex filter(s) to list package details, e.g.:\n{t.cmd}"
            "    rdopkg info nova\n"
            "    rdopkg info conf:client maintainers:jruzicka\n"
            "    rdopkg info '.*'"
            "{t.normal}".format(t=log.term)
        )
Example #4
0
File: reqs.py Project: yac/rdopkg
def reqquery(reqs, release, dist=None, module2pkg=True, verbose=False):
    info = rdoinfo.get_default_inforepo()
    distrepos = info.get_distrepos(release=release, dist=dist)
    r = []
    for rls, dist, repos in distrepos:
        packages = []
        for req in reqs:
            if module2pkg:
                pkg_name = pymod2pkg.module2package(req.name, dist)
            else:
                pkg_name = req.name
            vers = query.query_repos(repos, pkg_name, verbose=verbose)
            repo, nvr, v = None, None, None
            if vers:
                repo, nvr = vers[0]
                v = specfile.nvr2version(nvr)
            pkg = {
                'package': pkg_name,
                'version_required': req.vers or None,
                'version_available': v,
                'nvr_available': nvr,
                'repo_available': repo,
            }
            if module2pkg:
                pkg['module'] = req.name
            packages.append(pkg)
        vers = {
            'release': rls,
            'dist': dist,
            'packages': packages
        }
        r.append(vers)
    return r
Example #5
0
def reqquery(reqs, release, dist=None, module2pkg=True, verbose=False):
    info = rdoinfo.get_default_inforepo()
    distrepos = info.get_distrepos(release=release, dist=dist)
    r = []
    for rls, dist, repos in distrepos:
        packages = []
        for req in reqs:
            if module2pkg:
                pkg_name = pymod2pkg.module2package(req.name, dist)
            else:
                pkg_name = req.name
            vers = query.query_repos(repos, pkg_name, verbose=verbose)
            repo, nvr, v = None, None, None
            if vers:
                repo, nvr = vers[0]
                v = specfile.nvr2version(nvr)
            pkg = {
                'package': pkg_name,
                'version_required': req.vers or None,
                'version_available': v,
                'nvr_available': nvr,
                'repo_available': repo,
            }
            if module2pkg:
                pkg['module'] = req.name
            packages.append(pkg)
        vers = {'release': rls, 'dist': dist, 'packages': packages}
        r.append(vers)
    return r
Example #6
0
def query_rdo(rlsdist, package, verbose=False):
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init()
    _release, _, _dist = rlsdist.partition('/')
    rds = inforepo.get_distrepos(_release, _dist)
    results = []
    for release, dist, distrepos in rds:
        r = query_repos(distrepos, package, verbose=verbose)
        results.append((release, dist, r))
    return results
Example #7
0
def query_rdo(rlsdist, package, verbose=False):
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init()
    _release, _, _dist = rlsdist.partition('/')
    rds = inforepo.get_distrepos(_release, _dist)
    results = []
    for release, dist, distrepos in rds:
        r = query_repos(distrepos, package, verbose=verbose)
        results.append((release, dist, r))
    return results
Example #8
0
def findpkg(query, strict=False, local_info=None, force_fetch=False):
    if local_info:
        inforepo = rdoinfo.RdoinfoRepo(local_repo_path=local_info)
    else:
        inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=force_fetch)
    pkg = inforepo.find_package(query, strict=strict)
    if not pkg:
        raise exception.InvalidRDOPackage(
            msg="No package found in rdoinfo for query: %s" % query)
    rdoinfo.print_pkg(pkg)
Example #9
0
def info_tags_diff(local_info=None, apply_tag=None):
    if local_info:
        inforepo = rdoinfo.RdoinfoRepo(local_repo_path=local_info,
                                       apply_tag=apply_tag)
    else:
        inforepo = rdoinfo.get_default_inforepo(apply_tag=apply_tag)
    info1 = inforepo.get_info(gitrev='HEAD~')
    info2 = inforepo.get_info()
    tdiff = rdoinfo.tags_diff(info1, info2)
    if not tdiff:
        sys.stderr.write("No tag changes detected.\n")
    else:
        for pkg, changes in tdiff:
            print("%s %s" % (pkg, changes))
Example #10
0
def getpackages(local_info_repo=None, tags=None):
    inforepo = None
    if local_info_repo:
        inforepo = rdoinfo.RdoinfoRepo(local_repo_path=local_info_repo,
                                       apply_tag=tags)
    else:
        inforepo = rdoinfo.get_default_inforepo(apply_tag=tags)
        # rdopkg will clone/pull rdoinfo repo as needed (~/.rdopkg/rdoinfo)
        inforepo.init()
    pkginfo = inforepo.get_info()
    packages = pkginfo["packages"]
    if tags:
        # FIXME allow list of tags?
        packages = rdoinfo.filter_pkgs(packages, {'tags': tags})
    return packages
Example #11
0
def list_projects():
    inforepo = rdoinfo.get_default_inforepo()
    info = inforepo.get_info()
    pkgs = info['packages']

    pkg_filter = {'name': '^openstack-'}
    pkgs = rdoinfo.filter_pkgs(pkgs, pkg_filter)

    for pkg in pkgs:
        project = pkg.get('project') or pkg['name']
        print("### " + project)
        print("package: " + pkg['name'])
        print("code: " + pkg['upstream'])
        print("maintainers: " + " ".join(pkg['maintainers']))
        print("")
Example #12
0
def list_projects():
    inforepo = rdoinfo.get_default_inforepo()
    info = inforepo.get_info()
    pkgs = info['packages']

    pkg_filter = {
        'name': '^openstack-'
    }
    pkgs = rdoinfo.filter_pkgs(pkgs, pkg_filter)

    for pkg in pkgs:
        project = pkg.get('project') or pkg['name']
        print("### " + project)
        print("package: " + pkg['name'])
        print("code: " + pkg['upstream'])
        print("maintainers: " + " ".join(pkg['maintainers']))
        print("")
Example #13
0
def clone(package, force_fetch=False, use_master_distgit=False):
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=force_fetch)
    pkg = inforepo.get_package(package)
    if not pkg:
        raise exception.InvalidRDOPackage(package=package)
    if use_master_distgit:
        try:
            distgit = pkg['master-distgit']
            distgit_str = 'master-distgit'
        except KeyError:
            raise exception.InvalidUsage(
                msg="-m/--use-master-distgit used but 'master-distgit' "
                    "missing in rdoinfo for package: %s" % package)
    else:
        distgit = pkg['distgit']
        distgit_str = 'distgit'
    log.info("Cloning {dg} into ./{t.bold}{pkg}{t.normal}/".format(
        t=log.term, dg=distgit_str, pkg=package))
    patches = pkg.get('patches')
    upstream = pkg.get('upstream')

    git('clone', distgit, package)
    with helpers.cdir(package):
        if patches:
            log.info('Adding patches remote...')
            git('remote', 'add', 'patches', patches)
        else:
            log.warn("'patches' remote information not available in rdoinfo.")
        if upstream:
            log.info('Adding upstrem remote...')
            git('remote', 'add', 'upstream', upstream)
        else:
            log.warn("'upstream' remote information not available in rdoinfo.")
        if patches or upstream:
            git('fetch', '--all')
        git('remote', '-v', direct=True)
Example #14
0
def clone(package, force_fetch=False, use_master_distgit=False):
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=force_fetch)
    pkg = inforepo.get_package(package)
    if not pkg:
        raise exception.InvalidRDOPackage(package=package)
    if use_master_distgit:
        try:
            distgit = pkg["master-distgit"]
            distgit_str = "master-distgit"
        except KeyError:
            raise exception.InvalidUsage(
                msg="-m/--use-master-distgit used but 'master-distgit' " "missing in rdoinfo for package: %s" % package
            )
    else:
        distgit = pkg["distgit"]
        distgit_str = "distgit"
    log.info("Cloning {dg} into ./{t.bold}{pkg}{t.normal}/".format(t=log.term, dg=distgit_str, pkg=package))
    patches = pkg.get("patches")
    upstream = pkg.get("upstream")

    git("clone", distgit, package)
    with helpers.cdir(package):
        if patches:
            log.info("Adding patches remote...")
            git("remote", "add", "patches", patches)
        else:
            log.warn("'patches' remote information not available in rdoinfo.")
        if upstream:
            log.info("Adding upstream remote...")
            git("remote", "add", "upstream", upstream)
        else:
            log.warn("'upstream' remote information not available in rdoinfo.")
        if patches or upstream:
            git("fetch", "--all")
        git("remote", "-v", direct=True)
Example #15
0
def clone(
        package,
        force_fetch=False,
        use_master_distgit=False,
        gerrit_remotes=False,
        review_user=None):
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=force_fetch)
    pkg = inforepo.get_package(package)
    if not pkg:
        raise exception.InvalidRDOPackage(package=package)
    if use_master_distgit:
        try:
            distgit = pkg['master-distgit']
            distgit_str = 'master-distgit'
        except KeyError:
            raise exception.InvalidUsage(
                msg="-m/--use-master-distgit used but 'master-distgit' "
                    "missing in rdoinfo for package: %s" % package)
    else:
        distgit = pkg['distgit']
        distgit_str = 'distgit'
    log.info("Cloning {dg} into ./{t.bold}{pkg}{t.normal}/".format(
        t=log.term, dg=distgit_str, pkg=package))
    patches = pkg.get('patches')
    upstream = pkg.get('upstream')
    review_patches = pkg.get('review-patches')
    review_origin = pkg.get('review-origin')

    git('clone', distgit, package)
    with helpers.cdir(package):
        if gerrit_remotes:
            log.info('Adding gerrit-origin remote...')
            git('remote', 'add', 'gerrit-origin', distgit)
        if patches:
            log.info('Adding patches remote...')
            git('remote', 'add', 'patches', patches)
            if gerrit_remotes:
                log.info('Adding gerrit-patches remote...')
                git('remote', 'add', 'gerrit-patches', patches)
        else:
            log.warn("'patches' remote information not available in rdoinfo.")
        if upstream:
            log.info('Adding upstream remote...')
            git('remote', 'add', 'upstream', upstream)
        else:
            log.warn("'upstream' remote information not available in rdoinfo.")
        if patches or upstream:
            git('fetch', '--all')

        if not review_user:
            # USERNAME is an env var used by gerrit
            review_user = os.environ.get('USERNAME') or os.environ.get('USER')
        msg_user = ('Using {t.bold}{u}{t.normal} as gerrit username, '
                    'you can change it with '
                    '{t.cmd}git remote set-url {r} ...{t.normal}')
        if review_patches:
            log.info('Adding gerrit remote for patch chains reviews...')
            r = tidy_ssh_user(review_patches, review_user)
            log.info(msg_user.format(u=review_user, r='review-patches',
                                     t=log.term))
            git('remote', 'add', 'review-patches', r)
        else:
            log.warn("'review-patches' remote information not available"
                     " in rdoinfo.")
        if review_origin:
            log.info('Adding gerrit remote for reviews...')
            r = tidy_ssh_user(review_origin, review_user)
            log.info(msg_user.format(u=review_user, r='review-origin',
                                     t=log.term))
            git('remote', 'add', 'review-origin', r)
        else:
            log.warn("'review-origin' remote information not available"
                     " in rdoinfo.")
        git('remote', '-v', direct=True)
Example #16
0
File: guess.py Project: yac/rdopkg
def _get_rdoinfo():
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=False)
    return inforepo.get_info()
Example #17
0
def _get_rdoinfo():
    inforepo = rdoinfo.get_default_inforepo()
    inforepo.init(force_fetch=False)
    return inforepo.get_info()