Implement a fileshash function for revision

This commit is contained in:
Stephan Kulow
2022-10-21 15:02:02 +02:00
parent 5bd790e915
commit bc74b6950b
3 changed files with 41 additions and 6 deletions

View File

@@ -1,3 +1,5 @@
from hashlib import md5
from lib.request import Request
@@ -19,6 +21,7 @@ class DBRevision:
self.request_id,
) = row
self.rev = int(self.rev)
self._files = None
def __str__(self):
return f"Rev {self.project}/{self.rev} Md5 {self.unexpanded_srcmd5} {self.commit_time} {self.userid} {self.request_number}"
@@ -156,14 +159,31 @@ class DBRevision:
),
)
def fileshash(self, db):
m = md5()
for file_dict in self.files_list(db):
m.update(
(
file_dict["name"]
+ "/"
+ file_dict["md5"]
+ "/"
+ str(file_dict["size"])
).encode("utf-8")
)
return m.hexdigest()
def files_list(self, db):
if self._files:
return self._files
cur = db.cursor()
cur.execute("SELECT * from files where revision_id=%s", (self.dbid,))
ret = []
self._files = []
for row in cur.fetchall():
(_, _, name, md5, size, mtime) = row
ret.append({"md5": md5, "size": size, "mtime": mtime, "name": name})
return ret
self._files.append({"md5": md5, "size": size, "mtime": mtime, "name": name})
self._files.sort(key=lambda x: x["name"])
return self._files
@staticmethod
def requests_to_fetch(self, db, project, package):