|
a/Allura/allura/model/repo.py |
|
b/Allura/allura/model/repo.py |
|
... |
|
... |
5 |
from itertools import izip, chain
|
5 |
from itertools import izip, chain
|
6 |
from datetime import datetime
|
6 |
from datetime import datetime
|
7 |
from collections import defaultdict
|
7 |
from collections import defaultdict
|
8 |
|
8 |
|
9 |
from pylons import g
|
9 |
from pylons import g
|
|
|
10 |
import pymongo.errors
|
10 |
|
11 |
|
11 |
from ming import Field, Index, collection
|
12 |
from ming import Field, Index, collection
|
12 |
from ming import schema as S
|
13 |
from ming import schema as S
|
13 |
from ming.base import Object
|
14 |
from ming.base import Object
|
14 |
from ming.utils import LazyProperty
|
15 |
from ming.utils import LazyProperty
|
15 |
from ming.orm import mapper
|
16 |
from ming.orm import mapper, session
|
16 |
|
17 |
|
17 |
from allura.lib import utils
|
18 |
from allura.lib import utils
|
18 |
from allura.lib import helpers as h
|
19 |
from allura.lib import helpers as h
|
19 |
|
20 |
|
20 |
from .auth import User
|
21 |
from .auth import User
|
|
... |
|
... |
115 |
|
116 |
|
116 |
@property
|
117 |
@property
|
117 |
def object_id(self):
|
118 |
def object_id(self):
|
118 |
return self._id
|
119 |
return self._id
|
119 |
|
120 |
|
|
|
121 |
@classmethod
|
|
|
122 |
def upsert(cls, id):
|
|
|
123 |
isnew = False
|
|
|
124 |
r = cls.query.get(_id=id)
|
|
|
125 |
if r is not None: return r, isnew
|
|
|
126 |
try:
|
|
|
127 |
r = cls(_id=id)
|
|
|
128 |
session(r).flush(r)
|
|
|
129 |
isnew = True
|
|
|
130 |
except pymongo.errors.DuplicateKeyError: # pragma no cover
|
|
|
131 |
session(r).expunge(r)
|
|
|
132 |
r = cls.query.get(_id=id)
|
|
|
133 |
return r, isnew
|
|
|
134 |
|
120 |
class Commit(RepoObject):
|
135 |
class Commit(RepoObject):
|
121 |
# Ephemeral attrs
|
136 |
# Ephemeral attrs
|
122 |
repo=None
|
137 |
repo=None
|
123 |
|
138 |
|
124 |
def set_context(self, repo):
|
139 |
def set_context(self, repo):
|
|
... |
|
... |
135 |
if u: return u.url()
|
150 |
if u: return u.url()
|
136 |
|
151 |
|
137 |
@LazyProperty
|
152 |
@LazyProperty
|
138 |
def tree(self):
|
153 |
def tree(self):
|
139 |
if self.tree_id is None:
|
154 |
if self.tree_id is None:
|
140 |
self.tree_id = self.repo.compute_tree(self)
|
155 |
self.tree_id = self.repo.compute_tree_new(self)
|
141 |
if self.tree_id is None:
|
156 |
if self.tree_id is None:
|
142 |
return None
|
157 |
return None
|
143 |
t = Tree.query.get(_id=self.tree_id)
|
158 |
t = Tree.query.get(_id=self.tree_id)
|
144 |
if t is None:
|
159 |
if t is None:
|
145 |
self.tree_id = self.repo.compute_tree(self)
|
160 |
self.tree_id = self.repo.compute_tree_new(self)
|
146 |
t = Tree.query.get(_id=self.tree_id)
|
161 |
t = Tree.query.get(_id=self.tree_id)
|
147 |
if t is not None: t.set_context(self)
|
162 |
if t is not None: t.set_context(self)
|
148 |
return t
|
163 |
return t
|
149 |
|
164 |
|
150 |
@LazyProperty
|
165 |
@LazyProperty
|