[pacman-dev,1/3] pmpkg: add makepkg_bytes

Message ID 20210427025715.39514-1-andrew.gregory.8@gmail.com
State Accepted, archived
Headers show
Series [pacman-dev,1/3] pmpkg: add makepkg_bytes | expand

Commit Message

Andrew Gregory April 27, 2021, 2:57 a.m. UTC
Builds the package file in memory.  Useful with the built-in server.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
---
 test/pacman/pmpkg.py | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

Patch

diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py
index 8ff1ec1e..01ed4e0a 100644
--- a/test/pacman/pmpkg.py
+++ b/test/pacman/pmpkg.py
@@ -98,7 +98,12 @@  def parse_filename(name):
             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 @@  def makepkg(self, path):
         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)