From 8790e0c8b0dd2b2594d428e65b18bda8f68050ef Mon Sep 17 00:00:00 2001 From: Suyono Date: Fri, 25 Nov 2022 19:53:20 +1100 Subject: [PATCH] WIP: need to verify the result archive --- tarroot.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tarroot.py b/tarroot.py index 52e5c36..6e95d7e 100644 --- a/tarroot.py +++ b/tarroot.py @@ -13,7 +13,7 @@ class TarRoot: def __init__(self, arguments): self.debug = arguments.debug self.target_dir = arguments.target_dir - self.tar = tarfile.open(arguments.target_tar, "w:gz") + self.tar = tarfile.open(arguments.target_tar, "w:gz", compresslevel=6) def debug_print(self, *arguments): if self.debug: @@ -29,21 +29,24 @@ class TarRoot: self._run('.') self.debug_print("returning to original dir: ", start_dir) os.chdir(start_dir) + self.tar.close() + + def _append_symlink(self, entry, *parent): + path = entry.name + if len(parent) > 0: + path = parent[0] + os.sep + path + self.debug_print("adding symlink {0}".format(path)) + ti = self.tar.gettarinfo(name=path) + self.tar.addfile(ti) def _append_dir(self, entry, *parent): path = entry.name if len(parent) > 0: path = parent[0] + os.sep + path self.debug_print("adding directory {0}".format(path)) - ti = tarfile.TarInfo(path) - ti.type = tarfile.DIRTYPE - stat_result = entry.stat(follow_symlinks=False) - ti.mode = stat.S_IMODE(stat_result.st_mode) - ti.uid = stat_result.st_uid - ti.gid = stat_result.st_gid - ti.mtime = stat_result.st_mtime - self.debug_print("writing tar info ", ti) - self.tar.addfile(ti) + ti = self.tar.gettarinfo(name=path) + # self.debug_print("directory attribute", ti) + self.tar.addfile(tarinfo=ti) def _append_file(self, entry, *parent): path = entry.name @@ -53,12 +56,13 @@ class TarRoot: self.tar.add(path) def _run(self, running_dir): - symlinks = [] + # symlinks = [] with os.scandir(running_dir) as it: for entry in it: if entry.is_symlink(): self.debug_print("appending symlink ", entry) - symlinks.append(entry) + # symlinks.append(entry) + self._append_symlink(entry, running_dir) if running_dir != "." else self._append_symlink(entry) elif entry.is_dir(): self._append_dir(entry, running_dir) if running_dir != "." else self._append_dir(entry) self.debug_print("going recursive")