Build a revision tree
This commit is contained in:
38
lib/tree_builder.py
Normal file
38
lib/tree_builder.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from lib.db_revision import DBRevision
|
||||
from lib.request import Request
|
||||
|
||||
|
||||
class TreeBuilder:
|
||||
def __init__(self, db):
|
||||
self.db = db
|
||||
|
||||
def filtered_revisions(self, project, package):
|
||||
revisions = DBRevision.all_revisions(self.db, project, package)
|
||||
revisions.sort()
|
||||
ret = []
|
||||
prev = None
|
||||
for rev in revisions:
|
||||
if rev.broken: continue
|
||||
if prev and prev.files_hash(self.db) == rev.files_hash(self.db):
|
||||
continue
|
||||
ret.append(rev)
|
||||
prev = rev
|
||||
return ret
|
||||
|
||||
|
||||
def build(self, package):
|
||||
factory_revisions = self.filtered_revisions("openSUSE:Factory", package)
|
||||
source_revisions = dict()
|
||||
for rev in factory_revisions:
|
||||
print(rev, rev.files_hash(self.db))
|
||||
if rev.request_id:
|
||||
req = Request.find(self.db, rev.request_id)
|
||||
print(" ", req)
|
||||
key = f"{req.source_project}/{req.source_package}"
|
||||
if key not in source_revisions:
|
||||
source_revisions[key] = self.filtered_revisions(
|
||||
req.source_project, req.source_package
|
||||
)
|
||||
for rev2 in source_revisions.get(key):
|
||||
if rev2.files_hash(self.db) == rev.files_hash(self.db):
|
||||
print(" ", rev2)
|
Reference in New Issue
Block a user