diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-11-15 15:25:21 -0500 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-11-16 09:57:53 -0500 |
commit | a6a29aa01744cc893741ddf558f415b7c705d3f6 (patch) | |
tree | e8bf8fef06c30c3a6cfb16d533306223afa8638f /src/lib/Bcfg2/Client/Tools/POSIX/base.py | |
parent | 5d58c0435d8d3889d5fa889a65b61565da0a95f6 (diff) | |
download | bcfg2-a6a29aa01744cc893741ddf558f415b7c705d3f6.tar.gz bcfg2-a6a29aa01744cc893741ddf558f415b7c705d3f6.tar.bz2 bcfg2-a6a29aa01744cc893741ddf558f415b7c705d3f6.zip |
POSIX: fixed removal of symlinked directories
Diffstat (limited to 'src/lib/Bcfg2/Client/Tools/POSIX/base.py')
-rw-r--r-- | src/lib/Bcfg2/Client/Tools/POSIX/base.py | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/lib/Bcfg2/Client/Tools/POSIX/base.py b/src/lib/Bcfg2/Client/Tools/POSIX/base.py index a9566b698..6388f6731 100644 --- a/src/lib/Bcfg2/Client/Tools/POSIX/base.py +++ b/src/lib/Bcfg2/Client/Tools/POSIX/base.py @@ -66,18 +66,26 @@ class POSIXTool(Bcfg2.Client.Tools.Tool): rv &= self._set_perms(entry, path=os.path.join(root, path)) return rv + def _remove(self, entry, recursive=True): + """ Remove a Path entry, whatever that takes """ + if os.path.islink(entry.get('name')): + os.unlink(entry.get('name')) + elif os.path.isdir(entry.get('name')): + if recursive: + shutil.rmtree(entry.get('name')) + else: + os.rmdir(entry.get('name')) + else: + os.unlink(entry.get('name')) + def _exists(self, entry, remove=False): """ check for existing paths and optionally remove them. if the path exists, return the lstat of it """ try: ondisk = os.lstat(entry.get('name')) if remove: - if os.path.isdir(entry.get('name')): - remove = shutil.rmtree - else: - remove = os.unlink try: - remove(entry.get('name')) + self._remove(entry) return None except OSError: err = sys.exc_info()[1] |