* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
@ 2012-08-11 22:30 Slava Bacherikov
0 siblings, 0 replies; 6+ messages in thread
From: Slava Bacherikov @ 2012-08-11 22:30 UTC (permalink / raw
To: gentoo-commits
commit: a0bb82158b882e0304274b7998e5961438182d99
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Aug 7 15:02:28 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Aug 7 15:02:28 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a0bb8215
More pretty urls
---
gpackages/apps/packages/models.py | 8 +++---
gpackages/apps/packages/urls.py | 8 ++++--
gpackages/apps/packages/views.py | 33 +++++++++++++++++++++++-----
gpackages/libs/package_info/validators.py | 2 +-
4 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index bc592cd..702f3a5 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -526,8 +526,8 @@ class PackageModel(StatsModel, AbstractDateTimeModel):
@models.permalink
def get_absolute_url(self):
# It coold been in many repositories
- kwargs = { 'cpr': self.cp_or_cpr() }
- return ('package',(), kwargs )
+ kwargs = { 'atom': self.cp_or_cpr() }
+ return ('auto',(), kwargs )
class Meta:
unique_together = ('virtual_package', 'repository')
@@ -797,8 +797,8 @@ class EbuildModel(AbstractDateTimeModel):
@models.permalink
def get_absolute_url(self):
# It coold been in many repositories
- kwargs = { 'cpvr': self.cpv_or_cpvr() }
- return ('ebuild',(), kwargs )
+ kwargs = { 'atom': self.cpv_or_cpvr() }
+ return ('auto',(), kwargs )
class Meta:
unique_together = ('package', 'version', 'revision')
diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py
index 1a59669..a970777 100644
--- a/gpackages/apps/packages/urls.py
+++ b/gpackages/apps/packages/urls.py
@@ -5,7 +5,7 @@ from views import CategoriesListView, HerdsListView, MaintainersListView, \
GlobalUseListView, NewsListView, NewsDetailView, \
LicenseDetailView, ArchChoiceView, LicensesListView, \
LocalUseListView, FilteringView, RepoDetailView, \
- MainPageFeed, MainPageFeedAtom
+ MainPageFeed, MainPageFeedAtom, auto_package_or_ebuild
urlpatterns = patterns('',
url(r'^categories/$', CategoriesListView.as_view(), name = 'categories'),
@@ -17,13 +17,13 @@ urlpatterns = patterns('',
url(r'^license-groups/$', LicenseGroupsView.as_view(), name = 'license_groups'),
url(r'^$', EbuildsListView.as_view(), name = 'ebuilds'),
url(r'^ebuild/(?P<pk>\d+)/$', EbuildDetailView.as_view(), name = 'ebuild'),
- url(r'^ebuild/(?P<cpvr>[^/]+/[^/]+)/$', EbuildDetailView.as_view(), name = 'ebuild'),
+ url(r'^ebuild/(?P<atom>[^/]+/[^/]+)/$', EbuildDetailView.as_view(), name = 'ebuild'),
url(r'^packages/{0}$'.format(PackagesListsView.get_url_part()), PackagesListsView.as_view(), name = 'packages'),
url(r'^newpackages/$', PackagesListsView.as_view(), kwargs = {'order': 'create', 'rev': 'rev'},name = 'newpackages'),
#url(r'^package/(?:(?P<pk>\d+)|(?P<category>[^/]+)/(?P<name>[^/]+))/$', PackageDetailView.as_view(), name = 'package'),
url(r'^package/(?P<pk>\d+)/$', PackageDetailView.as_view(), name = 'package'),
- url(r'^package/(?P<cpr>[^/]+/[^/]+)/$', PackageDetailView.as_view(), name = 'package'),
+ url(r'^package/(?P<atom>[^/]+/[^/]+)/$', PackageDetailView.as_view(), name = 'package'),
url(r'^news/$', NewsListView.as_view(), name = 'news'),
url(r'^news/(?P<pk>\d+)/$', NewsDetailView.as_view(), name = 'news_item'),
url(r'^news/(?P<slug>[^/]+)/$', NewsDetailView.as_view(), name = 'news_item'),
@@ -34,4 +34,6 @@ urlpatterns = patterns('',
url(r'^repository/(?P<slug>[^/]+)/$', RepoDetailView.as_view(), name = 'repository'),
url(r'^rss/$', MainPageFeed()),
url(r'^atom/$', MainPageFeedAtom()),
+ url(r'^(?P<atom>[^/]+/[^/]+)/$', auto_package_or_ebuild, name = 'auto'),
+ url(r'^(?P<category>[^/]+)/$', PackagesListsView.as_view(), name = 'packages'),
)
diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
index 4a5d509..5a286ac 100644
--- a/gpackages/apps/packages/views.py
+++ b/gpackages/apps/packages/views.py
@@ -78,7 +78,18 @@ class EbuildsListView(ContextArchListView):
'package__virtual_package__category'). \
prefetch_related('package__repository')
-class EbuildDetailView(ArchesContexView, DetailView):
+class AtomDetailViewMixin(ArchesContexView, DetailView):
+ parsing_class = EbuildParseCPVR
+
+ def get_parsed(self):
+ parsed, atom = self.kwargs.get('parsed'), self.kwargs.get('atom')
+ if parsed is not None:
+ return parsed
+ else:
+ return self.parsing_class(atom)
+
+class EbuildDetailView(AtomDetailViewMixin):
+ parsing_class = EbuildParseCPVR
template_name = 'ebuild.html'
extra_context = {'page_name': 'Ebuild', 'arches': arches}
context_object_name = 'ebuild'
@@ -87,6 +98,7 @@ class EbuildDetailView(ArchesContexView, DetailView):
'package__virtual_package',
'package__virtual_package__category')
+
def get_object(self, queryset = None):
pk = self.kwargs.get('pk')
if pk is not None:
@@ -94,8 +106,7 @@ class EbuildDetailView(ArchesContexView, DetailView):
if queryset is None:
queryset = self.get_queryset()
- cpvr = self.kwargs.get('cpvr')
- eo = EbuildParseCPVR(cpvr)
+ eo = self.get_parsed()
category, name = eo.category, eo.name
version, revision = eo.version, eo.revision_for_q
repository = eo.repository_for_q
@@ -142,7 +153,8 @@ class PackagesListsView(MultipleFilterListViewMixin, ContextArchListView):
prefetch_related('repository', 'herds',
'maintainers', 'latest_ebuild__homepages')
-class PackageDetailView(ArchesContexView, DetailView):
+class PackageDetailView(AtomDetailViewMixin):
+ parsing_class = PackageParseCPR
template_name = 'package.html'
extra_context = {'page_name': 'Package', 'arches': arches}
context_object_name = 'package'
@@ -158,8 +170,7 @@ class PackageDetailView(ArchesContexView, DetailView):
if queryset is None:
queryset = self.get_queryset()
- cpr = self.kwargs.get('cpr')
- po = PackageParseCPR(cpr)
+ po = self.get_parsed()
if not po.is_valid:
raise Http404
category, name = po.category, po.name
@@ -301,3 +312,13 @@ class PackageSitemap(Sitemap):
def lastmod(self, obj):
return obj.updated_datetime
+
+def auto_package_or_ebuild(request, atom):
+ v_atom = EbuildParseCPVR(atom)
+ if v_atom.is_valid:
+ return EbuildDetailView.as_view()(request, parsed = v_atom)
+ p_atom = PackageParseCPR(atom)
+ if p_atom.is_valid:
+ return PackageDetailView.as_view()(request, parsed = p_atom)
+ else:
+ raise Http404
diff --git a/gpackages/libs/package_info/validators.py b/gpackages/libs/package_info/validators.py
index 8c10326..e8be8e1 100644
--- a/gpackages/libs/package_info/validators.py
+++ b/gpackages/libs/package_info/validators.py
@@ -7,7 +7,7 @@ validate_url = URLValidator()
__all__ = ('validate_email', 'validate_url', 'ValidationError')
REVISION_RE = r'r\d+'
-VERSION_RE = r'[\w.]+'
+VERSION_RE = r'\d[\w\.]*'
NAME_RE = r'[\w+-]+?'
validate_revision = RegexValidator('^%s$' % REVISION_RE)
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
@ 2012-08-02 22:44 Slava Bacherikov
0 siblings, 0 replies; 6+ messages in thread
From: Slava Bacherikov @ 2012-08-02 22:44 UTC (permalink / raw
To: gentoo-commits
commit: 7bdd6a80b21627f3e576e0f1bf6d879aa137e71b
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Thu Aug 2 00:25:58 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Thu Aug 2 00:25:58 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=7bdd6a80
Save special use descr to database
---
gpackages/apps/packages/scan.py | 11 ++++++++---
gpackages/libs/package_info/mixins.py | 19 +++++++++++++++++--
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index d7c2f63..e42b7fc 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -657,6 +657,9 @@ class Scanner(object):
def update_all_globals_uses_descriptions(self):
self.update_globals_uses_descriptions(portage.get_all_use_desc())
+ # special use flags are like globals !!!
+ self.update_globals_uses_descriptions(portage. \
+ get_all_special_use_desc())
def scan_all_uses_description(self):
self.scan_uses_description(portage.get_all_use_local_desc())
@@ -672,7 +675,9 @@ class Scanner(object):
# Cache existent Use Local Descr
use_local_cache = defaultdict(dict)
for use_obj in existent_use_local_descr:
- use_local_cache[use_obj.use_flag.name][use_obj.package.cp] = use_obj
+ f_key = use_obj.use_flag.name.lower()
+ use_local_cache[f_key][use_obj.package.cp] = use_obj
+
package_cache = dict()
for use_flag, packages_dict in use_local_desc.iteritems():
@@ -684,7 +689,7 @@ class Scanner(object):
# Add to cache
cache_uses[use_flag.lower()] = use_flag_object
else:
- use_flag_object = cache_uses[use_flag]
+ use_flag_object = cache_uses[use_flag.lower()]
to_create = []
for package, description in packages_dict.iteritems():
@@ -700,7 +705,7 @@ class Scanner(object):
else:
package_cache[package] = package_object
- if package not in use_local_cache[use_flag]:
+ if package not in use_local_cache[use_flag.lower()]:
to_create.append(
models.UseFlagDescriptionModel(package = package_object,
use_flag = use_flag_object,
diff --git a/gpackages/libs/package_info/mixins.py b/gpackages/libs/package_info/mixins.py
index d699468..f80edd8 100644
--- a/gpackages/libs/package_info/mixins.py
+++ b/gpackages/libs/package_info/mixins.py
@@ -2,7 +2,8 @@ from __future__ import absolute_import
from .generic import ToStrMixin, file_sha1, file_mtime, cached_property, \
file_get_content, iter_over_gen, lofstr_to_ig, toint
-from .generic_metadata.use_info import get_uses_info, get_local_uses_info
+from .generic_metadata.use_info import get_uses_info, get_local_uses_info, \
+ get_use_special_info
# Repo info
from .generic_metadata.repo_info import TreeMetadata
# Herds
@@ -74,6 +75,10 @@ class PortageBaseMixin(ToStrMixin):
for tree in self.iter_trees():
yield tree.use_desc
+ def iter_special_use_desc(self):
+ for tree in self.iter_trees():
+ yield tree.use_special_desc
+
def iter_use_local_desc(self):
for tree in self.iter_trees():
yield tree.use_local_desc
@@ -81,6 +86,10 @@ class PortageBaseMixin(ToStrMixin):
def get_all_use_desc(self):
return _gen_all_use(lambda x,y: x.update(y), self.iter_use_desc())
+ def get_all_special_use_desc(self):
+ return _gen_all_use(lambda x,y: x.update(y),
+ self.iter_special_use_desc())
+
def get_all_use_local_desc(self):
def action(all_dict, use_dict):
for key, value in use_dict.iteritems():
@@ -112,7 +121,7 @@ def _get_info_by_func(func, path1, path2):
path = os.path.join(path1, path2)
try:
return func(path)
- except IOError:
+ except (IOError, OSError):
return None
class PortTreeBaseMixin(ToStrMixin):
@@ -133,6 +142,12 @@ class PortTreeBaseMixin(ToStrMixin):
self.porttree_path,
'profiles/use.local.desc')
+ @cached_property
+ def use_special_desc(self):
+ return _get_info_by_func(get_use_special_info,
+ self.porttree_path,
+ 'profiles/desc/')
+
def __unicode__(self):
return self.name
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
@ 2012-07-12 22:16 Slava Bacherikov
0 siblings, 0 replies; 6+ messages in thread
From: Slava Bacherikov @ 2012-07-12 22:16 UTC (permalink / raw
To: gentoo-commits
commit: 454459bd91a8e8664376e0cacd21ec473cdc4a56
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Jul 11 16:35:54 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Jul 11 16:35:54 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=454459bd
Add cia.vc links for MaintainerModel
---
gpackages/apps/packages/models.py | 11 ++++++++++-
gpackages/libs/package_info/utils.py | 12 ++++++++++++
2 files changed, 22 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index b90049f..c7ee65f 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -1,6 +1,7 @@
from django.db import models
from package_info.abstract import AbstractCategory, AbstarctPackage, \
AbstractEbuild, AbstractNewsItem
+from package_info.utils import ciavc_link, email_parse
import managers
from package_info.generic import get_from_kwargs_and_del
from package_info.generic_metadata.repo_const import REPOS_TYPE
@@ -272,7 +273,15 @@ class MaintainerModel(StatsModel, AbstractDateTimeModel):
def check_or_need_update(self, maintainer):
return not (self.name == maintainer.name and \
self.email == maintainer.email)
-
+
+ @property
+ def ciavc_link(self):
+ return ciavc_link(self.email_name)
+
+ @property
+ def email_name(self):
+ return email_parse(self.email)[0]
+
def __unicode__(self):
return ':'.join((unicode(self.name), self.email))
diff --git a/gpackages/libs/package_info/utils.py b/gpackages/libs/package_info/utils.py
new file mode 100644
index 0000000..934b263
--- /dev/null
+++ b/gpackages/libs/package_info/utils.py
@@ -0,0 +1,12 @@
+ciavc_author_template = 'http://cia.vc/stats/author/%s/'
+def ciavc_link(name):
+ return ciavc_author_template % name
+
+def email_parse(email):
+ e_l = email.split('@')
+ if len(e_l) == 1:
+ return (e_l[0], '')
+ elif len(e_l) > 1:
+ return (e_l[0], e_l[1])
+ else:
+ return ('','')
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
@ 2012-07-05 23:27 Slava Bacherikov
0 siblings, 0 replies; 6+ messages in thread
From: Slava Bacherikov @ 2012-07-05 23:27 UTC (permalink / raw
To: gentoo-commits
commit: 534a5f0fa7c37ce9ab45ac964c63f6e319034a4e
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Thu Jul 5 13:56:06 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Thu Jul 5 13:56:06 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=534a5f0f
Save eapi and slot info to database
---
gpackages/apps/packages/models.py | 7 +++++--
gpackages/libs/package_info/mixins.py | 17 ++++++++++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index c5a51e3..51b839e 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -463,8 +463,9 @@ class EbuildModel(AbstractDateTimeModel):
homepages = models.ManyToManyField(HomepageModel, blank = True)
description = models.TextField(blank = True, null = True)
- #eapi = models.PositiveSmallIntegerField(default = 0)
- #slot = models.PositiveSmallIntegerField(default = 0)
+ eapi = models.PositiveSmallIntegerField(default = 0)
+ slot = models.CharField(max_length = 32, null = True,
+ db_index = True, default = '0')
objects = managers.EbuildManager()
@@ -490,6 +491,8 @@ class EbuildModel(AbstractDateTimeModel):
self.ebuild_mtime = ebuild.mtime
self.ebuild_hash = ebuild.sha1
self.description = ebuild.description
+ self.eapi = ebuild.eapi_as_int
+ self.slot = ebuild.slot_for_q
def check_or_need_update(self, ebuild):
return self.ebuild_hash != ebuild.sha1
diff --git a/gpackages/libs/package_info/mixins.py b/gpackages/libs/package_info/mixins.py
index 0ef9b4d..c18607e 100644
--- a/gpackages/libs/package_info/mixins.py
+++ b/gpackages/libs/package_info/mixins.py
@@ -245,6 +245,20 @@ class EbuildRevMixin(object):
d = toint(d, 0)
return d
+class EbuildEapiMixin(object):
+
+ @cached_property
+ def eapi_as_int(self):
+ return toint(self.eapi, 0)
+
+class EbuildSlotMixin(object):
+
+ @cached_property
+ def slot_for_q(self):
+ if not self.slot:
+ return None
+ return self.slot
+
class EbuildHomepageMixin(object):
@cached_property
@@ -333,7 +347,8 @@ class EbuildUseMixin(object):
return frozenset(self.get_uses())
class EbuildGenericProp(EbuildHomepageMixin, EbuildLicenseMixin, \
- EbuildKeywordsMixin, EbuildUseMixin, EbuildRevMixin):
+ EbuildKeywordsMixin, EbuildUseMixin, EbuildRevMixin,
+ EbuildSlotMixin, EbuildEapiMixin):
pass
class PortageGenericMixin(PortageBaseMixin, PortageHerdsMixin):
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
@ 2012-07-03 21:08 Slava Bacherikov
0 siblings, 0 replies; 6+ messages in thread
From: Slava Bacherikov @ 2012-07-03 21:08 UTC (permalink / raw
To: gentoo-commits
commit: 150755168a0391d6238e194b06f8b88bfd063043
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Tue Jul 3 17:13:11 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Tue Jul 3 17:13:11 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=15075516
Updte validators
---
gpackages/apps/packages/models.py | 6 ++++--
gpackages/libs/package_info/validators.py | 6 +++++-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index a5ad484..966e4db 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -7,7 +7,8 @@ from package_info.repo_info import REPOS_TYPE
# relative
from .keywords import KeywordRepr
#from utils import get_link
-from package_info.validators import validate_url, validate_email
+from package_info.validators import validate_url, validate_email, \
+ validate_name
class AbstractDateTimeModel(models.Model):
@@ -220,7 +221,8 @@ class HerdsModel(AbstractDateTimeModel):
ordering = ('name',)
class VirtualPackageModel(models.Model):
- name = models.CharField(max_length = 254, db_index = True)
+ name = models.CharField(max_length = 254, db_index = True,
+ validators = [validate_name])
category = models.ForeignKey(CategoryModel)
objects = managers.VirtualPackageManager()
diff --git a/gpackages/libs/package_info/validators.py b/gpackages/libs/package_info/validators.py
index 0b1fbc6..fbfed5e 100644
--- a/gpackages/libs/package_info/validators.py
+++ b/gpackages/libs/package_info/validators.py
@@ -1,5 +1,5 @@
# Validators
-from django.core.validators import URLValidator, validate_email
+from django.core.validators import URLValidator, validate_email, RegexValidator
from django.core.exceptions import ValidationError
validate_url = URLValidator()
@@ -9,3 +9,7 @@ __all__ = ('validate_email', 'validate_url', 'ValidationError')
REVISION_RE = r'r\d+'
VERSION_RE = r'[\w.]+'
NAME_RE = r'[\w+-]+'
+
+validate_revision = RegexValidator('^%s$' % REVISION_RE)
+validate_version = RegexValidator('^%s$' % VERSION_RE)
+validate_name = RegexValidator('^%s$' % NAME_RE)
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/
@ 2012-07-02 22:25 Slava Bacherikov
0 siblings, 0 replies; 6+ messages in thread
From: Slava Bacherikov @ 2012-07-02 22:25 UTC (permalink / raw
To: gentoo-commits
commit: 49460154ef4cf94dc960948e8d75df395807bce7
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Jul 2 22:23:38 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Jul 2 22:23:38 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=49460154
Change revision type from CharField to PositiveIntergerField
---
gpackages/apps/packages/managers.py | 2 +-
gpackages/apps/packages/models.py | 10 +++++++---
gpackages/apps/packages/scan.py | 10 +---------
gpackages/libs/package_info/generic.py | 9 ++++++++-
gpackages/libs/package_info/mixins.py | 19 +++++++++++++++++--
5 files changed, 34 insertions(+), 16 deletions(-)
diff --git a/gpackages/apps/packages/managers.py b/gpackages/apps/packages/managers.py
index d3f7b21..ab8e269 100644
--- a/gpackages/apps/packages/managers.py
+++ b/gpackages/apps/packages/managers.py
@@ -123,7 +123,7 @@ class EbuildMixin(object):
else:
kwargs.update({'package': package})
kwargs.update({ 'version': ebuild.version,
- 'revision': ebuild.revision })
+ 'revision': ebuild.revision_as_int })
return super(EbuildMixin, self).get(*args, **kwargs)
def all_by_numbers(self):
diff --git a/gpackages/apps/packages/models.py b/gpackages/apps/packages/models.py
index 624afc0..21d8c0c 100644
--- a/gpackages/apps/packages/models.py
+++ b/gpackages/apps/packages/models.py
@@ -389,7 +389,7 @@ class LicenseGroupModel(models.Model):
class EbuildModel(AbstractDateTimeModel):
package = models.ForeignKey(PackageModel, db_index = True)
version = models.CharField(max_length = 26, db_index = True)
- revision = models.CharField(max_length = 12, db_index = True)
+ revision = models.PositiveIntegerField(db_index = True)
use_flags = models.ManyToManyField(UseFlagModel)
licenses = models.ManyToManyField(LicenseModel)
license = models.CharField(max_length = 254, blank = True )
@@ -423,7 +423,7 @@ class EbuildModel(AbstractDateTimeModel):
def update_by_ebuild(self, ebuild):
self.is_masked = ebuild.is_masked
self.version = ebuild.version
- self.revision = ebuild.revision
+ self.revision = ebuild.revision_as_int
self.license = ebuild.license
self.ebuild_mtime = ebuild.mtime
self.ebuild_hash = ebuild.sha1
@@ -489,8 +489,12 @@ class EbuildModel(AbstractDateTimeModel):
return self.cpvr
@property
+ def revision_str(self):
+ return 'r%d' % self.revision
+
+ @property
def fullversion(self):
- return '%s%s' % (self.version, ('-'+ self.revision if self.revision else ''))
+ return '%s%s' % (self.version, ('-'+ self.revision_str if self.revision else ''))
def get_keywords(self, arch_list):
keywords_dict = self.get_keywords_dict(arch_list)
diff --git a/gpackages/apps/packages/scan.py b/gpackages/apps/packages/scan.py
index 52f9a12..8e4127e 100644
--- a/gpackages/apps/packages/scan.py
+++ b/gpackages/apps/packages/scan.py
@@ -3,7 +3,7 @@ from packages import models
import sys
from django.db import IntegrityError
from collections import defaultdict
-from package_info.generic import StrThatIgnoreCase
+from package_info.generic import StrThatIgnoreCase, toint
from package_info.porttree import porttree
import anydbm
@@ -84,14 +84,6 @@ def _get_items(items_list, Model, field_name, cache_var):
geted_items = geted_items | geted
return items_objects
-
-def toint(val, defval):
- try:
- return int(val)
- except ValueError:
- return defval
-
-
class Scanner(object):
"General class for scan and collect data from portage"
def __init__(self, **kwargs):
diff --git a/gpackages/libs/package_info/generic.py b/gpackages/libs/package_info/generic.py
index cddd46f..895b3a4 100644
--- a/gpackages/libs/package_info/generic.py
+++ b/gpackages/libs/package_info/generic.py
@@ -4,7 +4,8 @@ import types
from datetime import datetime
__all__ = ('StrThatIgnoreCase', 'ToStrMixin', 'file_get_content', 'file_sha1',\
- 'file_mtime', 'cached_property', 'iter_over_gen', 'lofstr_to_ig')
+ 'file_mtime', 'cached_property', 'iter_over_gen', 'lofstr_to_ig', \
+ 'toint')
def iter_over_gen(iterat, name):
for obj in iterat:
@@ -32,6 +33,12 @@ def get_from_kwargs_and_del(list_what, kwargs):
else:
return ret_list
+def toint(val, defval):
+ try:
+ return int(val)
+ except ValueError:
+ return defval
+
class StrThatIgnoreCase(unicode):
__slots__ = ('_forcmp',)
diff --git a/gpackages/libs/package_info/mixins.py b/gpackages/libs/package_info/mixins.py
index c3c5cec..36afb10 100644
--- a/gpackages/libs/package_info/mixins.py
+++ b/gpackages/libs/package_info/mixins.py
@@ -1,6 +1,6 @@
from __future__ import absolute_import
from .generic import ToStrMixin, file_sha1, file_mtime, cached_property, \
- file_get_content, iter_over_gen, lofstr_to_ig
+ file_get_content, iter_over_gen, lofstr_to_ig, toint
from .generic_metadata.use_info import get_uses_info, get_local_uses_info
# Repo info
@@ -22,6 +22,7 @@ from .abstract import AbstractPortage, AbstractPortTree, AbstractCategory, \
AbstarctPackage, AbstractEbuild
import os.path
+import re
def _file_path(file_name):
return lambda self: os.path.join(self.package_path, file_name)
@@ -218,6 +219,20 @@ class EbuildBaseMixin(ToStrMixin):
def __unicode__(self):
return unicode(self.cpv)
+REV_STR_RE = '^r(?P<rev>\d+)$'
+rev_re = re.compile(REV_STR_RE)
+
+class EbuildRevMixin(object):
+
+ @cached_property
+ def revision_as_int(self):
+ d = 0 # Maybe None ?
+ m = rev_re.match(self.revision)
+ if m is not None:
+ d = m.groupdict().get('rev')
+ d = toint(d, 0)
+ return d
+
class EbuildHomepageMixin(object):
@cached_property
@@ -306,7 +321,7 @@ class EbuildUseMixin(object):
return frozenset(self.get_uses())
class EbuildGenericProp(EbuildHomepageMixin, EbuildLicenseMixin, \
- EbuildKeywordsMixin, EbuildUseMixin):
+ EbuildKeywordsMixin, EbuildUseMixin, EbuildRevMixin):
pass
class PortageGenericMixin(PortageBaseMixin, PortageHerdsMixin):
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-08-11 22:31 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-11 22:30 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/libs/package_info/ Slava Bacherikov
-- strict thread matches above, loose matches on Subject: below --
2012-08-02 22:44 Slava Bacherikov
2012-07-12 22:16 Slava Bacherikov
2012-07-05 23:27 Slava Bacherikov
2012-07-03 21:08 Slava Bacherikov
2012-07-02 22:25 Slava Bacherikov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox