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) |
|
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 |
. |
|
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