0
+from django.db import models
0
+from core.models import Item
0
+from tagging.fields import TagField
0
+class Project(models.Model):
0
+ A project is a wrapper around a code repository, connecting authors and
0
+ other descriptive information to it.
0
+ name = models.CharField(max_length=100)
0
+ description = models.TextField(help_text='A short description of the project.')
0
+ repository = models.ForeignKey('CodeRepository', related_name='repository')
0
+ maintainers = models.ManyToManyField('Maintainer', related_name='maintainer')
0
+ slug = models.SlugField(unique=True)
0
+ url = models.URLField(verify_exists=True, help_text='The URL to the project, usually hosted at Google Code.')
0
+ def __unicode__(self):
0
+ def get_absolute_url(self):
0
+ return ('project-detail', (), {
0
+class Maintainer(models.Model):
0
+ A maintainer is a person with commmit rights to a given code repository.
0
+ All this model contains is simple metadata, if available.
0
+ first_name = models.CharField(max_length=200)
0
+ middle_name = models.CharField(max_length=200, blank=True)
0
+ last_name = models.CharField(max_length=200)
0
+ suffix = models.CharField(max_length=100, blank=True)
0
+ bio = models.TextField(blank=True)
0
+ slug = models.SlugField(unique=True)
0
+ personal_url = models.URLField(blank=True, verify_exists=True)
0
+ professional_url = models.URLField(blank=True, verify_exists=True)
0
+ ordering = ('last_name', 'first_name')
0
+ def __unicode__(self):
0
+ def get_absolute_url(self):
0
+ return ('maintainer-detail', (), {
0
+ if self.first_name or self.last_name:
0
+ return ' '.join(b for b in (self.first_name, self.last_name) if b)
0
+ return ' '.join(b for b in (self.first_name, self.middle_name, self.last_name, self.suffix) if b)
0
+ def get_projects(self):
0
+ Returns a string of projects for use in the admin list display.
0
+ maintainers = Project.objects.filter(maintainers=self)
0
+ for maintainer in maintainers:
0
+ projects.append(str(project.name))
0
+ return ', '.join(projects)
0
+class CodeRepository(models.Model):
0
+ A code repository that you check code into somewhere. Currently only SVN
0
+ is supported, but other forms should be hard to support.
0
+ ('svn', 'Subversion'),
0
+ type = models.CharField(max_length=3, choices=SCM_CHOICES, default='svn')
0
+ name = models.CharField(max_length=100)
0
+ slug = models.SlugField(unique=True)
0
+ username = models.CharField(max_length=100, help_text='The maintainer\'s username for this SCR.')
0
+ public_changeset_template = models.URLField(verify_exists=False, blank=True, help_text='Template for viewing a changeset publically. Use \'%s\' for the revision number')
0
+ url = models.URLField(verify_exists=True)
0
+ verbose_name_plural = 'code repositories'
0
+ def __unicode__(self):
0
+ def get_absolute_url(self):
0
+ return ('repository-detail', (), {
0
+ commits = CodeCommit.objects.filter('-committed')[:0]
0
+ last_commit = commits.committed
0
+class CodeCommit(models.Model):
0
+ A code change that's been checked in.
0
+ repository = models.ForeignKey(CodeRepository, related_name='commits')
0
+ revision = models.PositiveSmallIntegerField()
0
+ message = models.TextField()
0
+ committed = models.DateTimeField()
0
+ ordering = ['-revision']
0
+ def __unicode__(self):
0
+ return "[%s] %s" % (self.revision, text.truncate_words(self.message, 10))
0
+ if self.repository.public_changeset_template:
0
+ return self.repository.public_changeset_template % self.revision
0
+from projects import register
0
+# Register item objects to be "followed"
0
+Item.objects.follow_model(CodeCommit)
0
\ No newline at end of file
Comments
No one has commented yet.