From 85d8bd9c75d31053567d493b9bd16843be325a07 Mon Sep 17 00:00:00 2001 From: "Yaakov M. Nemoy" Date: Thu, 5 Feb 2009 17:11:40 +0100 Subject: Makes close_later a generic function rather than a method of some class --- base/util.py | 25 ++++++++++++++++++++++--- modules/directory.py | 3 ++- modules/port.py | 15 ++++----------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/base/util.py b/base/util.py index 5193bcd..acea171 100644 --- a/base/util.py +++ b/base/util.py @@ -52,7 +52,7 @@ def rm(tgt): rmtree(tgt) else: remove(tgt) - + def copy(src, dst): # we're using copyfileobj so we can do this from a URL if isfile(src): @@ -71,7 +71,7 @@ def symlink(src, dst): rm(dst) sym(abspath(src), abspath(dst)) return dst - + def move(src, dst): if lexists(dst): rm(dst) @@ -112,5 +112,24 @@ def base_dir(tarball): ti = tarball.next() return ti.name.split('/')[0] +_to_close = list() +_all_closed = False + +def close_later(directory): + global _to_close + if directory not in _to_close: + self._to_close.append(directory) + return directory + +def close_all(): + global _all_closed + global _to_close + if _all_closed: + return + for directory in _to_close: + directory.close() + + __all__ = ['pwd', 'copy', 'with_sudo', 'with_su', 'symlink', 'move', - 'log_file', 'one', 'remove_all', 'flatten', 'base_dir'] + 'log_file', 'one', 'remove_all', 'flatten', 'base_dir', + 'close_later', 'close_all'] diff --git a/modules/directory.py b/modules/directory.py index e71192a..1c6c02a 100644 --- a/modules/directory.py +++ b/modules/directory.py @@ -28,7 +28,7 @@ from os.path import abspath, join, split, splitext, basename, exists, dirname from base.base import log from base.factories import DirFactory from base.module import Module -from base.util import pwd, copytree +from base.util import pwd, copytree, close_all class MetaDirectory(type): def __init__(cls, name, bases, attrs): @@ -122,6 +122,7 @@ class Directory(Module): log.debug('writing self.cfg for directory') with pwd(self.dir): self.cfg.write() + close_all() def rename(self, new_name): '''renames the directory internally, assuming it's been renamed diff --git a/modules/port.py b/modules/port.py index dd76c0f..7277fa4 100644 --- a/modules/port.py +++ b/modules/port.py @@ -22,7 +22,7 @@ from os import getcwd from base.base import log from base.exceptions import ExecutionException from base.factories import DirFactory -from base.util import pwd +from base.util import pwd, close_later, close_all from base.module import Module @@ -44,7 +44,6 @@ class Port(Module): raise NotImplementedError def __init__(self, package=None): - self._to_close = list() if not package: package = getcwd() self.pkg = DirFactory(package) @@ -59,7 +58,7 @@ class Port(Module): pkg_src.set_buildsystem(self.builder._type) name = pkg_src.name self.pkg.add_source(name) - return self.close_later(pkg_src) + return close_later(pkg_src) def add_vcs(self, url, tgt, *args): '''creates a darcs variant of a cabal package using darcs source @@ -72,7 +71,7 @@ class Port(Module): pkg_src.set_buildsystem(self.builder._type) name = pkg_src.name self.pkg.add_source(name) - return self.close_later(pkg_src) + return close_later(pkg_src) def install_sourceball(self, tarball, target='home', *args): '''given a tarball, copy it in and install it @@ -124,12 +123,6 @@ class Port(Module): self.builder(pkg_src).install_source(target) - def close_later(self, directory): - if directory not in self._to_close: - self._to_close.append(directory) - return directory - def close(self): - for directory in self._to_close: - directory.close() self.pkg.close() + close_all() -- cgit