summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Client/Tools/POSIX/base.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-11-15 15:25:21 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-11-16 09:57:53 -0500
commita6a29aa01744cc893741ddf558f415b7c705d3f6 (patch)
treee8bf8fef06c30c3a6cfb16d533306223afa8638f /src/lib/Bcfg2/Client/Tools/POSIX/base.py
parent5d58c0435d8d3889d5fa889a65b61565da0a95f6 (diff)
downloadbcfg2-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.py18
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]