mirror of
https://github.com/correl/codereview.git
synced 2025-04-06 01:03:41 -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 django.db import models
|
||||||
|
from codereview.browser import vcs
|
||||||
|
|
||||||
class Repository(models.Model):
|
class Repository(models.Model):
|
||||||
name = models.CharField(max_length=200, unique=True)
|
name = models.CharField(max_length=200, unique=True)
|
||||||
|
@ -10,5 +11,61 @@ class Repository(models.Model):
|
||||||
("browse", "Browse repositories"),
|
("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):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
Loading…
Add table
Reference in a new issue