class DBRevision: def __init__(self, row): # need to stay in sync with the schema creation in db.py ( self.dbid, self.project, self.package, self.rev, self.unexpanded_srcmd5, self.commit_time, self.userid, self.comment, self.requestid, ) = row def __str__(self): return f"Rev {self.project}/{self.rev} Md5 {self.unexpanded_srcmd5} {self.commit_time} {self.userid} {self.requestid}" def __repr__(self): return f"[{self.__str__()}]" def links_to(self, db, project, package): db.cursor().execute( "INSERT INTO links (revision_id, project, package) VALUES (%s,%s,%s)", (self.dbid, project, package), ) @classmethod def import_obs_rev(cls, db, revision): cur = db.cursor() cur.execute( """INSERT INTO revisions (project, package, rev, unexpanded_srcmd5, commit_time, userid, comment, requestid) VALUES(%s, %s, %s, %s, %s, %s, %s, %s)""", ( revision.project, revision.package, revision.rev, revision.unexpanded_srcmd5, revision.time, revision.userid, revision.comment, revision.requestid, ), ) cur.close() return cls.fetch_revision(db, revision.project, revision.package, revision.rev) @classmethod def fetch_revision(cls, db, project, package, rev): cur = db.cursor() cur.execute( "SELECT * FROM revisions where project=%s and package=%s and rev=%s", (project, package, str(rev)), ) row = cur.fetchone() cur.close() return DBRevision(row) @classmethod def latest_revision(cls, db, project, package): cur = db.cursor() cur.execute( "SELECT MAX(rev) FROM revisions where project=%s and package=%s", (project, package), ) max = cur.fetchone()[0] cur.close() if max: return DBRevision.fetch_revision(db, project, package, int(max)) return None @classmethod def all_revisions(cls, db, project, package): cur = db.cursor() cur.execute( "SELECT * FROM revisions where project=%s and package=%s", (project, package), ) ret = [] for row in cur.fetchall(): ret.append(DBRevision(row)) cur.close() return ret def linked_rev(self, db): cur = db.cursor() cur.execute( "SELECT project,package FROM links where revision_id=%s", (self.dbid,) ) row = cur.fetchone() if not row: cur.close() return None project, package = row cur.execute( "SELECT * FROM revisions where project=%s and package=%s and commit_time <= %s ORDER BY commit_time DESC LIMIT 1", (project, package, self.commit_time), ) revisions = [DBRevision(row) for row in cur.fetchall()] cur.close() if revisions: return revisions[0] return None