public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/package_backends/
Date: Tue,  3 Jul 2012 21:08:10 +0000 (UTC)	[thread overview]
Message-ID: <1341310180.91ce510fc19933e558e0160e3400ff32719fbe36.bacher09@gentoo> (raw)

commit:     91ce510fc19933e558e0160e3400ff32719fbe36
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jul  3 10:09:40 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jul  3 10:09:40 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=91ce510f

Changes in portage backend

---
 gpackages/apps/packages/admin.py                   |    4 +-
 gpackages/apps/packages/models.py                  |    4 +-
 .../libs/package_info/package_backends/pkgcore.py  |    2 +-
 .../libs/package_info/package_backends/portage.py  |   89 ++++++++++++--------
 4 files changed, 60 insertions(+), 39 deletions(-)

diff --git a/gpackages/apps/packages/admin.py b/gpackages/apps/packages/admin.py
index 4daf96e..04a269e 100644
--- a/gpackages/apps/packages/admin.py
+++ b/gpackages/apps/packages/admin.py
@@ -33,8 +33,8 @@ class ArchesAdmin(admin.ModelAdmin):
     search_fields = ('name',)
 
 class EbuildAdmin(admin.ModelAdmin):
-    list_display = ('__unicode__', 'is_masked', )
-    list_filter = ('created_datetime','updated_datetime', 'licenses', 'is_masked')
+    list_display = ('__unicode__', 'is_hard_masked', )
+    list_filter = ('created_datetime','updated_datetime', 'licenses', 'is_hard_masked')
     filter_horizontal = ('licenses', 'use_flags', 'homepages')
     date_hierarchy = 'updated_datetime'
     list_select_related = True

diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 21d8c0c..5ce8919 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -396,7 +396,7 @@ class EbuildModel(AbstractDateTimeModel):
     ebuild_hash = models.CharField(max_length = 128)
     ebuild_mtime = models.DateTimeField(blank = True, null = True)
     is_deleted = models.BooleanField(default = False)
-    is_masked = models.BooleanField(default = False)
+    is_hard_masked = models.BooleanField(default = False)
 
     homepages = models.ManyToManyField(HomepageModel, blank = True)
     description = models.TextField(blank = True, null = True)
@@ -421,7 +421,7 @@ class EbuildModel(AbstractDateTimeModel):
         self.update_by_ebuild(ebuild)
 
     def update_by_ebuild(self, ebuild):
-        self.is_masked = ebuild.is_masked
+        self.is_hard_masked = ebuild.is_hard_masked
         self.version = ebuild.version
         self.revision = ebuild.revision_as_int
         self.license = ebuild.license

diff --git a/gpackages/libs/package_info/package_backends/pkgcore.py b/gpackages/libs/package_info/package_backends/pkgcore.py
index 6f83df6..5b053aa 100644
--- a/gpackages/libs/package_info/package_backends/pkgcore.py
+++ b/gpackages/libs/package_info/package_backends/pkgcore.py
@@ -179,5 +179,5 @@ class Ebuild(EbuildMixin):
 
     # Need changes !!!
     @property
-    def is_masked(self):
+    def is_hard_masked(self):
         return False

diff --git a/gpackages/libs/package_info/package_backends/portage.py b/gpackages/libs/package_info/package_backends/portage.py
index 581680b..d821e9e 100644
--- a/gpackages/libs/package_info/package_backends/portage.py
+++ b/gpackages/libs/package_info/package_backends/portage.py
@@ -5,8 +5,7 @@ from portage.dep import Atom
 from portage.exception import PortageException, FileNotFound, InvalidAtom, \
                               InvalidDependString, InvalidPackageName
 
-from gentoolkit.package import Package as PackageInfo
-from gentoolkit import errors
+from gentoolkit.cpv import CPV
 from ..generic import cached_property 
 import os.path
 #Mixins
@@ -22,7 +21,7 @@ VARDB = portage.db[portage.root]["vartree"].dbapi
 ARCHES = PORTDB.settings["PORTAGE_ARCHLIST"].split()
 
 def _ebuild_environment(name):
-    return lambda self: self.package_object.environment(name)
+    return lambda self: self._env.get(name, '')
 
 class Portage(PortageMixin):
 
