##// END OF EJS Templates
Added simple versioning for changeset status
marcink -
r2287:8447d35b codereview
parent child Browse files
Show More
@@ -49,7 +49,9 b' class ChangesetStatusModel(BaseModel):'
49
49
50 def get_status(self, repo, revision):
50 def get_status(self, repo, revision):
51 """
51 """
52 Returns status of changeset for given revision
52 Returns status of changeset for given revision and version 0
53 versioning makes a history of statuses, and version == 0 is always the
54 current one
53
55
54 :param repo:
56 :param repo:
55 :type repo:
57 :type repo:
@@ -60,14 +62,16 b' class ChangesetStatusModel(BaseModel):'
60
62
61 status = ChangesetStatus.query()\
63 status = ChangesetStatus.query()\
62 .filter(ChangesetStatus.repo == repo)\
64 .filter(ChangesetStatus.repo == repo)\
63 .filter(ChangesetStatus.revision == revision).scalar()
65 .filter(ChangesetStatus.revision == revision)\
66 .filter(ChangesetStatus.version == 0).scalar()
64 status = status.status if status else status
67 status = status.status if status else status
65 st = status or ChangesetStatus.DEFAULT
68 st = status or ChangesetStatus.DEFAULT
66 return str(st)
69 return str(st)
67
70
68 def set_status(self, repo, revision, status, user, comment):
71 def set_status(self, repo, revision, status, user, comment):
69 """
72 """
70 Creates new status for changeset or updates the old one
73 Creates new status for changeset or updates the old ones bumping their
74 version, leaving the current status at
71
75
72 :param repo:
76 :param repo:
73 :type repo:
77 :type repo:
@@ -82,11 +86,15 b' class ChangesetStatusModel(BaseModel):'
82 """
86 """
83 repo = self.__get_repo(repo)
87 repo = self.__get_repo(repo)
84
88
85 cur_status = ChangesetStatus.query()\
89 cur_statuses = ChangesetStatus.query()\
86 .filter(ChangesetStatus.repo == repo)\
90 .filter(ChangesetStatus.repo == repo)\
87 .filter(ChangesetStatus.revision == revision)\
91 .filter(ChangesetStatus.revision == revision)\
88 .scalar()
92 .all()
89 new_status = cur_status or ChangesetStatus()
93 if cur_statuses:
94 for st in cur_statuses:
95 st.version += 1
96 self.sa.add(st)
97 new_status = ChangesetStatus()
90 new_status.author = self.__get_user(user)
98 new_status.author = self.__get_user(user)
91 new_status.repo = self.__get_repo(repo)
99 new_status.repo = self.__get_repo(repo)
92 new_status.status = status
100 new_status.status = status
@@ -686,7 +686,8 b' class Repository(Base, BaseModel):'
686 """
686 """
687
687
688 statuses = ChangesetStatus.query()\
688 statuses = ChangesetStatus.query()\
689 .filter(ChangesetStatus.repo == self)
689 .filter(ChangesetStatus.repo == self)\
690 .filter(ChangesetStatus.version == 0)
690 if revisions:
691 if revisions:
691 statuses = statuses.filter(ChangesetStatus.revision.in_(revisions))
692 statuses = statuses.filter(ChangesetStatus.revision.in_(revisions))
692 grouped = {}
693 grouped = {}
@@ -1230,7 +1231,7 b' class ChangesetComment(Base, BaseModel):'
1230 class ChangesetStatus(Base, BaseModel):
1231 class ChangesetStatus(Base, BaseModel):
1231 __tablename__ = 'changeset_statuses'
1232 __tablename__ = 'changeset_statuses'
1232 __table_args__ = (
1233 __table_args__ = (
1233 UniqueConstraint('repo_id', 'revision'),
1234 UniqueConstraint('repo_id', 'revision', 'version'),
1234 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1235 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1235 'mysql_charset': 'utf8'}
1236 'mysql_charset': 'utf8'}
1236 )
1237 )
@@ -1250,7 +1251,7 b' class ChangesetStatus(Base, BaseModel):'
1250 status = Column('status', String(128), nullable=False, default=DEFAULT)
1251 status = Column('status', String(128), nullable=False, default=DEFAULT)
1251 changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id'))
1252 changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id'))
1252 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
1253 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
1253
1254 version = Column('version', Integer(), nullable=False, default=0)
1254 author = relationship('User', lazy='joined')
1255 author = relationship('User', lazy='joined')
1255 repo = relationship('Repository')
1256 repo = relationship('Repository')
1256 comment = relationship('ChangesetComment', lazy='joined')
1257 comment = relationship('ChangesetComment', lazy='joined')
@@ -1260,19 +1261,6 b' class ChangesetStatus(Base, BaseModel):'
1260 return dict(self.STATUSES).get(self.status)
1261 return dict(self.STATUSES).get(self.status)
1261
1262
1262
1263
1263 class ChangesetStatusHistory(Base, BaseModel):
1264 __tablename__ = 'changeset_statuses_history'
1265 __table_args__ = (
1266 {'extend_existing': True, 'mysql_engine': 'InnoDB',
1267 'mysql_charset': 'utf8'}
1268 )
1269 #TODO: check if sqla has a nice history table implementation
1270 changeset_status_id = Column('changeset_status_id', Integer(), ForeignKey('changeset_statuses.changeset_status_id'), nullable=False, primary_key=True)
1271 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None)
1272 status = Column('status', String(128), nullable=False)
1273 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now)
1274
1275
1276 class Notification(Base, BaseModel):
1264 class Notification(Base, BaseModel):
1277 __tablename__ = 'notifications'
1265 __tablename__ = 'notifications'
1278 __table_args__ = (
1266 __table_args__ = (
General Comments 0
You need to be logged in to leave comments. Login now