aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pomu/source/portage.py')
-rw-r--r--pomu/source/portage.py68
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]