@@ -142,74 +141,96 @@ class Package(PackageMixin):
 class Ebuild(EbuildMixin):
     "Represent ebuild as object"
 
-    __slots__ = ('package', 'ebuild', 'package_object', '_cache')
+    __slots__ = ('package', 'ebuild', 'cpv_object', '_cache', '_env', '_is_valid')
+    ENV_VARS = PORTDB._aux_cache_keys
 
     def __init__(self, package, ebuild):
         self.package = package
         self.ebuild = ebuild
-        self.package_object = PackageInfo(ebuild)
+        self.cpv_object = CPV(ebuild)
         self._cache = {}
+        self._env = None
+        # Maybe this should be lazy ?
+        self._set_env()
+
+    def _set_env(self):
+        try:
+            env_t = PORTDB.aux_get(self.cpv, self.ENV_VARS,
+                    mytree = self.package.category.porttree_path)
+        except KeyError: 
+            env_t = ()
+            self._is_valid = False
+        else:
+            self._is_valid = True
+        env = {}
+
+        if self._is_valid:
+            env = dict(zip(self.ENV_VARS, env_t))
+
+        self._env = env
 
     @property
     def keywords_env(self):
-        return self.package_object.environment("KEYWORDS", prefer_vdb = False)
+        return self._env.get("KEYWORDS")
 
     @property
     def is_valid(self):
         "Check if ebuild is valid"
-        try:
-            self.eapi
-        except errors.GentoolkitFatalError:
-            return False
-        else:
-            return True
+        return self._is_valid
 
-    #Could be faster
     @cached_property
-    def is_masked(self):
-        return self.package_object.is_masked()
+    def is_hard_masked(self):
+        if self.mask_reason:
+            return True
+        else:
+            return False
 
     @property
     def version(self):
         "Ebuild version"
-        return self.package_object.version
+        return self.cpv_object.version
 
     @property
     def revision(self):
         "Ebuild revision"
-        return self.package_object.revision
+        return self.cpv_object.revision
 
     @property
     def fullversion(self):
         "Version with revision"
-        return self.package_object.fullversion
+        return self.cpv_object.fullversion
 
-    @property
+    @cached_property
     def ebuild_path(self):
         "Full path to ebuild"
-        return self.package_object.ebuild_path()
+        return os.path.join(self.package.package_path, self.ebuild_file)
+
+    @property
+    def name(self):
+        return self.cpv_object.name
 
-    homepage_env = cached_property(_ebuild_environment('HOMEPAGE'),
-                                   name = 'homepage_env')
-    license = cached_property(_ebuild_environment('LICENSE'),
-                              name = 'license')
-    description = cached_property(_ebuild_environment('DESCRIPTION'),
-                                  name = 'description')
-    eapi = cached_property(_ebuild_environment('EAPI'),
-                           name = 'eapi')
-    slot = cached_property(_ebuild_environment('SLOT'),
-                           name = 'slot')
+    @property
+    def ebuild_file(self):
+        return '%s-%s.ebuild' % (self.name, self.fullversion)
 
-    iuse_env = cached_property(_ebuild_environment('IUSE'),
-                           name = 'iuse')
+    homepage_env = property(_ebuild_environment('HOMEPAGE'))
+    license = property(_ebuild_environment('LICENSE'))
+    description = property(_ebuild_environment('DESCRIPTION'))
+    eapi = property(_ebuild_environment('EAPI'))
+    slot = property(_ebuild_environment('SLOT'))
+
+    iuse_env = property(_ebuild_environment('IUSE'))
 
     @property
     def cpv(self):
-        return self.package
+        return self.cpv_object.cpv
 
     @cached_property
     def mask_reason(self):
-        reas, in_file = self.package_object.get_mask_reason()
+        reas, in_file = portage.getmaskingreason(self.cpv,
+                                                 metadata = self._env,
+                                                 return_location=True,
+                                                 myrepo = self.package.category.porttree.name)
         if in_file is None:
             return None
         elif in_file.startswith('/etc/portage/'):



             reply	other threads:[~2012-07-03 21:08 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-03 21:08 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-07-03 21:08 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/package_backends/ Slava Bacherikov
2012-07-05 23:27 Slava Bacherikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1341310180.91ce510fc19933e558e0160e3400ff32719fbe36.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox