comparison rhodecode/model/changeset_status.py @ 2440:1bc579bcd67a codereview

- pull request generates overview based on it's params - added page to show all pull-requests for a repository - db schema changes to support comments and inline comments for pull-requests
author Marcin Kuzminski <marcin@python-works.com>
date Sun, 10 Jun 2012 18:15:00 +0200
parents d3ac7491a5c8
children fd0a822481ec
comparison
equal deleted inserted replaced
2439:ad19dfcdb1cc 2440:1bc579bcd67a
24 24
25 25
26 import logging 26 import logging
27 27
28 from rhodecode.model import BaseModel 28 from rhodecode.model import BaseModel
29 from rhodecode.model.db import ChangesetStatus 29 from rhodecode.model.db import ChangesetStatus, PullRequest
30 30
31 log = logging.getLogger(__name__) 31 log = logging.getLogger(__name__)
32 32
33 33
34 class ChangesetStatusModel(BaseModel): 34 class ChangesetStatusModel(BaseModel):
35 35
36 def __get_changeset_status(self, changeset_status): 36 def __get_changeset_status(self, changeset_status):
37 return self._get_instance(ChangesetStatus, changeset_status) 37 return self._get_instance(ChangesetStatus, changeset_status)
38 38
39 def get_status(self, repo, revision): 39 def __get_pull_request(self, pull_request):
40 return self._get_instance(PullRequest, pull_request)
41
42 def get_status(self, repo, revision=None, pull_request=None):
40 """ 43 """
41 Returns status of changeset for given revision and version 0 44 Returns latest status of changeset for given revision or for given
42 versioning makes a history of statuses, and version == 0 is always the 45 pull request. Statuses are versioned inside a table itself and
43 current one 46 version == 0 is always the current one
44 47
45 :param repo: 48 :param repo:
46 :type repo: 49 :type repo:
47 :param revision: 40char hash 50 :param revision: 40char hash or None
48 :type revision: str 51 :type revision: str
52 :param pull_request: pull_request reference
53 :type:
49 """ 54 """
50 repo = self._get_repo(repo) 55 repo = self._get_repo(repo)
51 56
52 status = ChangesetStatus.query()\ 57 q = ChangesetStatus.query()\
53 .filter(ChangesetStatus.repo == repo)\ 58 .filter(ChangesetStatus.repo == repo)\
54 .filter(ChangesetStatus.revision == revision)\ 59 .filter(ChangesetStatus.version == 0)
55 .filter(ChangesetStatus.version == 0).scalar() 60
61 if revision:
62 q = q.filter(ChangesetStatus.revision == revision)
63 elif pull_request:
64 pull_request = self.__get_pull_request(pull_request)
65 q = q.filter(ChangesetStatus.pull_request == pull_request)
66 else:
67 raise Exception('Please specify revision or pull_request')
68
69 status = q.scalar()
56 status = status.status if status else status 70 status = status.status if status else status
57 st = status or ChangesetStatus.DEFAULT 71 st = status or ChangesetStatus.DEFAULT
58 return str(st) 72 return str(st)
59 73
60 def set_status(self, repo, revision, status, user, comment): 74 def set_status(self, repo, revision, status, user, comment):