diff options
Diffstat (limited to 'pomu/source/portage.py')
-rw-r--r-- | pomu/source/portage.py | 68 |
1 files changed, 3 insertions, 65 deletions
diff --git a/pomu/source/portage.py b/pomu/source/portage.py index 40ad964..e71f539 100644 --- a/pomu/source/portage.py +++ b/pomu/source/portage.py @@ -1,19 +1,17 @@ """ A package source module to import packages from configured portage repositories """ -import os -import re - from functools import cmp_to_key from os import path -from portage.versions import best, suffix_value, vercmp +from portage.versions import vercmp from pomu.package import Package from pomu.repo.repo import portage_repos, portage_repo_path from pomu.source import dispatcher +from pomu.util.pkg import cpv_split, ver_str +from pomu.util.portage import repo_pkgs from pomu.util.result import Result -from pomu.util.str import pivot class PortagePackage(): """A class to represent a portage package""" @@ -58,8 +56,6 @@ class PortagePackage(): return '{}/{}-{}{}::{}'.format(self.category, self.name, self.version, '' if self.slot == '0' else ':' + self.slot, self.repo) -suffixes = [x[0] for x in sorted(suffix_value.items(), key=lambda x:x[1])] -misc_dirs = ['profiles', 'licenses', 'eclass', 'metadata', 'distfiles', 'packages', 'scripts', '.git'] @dispatcher.source class PortageSource(): @@ -154,62 +150,4 @@ def sanity_check(repo, category, name, vernum, suff, rev, slot, ver=None): pkg = sorted(pkgs, key=cmp_to_key(lambda x,y:vercmp(x[3],y[3])), reverse=True)[0] return PortagePackage(*pkg) - -def ver_str(vernum, suff, rev): - """Gets the string representation of the version""" - return vernum + (suff if suff else '') + (rev if rev else '') - -def best_ver(repo, category, name, ver=None): - """Gets the best (newest) version of a package in the repo""" - ebuilds = [category + '/' + name + x[len(name):-7] for x in - os.listdir(path.join(portage_repo_path(repo), category, name)) - if x.endswith('.ebuild')] - cat, name, vernum, suff, rev = cpv_split(best(ebuilds)) - return ver_str(vernum, suff, rev) - -def repo_pkgs(repo, category, name, ver=None, slot=None): - """List of package occurences in the repo""" - if not repo: - res = [] - for r in portage_repos(): - res.extend(repo_pkgs(r, category, name, ver, slot)) - return res - if category: - if path.exists(path.join(portage_repo_path(repo), category, name)): - return [(repo, category, name, best_ver(repo, category, name))] - return [] - rpath = portage_repo_path(repo) - dirs = set(os.listdir(rpath)) - set(misc_dirs) - res = [] - for d in dirs: - if path.isdir(path.join(rpath, d, name)): - res.append((repo, d, name, best_ver(repo, d, name))) - return res - -#NOTE: consider moving cpv_split and ver_str into util -def cpv_split(pkg): - # dev-libs/openssl-0.9.8z_p8-r100 - category, _, pkg = pkg.rpartition('/') # category may be omitted - # openssl-0.9.8z_p8-r100 - m = re.search(r'-r\d+$', pkg) # revision is optional - if m: - pkg, rev = pivot(pkg, m.start(0), False) - else: - rev = None - # openssl-0.9.8z_p8 - m = re.search(r'_({})(\d*)$'.format('|'.join(suffixes)), pkg) - if m: - pkg, suff = pivot(pkg, m.start(0), False) - else: - suff = None - # openssl-0.9.8z - m = re.search(r'-(\d+(\.\d+)*)([a-z])?$', pkg) - if m: - pkg, vernum = pivot(pkg, m.start(0), False) - else: - vernum = None - # openssl - name = pkg - return category, name, vernum, suff, rev - __all__ = [PortagePackage, PortageSource] |