From fe832ea845f07a79b4580f7bca1dcf44b2f215ee Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 27 Mar 2010 16:15:20 -0500 Subject: Move package maintainer off of package model This is an attempt to fix our long-standing problems dealing with maintainer information. Move the actual maintainer information off of the package model into a PackageRelation object, which has some flexibility to later represent more than just maintainership. This solves multiple problems: * If a package gets accidentally deleted, so did the maintainer info * Testing packages have always shown up as orphans * With split packages, it was easy to miss some of the sub-packages This commit does not include the deletion of the original maintainer column; that will come at a later time when I feel more confident that the data was migrated correctly. Signed-off-by: Dan McGee --- main/admin.py | 4 ++-- main/models.py | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'main') diff --git a/main/admin.py b/main/admin.py index 3ab6d5d..d4a7806 100644 --- a/main/admin.py +++ b/main/admin.py @@ -74,8 +74,8 @@ class RepoAdmin(admin.ModelAdmin): search_fields = ('name',) class PackageAdmin(admin.ModelAdmin): - list_display = ('pkgname', 'repo', 'arch', 'maintainer') - list_filter = ('repo', 'arch', 'maintainer') + list_display = ('pkgname', 'repo', 'arch', 'last_update') + list_filter = ('repo', 'arch') ordering = ['pkgname'] search_fields = ('pkgname',) diff --git a/main/models.py b/main/models.py index 0954f79..b49acd2 100644 --- a/main/models.py +++ b/main/models.py @@ -1,7 +1,9 @@ from django.db import models from django.db.models import Q from django.contrib.auth.models import User + from main.middleware import get_user +from packages.models import PackageRelation ########################### ### User Profile Class #### @@ -202,6 +204,18 @@ class Package(models.Model): return '/packages/%s/%s/%s/' % (self.repo.name.lower(), self.arch.name, self.pkgname) + @property + def pkgbase_safe(self): + if self.pkgbase: + return self.pkgbase + return self.pkgname + + @property + def maintainers(self): + return User.objects.filter( + package_relations__pkgbase=self.pkgbase_safe, + package_relations__type=PackageRelation.MAINTAINER) + @property def signoffs(self): if 'signoffs_cache' in dir(self): @@ -265,16 +279,12 @@ class Package(models.Model): def get_svn_link(self, svnpath): linkbase = "http://repos.archlinux.org/wsvn/%s/%s/%s/" - if self.pkgbase: - dirname = self.pkgbase - else: - dirname = self.pkgname repo = self.repo.name.lower() if repo.startswith('community'): root = 'community' else: root = 'packages' - return linkbase % (root, dirname, svnpath) + return linkbase % (root, self.pkgbase_safe, svnpath) def get_arch_svn_link(self): repo = self.repo.name.lower() @@ -362,4 +372,3 @@ class ExternalProject(models.Model): return self.name # vim: set ts=4 sw=4 et: - -- cgit v1.2.3-24-g4f1b