diff kallithea/model/changeset_status.py @ 4360:05af189da2ae

pull requests: refactor ChangesetStatus set_status and ChangesetComment create
author Mads Kiilerich <madski@unity3d.com>
date Tue, 10 Dec 2013 19:30:37 +0100
parents cfd9115db2a5
children 1f94dd1e2757
line wrap: on
line diff
--- a/kallithea/model/changeset_status.py	Tue Dec 10 19:30:37 2013 +0100
+++ b/kallithea/model/changeset_status.py	Tue Dec 10 19:30:37 2013 +0100
@@ -132,10 +132,11 @@
         version, leaving the current status at
 
         :param repo:
-        :param revision:
         :param status:
         :param user:
         :param comment:
+        :param revision:
+        :param pull_request:
         :param dont_allow_on_closed_pull_request: don't allow a status change
             if last status was for pull request and it's closed. We shouldn't
             mess around this manually
@@ -143,13 +144,18 @@
         repo = self._get_repo(repo)
 
         q = ChangesetStatus.query()
-        if revision:
+        if revision is not None:
+            assert pull_request is None
             q = q.filter(ChangesetStatus.repo == repo)
             q = q.filter(ChangesetStatus.revision == revision)
-        elif pull_request:
+            revisions = [revision]
+        else:
+            assert pull_request is not None
             pull_request = self.__get_pull_request(pull_request)
-            q = q.filter(ChangesetStatus.repo == pull_request.org_repo)
+            repo = pull_request.org_repo
+            q = q.filter(ChangesetStatus.repo == repo)
             q = q.filter(ChangesetStatus.revision.in_(pull_request.revisions))
+            revisions = pull_request.revisions
         cur_statuses = q.all()
 
         #if statuses exists and last is associated with a closed pull request
@@ -162,38 +168,20 @@
             )
 
         #update all current statuses with older version
-        if cur_statuses:
-            for st in cur_statuses:
-                st.version += 1
-                self.sa.add(st)
+        for st in cur_statuses:
+            st.version += 1
+            self.sa.add(st)
 
-        def _create_status(user, repo, status, comment, revision, pull_request):
+        new_statuses = []
+        for rev in revisions:
             new_status = ChangesetStatus()
             new_status.version = 0 # default
             new_status.author = self._get_user(user)
             new_status.repo = self._get_repo(repo)
             new_status.status = status
             new_status.comment = comment
-            new_status.revision = revision
+            new_status.revision = rev
             new_status.pull_request = pull_request
-            return new_status
-
-        if revision:
-            new_status = _create_status(user=user, repo=repo, status=status,
-                           comment=comment, revision=revision,
-                           pull_request=None)
+            new_statuses.append(new_status)
             self.sa.add(new_status)
-            return new_status
-        elif pull_request:
-            #pull request can have more than one revision associated to it
-            #we need to create new version for each one
-            new_statuses = []
-            repo = pull_request.org_repo
-            for rev in pull_request.revisions:
-                new_status = _create_status(user=user, repo=repo,
-                                            status=status, comment=comment,
-                                            revision=rev,
-                                            pull_request=pull_request)
-                new_statuses.append(new_status)
-                self.sa.add(new_status)
-            return new_statuses
+        return new_statuses