From 536b4924b09291acafc123f649267cf5794d09fe Mon Sep 17 00:00:00 2001 From: Tanel Andreson Date: Mon, 23 Mar 2026 10:30:17 +0200 Subject: [PATCH 1/2] avoid duplicate data in the tarball --- vmtool/tarball.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/vmtool/tarball.py b/vmtool/tarball.py index 148abf6..2d14519 100644 --- a/vmtool/tarball.py +++ b/vmtool/tarball.py @@ -24,6 +24,7 @@ class TarBall(object): def __init__(self): self.buf = io.BytesIO() self.tf = tarfile.open('buf.tgz', 'w|gz', self.buf, format=tarfile.PAX_FORMAT) + self.added_paths = set() # Track added paths to avoid duplicates def filter_data(self, fname, data): """Overridable function.""" @@ -56,6 +57,11 @@ def add_file_data(self, fpath, data, mode=TAR_FILE_MODE, mtime=None): fpath, data = self.filter_data(fpath, data) if not fpath: return + + # Skip if already added + if fpath in self.added_paths: + return + if data is not origdata: mtime = None inf = tarfile.TarInfo(fpath) @@ -78,6 +84,7 @@ def add_file_data(self, fpath, data, mode=TAR_FILE_MODE, mtime=None): inf.size = len(data) self.tf.addfile(inf, io.BytesIO(data)) + self.added_paths.add(fpath) def add_dir(self, dpath, mode=TAR_DIR_MODE, mtime=None): """Add directory entry.""" @@ -86,7 +93,14 @@ def add_dir(self, dpath, mode=TAR_DIR_MODE, mtime=None): if not dpath: return - inf = tarfile.TarInfo(dpath + '/') + # Normalize directory path with trailing slash for tracking + dir_entry = dpath + '/' + + # Skip if already added + if dir_entry in self.added_paths: + return + + inf = tarfile.TarInfo(dir_entry) inf.mtime = mtime or time.time() inf.uid = 1000 inf.gid = 1000 @@ -95,6 +109,7 @@ def add_dir(self, dpath, mode=TAR_DIR_MODE, mtime=None): inf.mode = mode inf.type = tarfile.DIRTYPE self.tf.addfile(inf) + self.added_paths.add(dir_entry) def close(self): """Close tarball.""" From ea9074cfebfa9463ef3526ab8cc41c8f1c22a91c Mon Sep 17 00:00:00 2001 From: Tanel Andreson Date: Mon, 23 Mar 2026 10:35:51 +0200 Subject: [PATCH 2/2] fix --- vmtool/tarball.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vmtool/tarball.py b/vmtool/tarball.py index 2726a13..7aeb5cd 100644 --- a/vmtool/tarball.py +++ b/vmtool/tarball.py @@ -30,7 +30,6 @@ def __init__(self, comp='xz', compresslevel=9): Default is 9 for maximum compression of text scripts """ self.buf = io.BytesIO() - self.tf = tarfile.open('buf.tgz', 'w|gz', self.buf, format=tarfile.PAX_FORMAT) self.added_paths = set() # Track added paths to avoid duplicates self.comp = comp