Mercurial > kallithea
changeset 2287:8447d35b674e codereview
Added simple versioning for changeset status
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Thu, 17 May 2012 00:47:45 +0200 |
parents | 9265958e33bb |
children | e5c0f201ca0b |
files | rhodecode/model/changeset_status.py rhodecode/model/db.py |
diffstat | 2 files changed, 18 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/model/changeset_status.py Thu May 17 00:02:52 2012 +0200 +++ b/rhodecode/model/changeset_status.py Thu May 17 00:47:45 2012 +0200 @@ -49,7 +49,9 @@ def get_status(self, repo, revision): """ - Returns status of changeset for given revision + Returns status of changeset for given revision and version 0 + versioning makes a history of statuses, and version == 0 is always the + current one :param repo: :type repo: @@ -60,14 +62,16 @@ status = ChangesetStatus.query()\ .filter(ChangesetStatus.repo == repo)\ - .filter(ChangesetStatus.revision == revision).scalar() + .filter(ChangesetStatus.revision == revision)\ + .filter(ChangesetStatus.version == 0).scalar() status = status.status if status else status st = status or ChangesetStatus.DEFAULT return str(st) def set_status(self, repo, revision, status, user, comment): """ - Creates new status for changeset or updates the old one + Creates new status for changeset or updates the old ones bumping their + version, leaving the current status at :param repo: :type repo: @@ -82,11 +86,15 @@ """ repo = self.__get_repo(repo) - cur_status = ChangesetStatus.query()\ + cur_statuses = ChangesetStatus.query()\ .filter(ChangesetStatus.repo == repo)\ .filter(ChangesetStatus.revision == revision)\ - .scalar() - new_status = cur_status or ChangesetStatus() + .all() + if cur_statuses: + for st in cur_statuses: + st.version += 1 + self.sa.add(st) + new_status = ChangesetStatus() new_status.author = self.__get_user(user) new_status.repo = self.__get_repo(repo) new_status.status = status
--- a/rhodecode/model/db.py Thu May 17 00:02:52 2012 +0200 +++ b/rhodecode/model/db.py Thu May 17 00:47:45 2012 +0200 @@ -686,7 +686,8 @@ """ statuses = ChangesetStatus.query()\ - .filter(ChangesetStatus.repo == self) + .filter(ChangesetStatus.repo == self)\ + .filter(ChangesetStatus.version == 0) if revisions: statuses = statuses.filter(ChangesetStatus.revision.in_(revisions)) grouped = {} @@ -1230,7 +1231,7 @@ class ChangesetStatus(Base, BaseModel): __tablename__ = 'changeset_statuses' __table_args__ = ( - UniqueConstraint('repo_id', 'revision'), + UniqueConstraint('repo_id', 'revision', 'version'), {'extend_existing': True, 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8'} ) @@ -1250,7 +1251,7 @@ status = Column('status', String(128), nullable=False, default=DEFAULT) changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id')) modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now) - + version = Column('version', Integer(), nullable=False, default=0) author = relationship('User', lazy='joined') repo = relationship('Repository') comment = relationship('ChangesetComment', lazy='joined') @@ -1260,19 +1261,6 @@ return dict(self.STATUSES).get(self.status) -class ChangesetStatusHistory(Base, BaseModel): - __tablename__ = 'changeset_statuses_history' - __table_args__ = ( - {'extend_existing': True, 'mysql_engine': 'InnoDB', - 'mysql_charset': 'utf8'} - ) - #TODO: check if sqla has a nice history table implementation - changeset_status_id = Column('changeset_status_id', Integer(), ForeignKey('changeset_statuses.changeset_status_id'), nullable=False, primary_key=True) - user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) - status = Column('status', String(128), nullable=False) - modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now) - - class Notification(Base, BaseModel): __tablename__ = 'notifications' __table_args__ = (