summaryrefslogtreecommitdiffstats
path: root/packages/models.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-07-06 18:20:42 +0200
committerDan McGee <dan@archlinux.org>2011-07-06 18:27:33 +0200
commitba975112cbc36f7515293543baaacfbcb46a96c2 (patch)
treec705a13d953e137fe5bf6ffb13b83dad064e7de5 /packages/models.py
parent0f9a1da2cb9dd2a20a5e12bb346ec460b4335f9f (diff)
downloadarchweb-ba975112cbc36f7515293543baaacfbcb46a96c2.tar.gz
archweb-ba975112cbc36f7515293543baaacfbcb46a96c2.tar.xz
Add new packages signoff model
This one is centered around pkgbase, much as our PackageRelation object is. However, it also tracks all of the versioning fields we have in order to making joining against the current package testing list possible. Finally, additional metadata including a created date, an (optional) revoke date, and a comments field are added. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'packages/models.py')
-rw-r--r--packages/models.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/packages/models.py b/packages/models.py
index faf5f39..55725e8 100644
--- a/packages/models.py
+++ b/packages/models.py
@@ -32,12 +32,47 @@ class PackageRelation(models.Model):
return sorted(set([p.repo for p in packages]))
def __unicode__(self):
- return "%s: %s (%s)" % (
+ return u'%s: %s (%s)' % (
self.pkgbase, self.user, self.get_type_display())
class Meta:
unique_together = (('pkgbase', 'user', 'type'),)
+class Signoff(models.Model):
+ '''
+ A signoff for a package (by pkgbase) at a given point in time. These are
+ not keyed directly to a Package object so they don't ever get deleted when
+ Packages come and go from testing repositories.
+ '''
+ pkgbase = models.CharField(max_length=255, db_index=True)
+ pkgver = models.CharField(max_length=255)
+ pkgrel = models.CharField(max_length=255)
+ epoch = models.PositiveIntegerField(default=0)
+ arch = models.ForeignKey('main.Arch')
+ repo = models.ForeignKey('main.Repo')
+ user = models.ForeignKey(User, related_name="package_signoffs")
+ created = models.DateTimeField(editable=False)
+ revoked = models.DateTimeField(null=True)
+ comments = models.TextField(null=True, blank=True)
+
+ @property
+ def packages(self):
+ # TODO: delayed import to avoid circular reference
+ from main.models import Package
+ return Package.objects.normal().filter(pkgbase=self.pkgbase,
+ pkgver=self.pkgver, pkgrel=self.pkgrel, epoch=pkg.epoch,
+ arch=self.arch, repo=self.repo)
+
+ @property
+ def full_version(self):
+ if self.epoch > 0:
+ return u'%d:%s-%s' % (self.epoch, self.pkgver, self.pkgrel)
+ return u'%s-%s' % (self.pkgver, self.pkgrel)
+
+ def __unicode__(self):
+ return u'%s-%s: %s' % (
+ self.pkgbase, self.full_version, self.user)
+
class PackageGroup(models.Model):
'''
Represents a group a package is in. There is no actual group entity,
@@ -115,5 +150,7 @@ post_save.connect(remove_inactive_maintainers, sender=User,
dispatch_uid="packages.models")
pre_save.connect(set_created_field, sender=PackageRelation,
dispatch_uid="packages.models")
+pre_save.connect(set_created_field, sender=Signoff,
+ dispatch_uid="packages.models")
# vim: set ts=4 sw=4 et: