aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--grumpy/models.py27
-rw-r--r--grumpy/testsuite/pkgmodel.py25
2 files changed, 46 insertions, 6 deletions
diff --git a/grumpy/models.py b/grumpy/models.py
index 6fc2d49..1c582e4 100644
--- a/grumpy/models.py
+++ b/grumpy/models.py
@@ -134,6 +134,9 @@ class Herd(db.Model):
def __init__(self, name):
self.name = name
+ def __repr__(self):
+ return '<%s> - %s' % (self.__class__.__name__, self.name)
+
class Package(db.Model):
"""Represents packages in the system"""
@@ -166,12 +169,32 @@ class Package(db.Model):
self.mtime = datetime.fromtimestamp(mtime)
# shared pkg data (from metadata.xml)
self.ldesc = ebuild_src.longdescription
- self.devs = [] # TODO
- self.herds = [] # TODO
+ self.devs = []
+ self.herds = self._parse_herds(ebuild_src)
def __repr__(self):
return '<%s> - %s' % (self.__class__.__name__, self.key)
+ def _parse_herds(self, ebuild_src):
+ """Update package herds."""
+ herds = []
+ for herd in ebuild_src.herds:
+ if not herd or herd.strip() is None:
+ herd = 'fix-me'
+ herds.append(herd.strip())
+ herds = set(herds)
+ if not herds:
+ return []
+ # Sync herds with database
+ out = []
+ for herd in Herd.query.filter(Herd.name.in_(herds)).all():
+ if herd.name in herds:
+ out.append(herd)
+ herds.remove(herd.name)
+ for herd in herds:
+ out.append(Herd(herd))
+ return out
+
def sync(self, ebuild_src, mtime=time.time()):
"""Update package values from ebuild_src."""
self.__init__(ebuild_src, mtime)
diff --git a/grumpy/testsuite/pkgmodel.py b/grumpy/testsuite/pkgmodel.py
index 740d67a..9492423 100644
--- a/grumpy/testsuite/pkgmodel.py
+++ b/grumpy/testsuite/pkgmodel.py
@@ -10,7 +10,7 @@
"""
from . import GrumpyTestCase
-from grumpy.models import Category, Ebuild, Package
+from grumpy.models import Category, Ebuild, Herd, Package
import copy, time, unittest
@@ -26,7 +26,8 @@ class PkgModelTestCase(GrumpyTestCase):
'HOMEPAGE': 'http://example.org/testpkg-app-misc', \
'KEYWORDS':'x86 amd64', \
'IUSE':'test +positive flags -negative split-flag'}
- sdata = {'longdescription': 'this is longdescription'}
+ sdata = {'longdescription': 'this is longdescription', \
+ 'herds': (None, '', 'kala', 'test')}
p1 = self.get_pkg('%s/testpkg-1.0-r3' % C1, sdata, copy.copy(data))
data['KEYWORDS'] = 'x86 ~amd64'
p2 = self.get_pkg('%s/testpkg-1.0-r4' % C1, sdata, copy.copy(data))
@@ -49,7 +50,7 @@ class PkgModelTestCase(GrumpyTestCase):
## Create and test packages
c[0].packages[p1.key] = Package(p1)
- c[0].packages[p2.key] = Package(p2)
+ self.db.session.commit()
c[1].packages[p3.key] = Package(p3)
self.db.session.commit()
assert Package.query.count() == 2
@@ -62,7 +63,8 @@ class PkgModelTestCase(GrumpyTestCase):
assert p.homepage == 'http://example.org/testpkg-app-misc'
assert p.category.name == C1
assert len(p.category.packages) == 1
- # TODO: herds, maintainers
+ assert len(p.herds) == 3
+ # TODO: maintainers
p = Package.query.filter_by(key='%s/testpkg' % C2).first()
assert p.pkg == 'testpkg'
@@ -71,6 +73,18 @@ class PkgModelTestCase(GrumpyTestCase):
assert p.homepage == 'http://example.org/testpkg-app-test'
assert p.category.name == C2
assert len(p.category.packages) == 1
+ assert len(p.herds) == 3
+
+ # Test changes in herds
+ sdata['herds'] = ()
+ px = self.get_pkg('%s/testpkg-1.0-r3' % C1, sdata, copy.copy(data))
+ c[0].packages[px.key].sync(px)
+
+ self.db.session.commit()
+ p = Package.query.filter_by(key='%s/testpkg' % C1).first()
+ assert p.pkg == 'testpkg'
+ assert p.category.name == C1
+ assert len(p.herds) == 0
# Test Category -> package lookup
for p in (p1, p2, p3):
@@ -133,6 +147,9 @@ class PkgModelTestCase(GrumpyTestCase):
assert Package.query.count() == 0
assert Ebuild.query.count() == 0
+ # Herds should be still in db
+ assert Herd.query.count() == 3
+
def suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(PkgModelTestCase))