Source code for changes.models.phabricatordiff
from __future__ import absolute_import
from datetime import datetime
from sqlalchemy import Column, DateTime, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from uuid import uuid4
from changes.config import db
from changes.db.types.guid import GUID
[docs]class PhabricatorDiff(db.Model):
"""
Whenever phabricator sends us a diff to do a build against (see source/patch
for more info), we write an entry to this table with the details.
revision_id and diff_id refer to the phabricator versions of this
terminology: revision_id is the number in D145201 and diff_id represents
a particular diff within that differential revision (the id in the
revision update history table.)
This is 80% convenient logging. It also does light deduplication: we make
sure to never kick off more than one build for a particular
revision_id/diff_id from the api called by phabricator. Phabricator can
occasionally fire a herald rule more than once, so its nice to have this.
"""
id = Column(GUID, primary_key=True, default=uuid4)
diff_id = Column(Integer, unique=True)
revision_id = Column(Integer)
source_id = Column(GUID, ForeignKey('source.id'))
url = Column(String)
date_created = Column(DateTime, default=datetime.utcnow)
source = relationship('Source')
__tablename__ = 'phabricatordiff'
def __init__(self, **kwargs):
super(PhabricatorDiff, self).__init__(**kwargs)
if self.id is None:
self.id = uuid4()
if self.date_created is None:
self.date_created = datetime.utcnow()