From 35e72df99f764b4a233444c533afddc7c8ebd95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Mon, 23 Jan 2017 10:53:46 +0100 Subject: [PATCH] Explicitly remove all temporary files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There is no guarantee __del__ will ever be called, and we were leaving a ton of stuff in /tmp. With this patch we pass the temporary directories explictly and make sure they are deleted at the end. Signed-off-by: Lubomír Sedlář --- bin/pungi-gather | 13 +++++++------ pungi/dnf_wrapper.py | 8 -------- tests/test_gather.py | 2 ++ 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/bin/pungi-gather b/bin/pungi-gather index d8b02c03..9bbda922 100755 --- a/bin/pungi-gather +++ b/bin/pungi-gather @@ -4,13 +4,12 @@ import os import argparse -import tempfile -import shutil import pungi.ks from pungi.dnf_wrapper import DnfWrapper, Conf from pungi.gather_dnf import Gather, GatherOptions from pungi.profiler import Profiler +from pungi.util import temp_dir def get_parser(): @@ -68,12 +67,13 @@ def get_parser(): return parser -def main(): +def main(persistdir, cachedir): parser = get_parser() ns = parser.parse_args() dnf_conf = Conf(ns.arch) - dnf_conf.persistdir = tempfile.mkdtemp() + dnf_conf.persistdir = persistdir + dnf_conf.cachedir = cachedir dnf_obj = DnfWrapper(dnf_conf) gather_opts = GatherOptions() @@ -129,7 +129,6 @@ def main(): packages.add("-%s" % i) g.gather(packages, conditional_packages) - shutil.rmtree(dnf_conf.persistdir) print_rpms(g) if ns.profiler: @@ -162,4 +161,6 @@ def print_rpms(gather_obj): if __name__ == "__main__": - main() + with temp_dir(prefix='pungi_dnf_') as persistdir: + with temp_dir(prefix='pungi_dnf_cache_') as cachedir: + main(persistdir, cachedir) diff --git a/pungi/dnf_wrapper.py b/pungi/dnf_wrapper.py index 3e2b81a1..20722769 100644 --- a/pungi/dnf_wrapper.py +++ b/pungi/dnf_wrapper.py @@ -19,8 +19,6 @@ from distutils.version import LooseVersion import os -import shutil -import tempfile import dnf @@ -56,12 +54,6 @@ class DnfWrapper(dnf.Base): super(DnfWrapper, self).__init__(*args, **kwargs) self.arch_wrapper = ArchWrapper(self.conf.substitutions["arch"]) self.comps_wrapper = CompsWrapper(self) - # use a custom cachedir, delete it after use - self.conf.cachedir = tempfile.mkdtemp(prefix="pungi_dnf_") - - def __del__(self): - if self.conf.cachedir.startswith("/tmp/"): - shutil.rmtree(self.conf.cachedir) def add_repo(self, repoid, baseurl=None, mirrorlist=None, ignoregroups=False, lookaside=False): if "://" not in baseurl: diff --git a/tests/test_gather.py b/tests/test_gather.py index 6a71ea0e..5d954098 100644 --- a/tests/test_gather.py +++ b/tests/test_gather.py @@ -1621,6 +1621,7 @@ def convert_dnf_packages(pkgs, flags): class DNFDepsolvingTestCase(DepsolvingBase, unittest.TestCase): def setUp(self): super(DNFDepsolvingTestCase, self).setUp() + self.cachedir = os.path.join(self.tmp_dir, 'pungi_dnf_cache') self.get_langpacks = False logger = logging.getLogger('gather_dnf') @@ -1665,6 +1666,7 @@ class DNFDepsolvingTestCase(DepsolvingBase, unittest.TestCase): def dnf_instance(self, base_arch, exclude=None, lookaside=False, persistdir=None): conf = Conf(base_arch) conf.persistdir = persistdir + conf.cachedir = self.cachedir if exclude: conf.exclude = exclude dnf = DnfWrapper(conf)