aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pomu/source')
-rw-r--r--pomu/source/__init__.py1
-rw-r--r--pomu/source/file.py18
-rw-r--r--pomu/source/portage.py68
3 files changed, 12 insertions, 75 deletions
diff --git a/pomu/source/__init__.py b/pomu/source/__init__.py
index 027227e..3e78150 100644
--- a/pomu/source/__init__.py
+++ b/pomu/source/__init__.py
@@ -3,3 +3,4 @@ from pomu.source.manager import PackageDispatcher
dispatcher = PackageDispatcher()
import pomu.source.portage
+import pomu.source.file
diff --git a/pomu/source/file.py b/pomu/source/file.py
index 8b1a650..d3fc7ed 100644
--- a/pomu/source/file.py
+++ b/pomu/source/file.py
@@ -2,15 +2,11 @@
A package source module to import packages from filesystem locations (ebuilds)
"""
-import os
-
from os import path
-from shutil import copy2
-from tempfile import mkdtemp
from pomu.package import Package
from pomu.source import dispatcher
-from pomu.source.portage import cpv_split, ver_str
+from pomu.util.pkg import cpv_split, ver_str
from pomu.util.query import query
from pomu.util.result import Result
@@ -26,11 +22,13 @@ class LocalEbuild():
self.path = path
def fetch(self):
- root = mkdtemp()
- pkgpath = path.join(root, self.category, self.name)
- os.makedirs(pkgpath)
- copy2(self.path, pkgpath)
- return Package(self, self.name, root, self.category, self.version)
+ return Package(self, self.name, '/', self.category, self.version,
+ filemap = {
+ path.join(
+ self.category,
+ self.name,
+ '{}/{}-{}.ebuild'.format(self.category, self.name, self.version)
+ ) : self.path})
@staticmethod
def from_data_file(path):
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]