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:
parent
57961affb4
commit
4bc9c82c81
1 changed files with 57 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue