summaryrefslogtreecommitdiffstats
path: root/bn_django/git_browse/models.py
blob: 765fe02ee3817de4f5c8abb0bfb1b06aa5b57c9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from django.db import models
from django.conf import settings

try:
    GITBROWSE_BASE = settings.GITBROWSE_BASE
except AttributeError:
    GITBROWSE_BASE='/home'

try:
    ADMIN_URL = settings.ADMIN_URL
except AttributeError:
    ADMIN_URL='/admin'
if ADMIN_URL[-1] == '/':
    ADMIN_URL=ADMIN_URL[:-1]


# Create your models here.
class Repository(models.Model):
    path = models.FilePathField("relative path to repository", path=GITBROWSE_BASE,recursive=True,match="^.*\.git$",unique=True,blank=False)
    #path = models.FilePathField("relative path to repository", path='/home/bnewbold/code/',recursive=True,match=".*\.git$",unique=True,blank=False)
    name = models.CharField(_("name"), maxlength=80)
    slug = models.SlugField(prepopulate_from=("path",),unique=True)
    git_version = models.CharField(_("git version"), maxlength=100,default="git version 1.4.4", blank=True, help_text="Output of \'git --version\'")

    description = models.TextField("description of repo",blank=True)

    class Admin: 
        ordering = ['slug']

    def __str__(self):
        return self.name
    def get_absolute_url(self):
        return "/code/%s/" % self.slug
    def get_admin_url(self):
        return "%s/code/repository/%s/" % (ADMIN_URL, self.slug)

class Tree(models.Model):
    repo = models.ForeignKey(Repository)
    mode = models.CharField("file mode/permissions", blank=False,maxlength=4)
    path = models.CharField("relative path from repo base", maxlength=512)
    id = models.CharField("hash", maxlength=40,blank=False,primary_key=True)
    name = models.CharField("name of dir", maxlength=128,blank=False)
    type = 'tree'

    class Admin: 
        ordering = ['repo','path']

    def __str__(self):
        return self.name
    def get_absolute_url(self):
        return "/code/%s/%s" % (self.repo.slug, self.hash)
    def get_admin_url(self):
        return "%s/code/tree/%s/" % (ADMIN_URL, self.id)

def tree_from_str(s):
    s = s.split();
    if len(s) != 4: return 
    return Tree(mode=s[0],id=s[2],name=s[3])

class Blob(models.Model):
    repo = models.ForeignKey(Repository)
    mode = models.CharField("file mode/permissions", blank=False,maxlength=4)
    path = models.CharField("relative path from repo base", maxlength=512)
    id = models.CharField("hash", maxlength=40,blank=False,primary_key=True)
    name = models.CharField("name of dir", maxlength=128,blank=False)
    type='blob'

    class Admin: 
        ordering = ['repo','path']

    def __str__(self):
        return self.name
    def get_absolute_url(self):
        return "/code/%s/%s" % (self.repo.slug, self.hash)
    def get_admin_url(self):
        return "%s/code/tree/%s/" % (ADMIN_URL, self.id)

def blob_from_str(s):
    s = s.split();
    if len(s) != 4: return
    return Blob(mode=s[0],id=s[2],name=s[3])