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
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))
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) )
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
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
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
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)
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))
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
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("")
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("")
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)
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)
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)
def _get_rdoinfo(): inforepo = rdoinfo.get_default_inforepo() inforepo.init(force_fetch=False) return inforepo.get_info()