pmpkg: add makepkg_bytes

Builds the package file in memory.  Useful with the built-in server.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
This commit is contained in:
Andrew Gregory 2021-04-26 19:32:57 -07:00 committed by Allan McRae
parent e7fa35baa2
commit ab622b4881

View file

@ -98,7 +98,12 @@ class pmpkg(object):
filename, extra = filename.split("|")
return filename
def makepkg(self, path):
def makepkg_bytes(self):
buf = BytesIO();
self.makepkg(fileobj=buf)
return buf.getvalue()
def makepkg(self, path=None, fileobj=None):
"""Creates an Arch Linux package archive.
A package archive is generated in the location 'path', based on the data
@ -138,11 +143,12 @@ class pmpkg(object):
if any(self.install.values()):
archive_files.append((".INSTALL", self.installfile()))
self.path = os.path.join(path, self.filename())
util.mkdir(os.path.dirname(self.path))
if path:
self.path = os.path.join(path, self.filename())
util.mkdir(os.path.dirname(self.path))
# Generate package metadata
tar = tarfile.open(self.path, "w:gz", format=tarfile.GNU_FORMAT)
tar = tarfile.open(name=self.path, fileobj=fileobj, mode="w:gz", format=tarfile.GNU_FORMAT)
for name, data in archive_files:
info = tarfile.TarInfo(name)
info.size = len(data)