1
0
Fork 0
mirror of https://github.com/correl/codereview.git synced 2025-04-01 09:05:54 -09:00

Added models for storing commit info and an update method for loading it

This commit is contained in:
Correl Roush 2010-12-22 16:41:21 -05:00
parent 57961affb4
commit 4bc9c82c81

View file

@ -1,4 +1,5 @@
from django.db import models
from codereview.browser import vcs
class Repository(models.Model):
name = models.CharField(max_length=200, unique=True)
@ -10,5 +11,61 @@ class Repository(models.Model):
("browse", "Browse repositories"),
)
def update(self):
repo = vcs.create(self.type, self.path)
branches = repo.branches()
for branch, commit in branches.iteritems():
try:
head = Head.objects.get(repository=self, name=branch)
except:
head = Head(repository=self, name=branch)
try:
c = Commit.objects.get(repository=self, ref=commit.id)
except:
c = Commit(repository=self, ref=commit.id)
c.load(repo)
head.commit = c
head.save()
def __unicode__(self):
return self.name
class Commit(models.Model):
ref = models.CharField(max_length=40)
repository = models.ForeignKey(Repository)
message = models.TextField()
author = models.CharField(max_length=255)
author_email = models.CharField(max_length=255)
committer = models.CharField(max_length=255)
committer_email = models.CharField(max_length=255)
authored_date = models.DateTimeField()
committed_date = models.DateTimeField()
parents = models.ManyToManyField('self')
def load(self, repo):
commit = repo.commit(self.ref)
self.message = commit.message
self.author = commit.author
self.author_email = commit.author_email
self.committer = commit.committer
self.committer_email = commit.committer_email
self.authored_date = commit.authored_date
self.committed_date = commit.committed_date
self.save()
for parent in commit.parents:
try:
p = Commit.objects.get(ref=parent, repository=self.repository)
except:
p = Commit(ref=parent, repository=self.repository)
p.load(repo)
self.parents.add(p)
self.save()
def __unicode__(self):
return self.ref
class Head(models.Model):
repository = models.ForeignKey(Repository)
commit = models.ForeignKey(Commit)
name = models.CharField(max_length=255)
def __unicode__(self):
return self.name