diff options
| author | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2009-01-08 15:27:45 -0500 |
|---|---|---|
| committer | Yaakov M. Nemoy <loupgaroublond@gmail.com> | 2009-01-08 15:27:45 -0500 |
| commit | 3bcae770792afe5d5fff2af127cad2c1d0d59d57 (patch) | |
| tree | b89e5835589ebd222d42c46943e38452f9faa6c6 /modules/directory.py | |
| parent | 84211749a73cbff248192519c0f458806b1fb065 (diff) | |
| download | fedora-devshell-3bcae770792afe5d5fff2af127cad2c1d0d59d57.tar.gz fedora-devshell-3bcae770792afe5d5fff2af127cad2c1d0d59d57.tar.xz fedora-devshell-3bcae770792afe5d5fff2af127cad2c1d0d59d57.zip | |
Got rid of non absolute _dir properties.
In effect, anything that ends in dir shoud usually return an absolute path. The absolute path is dynamically determined using utility functions based on the load time settings of a directory object. This both reduces the number of path ambiguities based on the cwd, and yet removes as many absolute paths from config files, so directory objects can be shared between workspaces and developers.
Diffstat (limited to 'modules/directory.py')
| -rw-r--r-- | modules/directory.py | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/modules/directory.py b/modules/directory.py index 40f288f..139a2c9 100644 --- a/modules/directory.py +++ b/modules/directory.py @@ -25,9 +25,9 @@ from os.path import abspath, join, split, splitext, basename, exists, dirname from base.base import log from base.module import Module -from base.util import pwd +from base.util import pwd, copytree - +from modules.dirfactory import DirFactory class Directory(Module): _type = 'directory' def __init__(self, name=None): @@ -64,10 +64,15 @@ class Directory(Module): def load_dir(self, dir): log.debug('directory.load_dir') with pwd(dir): + parent, name = split(getcwd()) + self.parent = parent self.cfg = ConfigObj('.devshell') - self.name = self.cfg['name'] - self.parent = self.cfg['parent'] - self.dir = self.cfg['dir'] + if not self.name == name: + # we are saving name in the .devshell file so we can detect + # if the name has been changed or not. we don't want to have to run + # rename all the time + self.rename(name) + pass def make_dir(self, dir): log.debug('directory.make_dir') @@ -75,15 +80,44 @@ class Directory(Module): self.cfg = ConfigObj('.devshell') parent, name = split(getcwd()) self.cfg['type'] = self._type - self.cfg['name'] = self.name = name - self.cfg['parent'] = self.parent = parent - self.cfg['dir'] = self.dir = dir + self.cfg['name'] = name + self.parent = parent self.cfg.write() + @property + def name(self): + return self.cfg['name'] + + @property + def parent(self): + return self.cfg['parent'] + + @property + def dir(self): + return join(self.parent, self.name) + def close(self): log.debug('writing self.cfg for directory') with pwd(self.dir): self.cfg.write() + def rename(self, new_name): + self.cfg['name'] = new_name + + def move(self, new_loc): + new_loc = abspath(new_loc) + new_parent, new_name = split(new_loc) + old_dir = self.dir + copytree(self.dir, new_loc) + self.parent = new_parent + self.rename(new_name) + rm(old_dir) + + def copy(self, new_loc): + new_loc = abspath(new_loc) + new_parent, new_name = split(new_loc) + copytree(self.dir, new_loc) + new_dir = DirFactory(new_loc) + return new_dir __all__ = ['Directory'] |
