|
10 | 10 | from landoapi import auth |
11 | 11 | from landoapi.decorators import require_phabricator_api_key |
12 | 12 | from landoapi.models import SecApprovalRequest |
| 13 | +from landoapi.models.revisions import Revision, RevisionStatus |
13 | 14 | from landoapi.projects import get_secure_project_phid |
14 | 15 | from landoapi.revisions import revision_is_secure |
15 | 16 | from landoapi.secapproval import send_sanitized_commit_message_for_review |
@@ -90,3 +91,40 @@ def request_sec_approval(data=None): |
90 | 91 | db.session.commit() |
91 | 92 |
|
92 | 93 | return {}, 200 |
| 94 | + |
| 95 | + |
| 96 | +@require_phabricator_api_key(optional=True) |
| 97 | +def process(revision_id, diff_id, target_phid): |
| 98 | + revision = Revision.query.filter( |
| 99 | + Revision.revision_id == revision_id, |
| 100 | + ).one_or_none() |
| 101 | + if revision: |
| 102 | + # Update with target phid and mark revision as stale. |
| 103 | + if revision.diff_id != diff_id: |
| 104 | + logger.info( |
| 105 | + f"diff_id changed for revision " |
| 106 | + f"{revision.revision_id} {revision.diff_id} -> {diff_id}" |
| 107 | + ) |
| 108 | + revision.diff_id = diff_id |
| 109 | + revision.target = target_phid |
| 110 | + revision.status = RevisionStatus.STALE |
| 111 | + else: |
| 112 | + # Create a new revision and add all relevant info. |
| 113 | + revision = Revision( |
| 114 | + revision_id=revision_id, |
| 115 | + diff_id=diff_id, |
| 116 | + target=target_phid, |
| 117 | + status=RevisionStatus.NEW, |
| 118 | + ) |
| 119 | + db.session.add(revision) |
| 120 | + logger.info( |
| 121 | + f"Revision {revision.revision_id} added with diff_id {revision.diff_id}" |
| 122 | + ) |
| 123 | + db.session.commit() |
| 124 | + |
| 125 | + |
| 126 | +def get_stack_hashes(revision_id): |
| 127 | + revision = Revision.query.filter(Revision.id == revision_id).one_or_none() |
| 128 | + if revision: |
| 129 | + return revision.stack_hashes, 200 |
| 130 | + return {}, 404 |
0 commit comments