##// END OF EJS Templates
code-review initial
marcink -
r2215:2c2bdaec codereview
parent child Browse files
Show More
@@ -84,7 +84,7 b' class ChangelogController(BaseRepoContro'
84 84 collection = list(c.pagination)
85 85 page_revisions = [x.raw_id for x in collection]
86 86 c.comments = c.rhodecode_db_repo.comments(page_revisions)
87
87 c.statuses = c.rhodecode_db_repo.statuses(page_revisions)
88 88 except (RepositoryError, ChangesetDoesNotExistError, Exception), e:
89 89 log.error(traceback.format_exc())
90 90 h.flash(str(e), category='warning')
@@ -203,10 +203,16 b' class ChangesetController(BaseRepoContro'
203 203 c.cut_off = False # defines if cut off limit is reached
204 204
205 205 c.comments = []
206 c.statuses = []
206 207 c.inline_comments = []
207 208 c.inline_cnt = 0
208 209 # Iterate over ranges (default changeset view is always one changeset)
209 210 for changeset in c.cs_ranges:
211
212 c.statuses.extend(ChangesetStatusModel()\
213 .get_status(c.rhodecode_db_repo.repo_id,
214 changeset.raw_id))
215
210 216 c.comments.extend(ChangesetCommentsModel()\
211 217 .get_comments(c.rhodecode_db_repo.repo_id,
212 218 changeset.raw_id))
@@ -1,5 +1,7 b''
1 1 from __future__ import with_statement
2 2
3 import gc
4 import objgraph
3 5 import cProfile
4 6 import pstats
5 7 import cgi
@@ -26,7 +28,7 b' class ProfilingMiddleware(object):'
26 28 profiler.snapshot_stats()
27 29
28 30 stats = pstats.Stats(profiler)
29 stats.sort_stats('cumulative')
31 stats.sort_stats('calls') #cummulative
30 32
31 33 # Redirect output
32 34 out = StringIO()
@@ -44,6 +46,11 b' class ProfilingMiddleware(object):'
44 46 'border-top: 4px dashed red; padding: 1em;">')
45 47 resp += cgi.escape(out.getvalue(), True)
46 48
49 ct = objgraph.show_most_common_types()
50 print ct
51
52 resp += ct if ct else '---'
53
47 54 output = StringIO()
48 55 pprint.pprint(environ, output, depth=3)
49 56
@@ -34,6 +34,8 b' from sqlalchemy.ext.hybrid import hybrid'
34 34 from sqlalchemy.orm import relationship, joinedload, class_mapper, validates
35 35 from beaker.cache import cache_region, region_invalidate
36 36
37 _ = lambda s: s
38
37 39 from rhodecode.lib.vcs import get_backend
38 40 from rhodecode.lib.vcs.utils.helpers import get_scm
39 41 from rhodecode.lib.vcs.exceptions import VCSError
@@ -675,6 +677,23 b' class Repository(Base, BaseModel):'
675 677 grouped[cmt.revision].append(cmt)
676 678 return grouped
677 679
680 def statuses(self, revisions=None):
681 """
682 Returns statuses for this repository
683 :param revisions: list of revisions to get statuses for
684 :type revisions: list
685 """
686
687 statuses = ChangesetStatus.query()\
688 .filter(ChangesetStatus.repo == self)
689 if revisions:
690 statuses = statuses.filter(ChangesetStatus.revision.in_(revisions))
691 grouped = defaultdict(list)
692 for stat in statuses.all():
693 grouped[statuses.revision].append(stat)
694 return grouped
695
696
678 697 #==========================================================================
679 698 # SCM CACHE INSTANCE
680 699 #==========================================================================
@@ -1207,6 +1226,44 b' class ChangesetComment(Base, BaseModel):'
1207 1226 .join(ChangesetComment.author).all()
1208 1227
1209 1228
1229 class ChangesetStatus(Base, BaseModel):
1230 __tablename__ = 'changeset_statuses'
1231 __table_args__ = (
1232 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1233 'mysql_charset': 'utf8'}
1234 )
1235
1236 STATUSES = [
1237 ('not_reviewed', _("Not Reviewed")), # (no icon) and default
1238 ('approved', _("Approved")),
1239 ('rejected', _("Rejected")),
1240 ('under_review', _("Under Review")),
1241 ]
1242
1243 changeset_status_id = Column('changeset_status_id', Integer(), nullable=False, primary_key=True)
1244 repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False)
1245 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None)
1246 revision = Column('revision', String(40), nullable=False)
1247 status = Column('status', String(128), nullable=False, default=STATUSES[0][0])
1248 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
1249
1250 author = relationship('User', lazy='joined')
1251 repo = relationship('Repository')
1252
1253
1254 class ChangesetStatusHistory(Base, BaseModel):
1255 __tablename__ = 'changeset_statuses_history'
1256 __table_args__ = (
1257 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1258 'mysql_charset': 'utf8'}
1259 )
1260 #TODO: check if sqla has a nice history table implementation
1261 changeset_status_id = Column('changeset_status_id', Integer(), ForeignKey('changeset_statuses.changeset_status_id'), nullable=False, primary_key=True)
1262 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None)
1263 status = Column('status', String(128), nullable=False)
1264 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
1265
1266
1210 1267 class Notification(Base, BaseModel):
1211 1268 __tablename__ = 'notifications'
1212 1269 __table_args__ = (
@@ -65,6 +65,7 b''
65 65 <div class="right">
66 66 <div id="${cs.raw_id}_changes_info" class="changes">
67 67 <div id="${cs.raw_id}" style="float:right;" class="changed_total tooltip" title="${_('Affected number of files, click to show more details')}">${len(cs.affected_files)}</div>
68 <div class="changeset-status-container">${c.statuses.get(cs.raw_id)}</div>
68 69 <div class="comments-container">
69 70 %if len(c.comments.get(cs.raw_id,[])) > 0:
70 71 <div class="comments-cnt" title="${('comments')}">
@@ -1,3 +1,5 b''
1 ## small box that displays changed/added/removed details fetched by AJAX
2
1 3 % if len(c.cs.affected_files) <= c.affected_files_cut_off:
2 4 <span class="removed tooltip" title="<b>${_('removed')}</b>${h.changed_tooltip(c.cs.removed)}">${len(c.cs.removed)}</span>
3 5 <span class="changed tooltip" title="<b>${_('changed')}</b>${h.changed_tooltip(c.cs.changed)}">${len(c.cs.changed)}</span>
General Comments 0
You need to be logged in to leave comments. Login now