summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaakov M. Nemoy <loupgaroublond@gmail.com>2009-02-05 17:11:40 +0100
committerYaakov M. Nemoy <loupgaroublond@gmail.com>2009-02-05 17:11:40 +0100
commit85d8bd9c75d31053567d493b9bd16843be325a07 (patch)
tree49d546bfeb87750aafcd74638dc829c69c16a8ec
parenta5f537fa183b4e7e0bfcd4bb4088eb816ff59728 (diff)
downloadfedora-devshell-85d8bd9c75d31053567d493b9bd16843be325a07.tar.gz
fedora-devshell-85d8bd9c75d31053567d493b9bd16843be325a07.tar.xz
fedora-devshell-85d8bd9c75d31053567d493b9bd16843be325a07.zip
Makes close_later a generic function rather than a method of some class
-rw-r--r--base/util.py25
-rw-r--r--modules/directory.py3
-rw-r--r--modules/port.py15
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()