Switch to unified view

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