summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-06-07 02:10:50 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-06-07 02:10:50 +0200
commit9172ea9e4283e5c1075213edcac081ab317302aa (patch)
tree6ee1dd527770b86e9596153fb717fc380df944c4
parent193fea0a6005cdf6d0bebb2c4956d5fd01f9cb49 (diff)
downloadbcfg2-9172ea9e4283e5c1075213edcac081ab317302aa.tar.gz
bcfg2-9172ea9e4283e5c1075213edcac081ab317302aa.tar.bz2
bcfg2-9172ea9e4283e5c1075213edcac081ab317302aa.zip
Client/Tools/POSIX: only execute needed directory installsdebian/1.2.3-15
Remember the purge actions per Path entry, so that only needed install actions are executed.
-rw-r--r--debian/changelog6
-rw-r--r--src/lib/Client/Tools/POSIX.py16
2 files changed, 18 insertions, 4 deletions
diff --git a/debian/changelog b/debian/changelog
index a38c40258..4414147a1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+bcfg2 (1.2.3-15) unstable; urgency=low
+
+ * Client/Tools/POSIX: only execute needed directory installs
+
+ -- Alexander Sulfrian <alex@spline.inf.fu-berlin.de> Fri, 07 Jun 2013 02:10:14 +0200
+
bcfg2 (1.2.3-14) unstable; urgency=low
* Client/Tools/POSIX: fix indentation
diff --git a/src/lib/Client/Tools/POSIX.py b/src/lib/Client/Tools/POSIX.py
index 5f380023b..dd8272749 100644
--- a/src/lib/Client/Tools/POSIX.py
+++ b/src/lib/Client/Tools/POSIX.py
@@ -116,7 +116,7 @@ class POSIX(Bcfg2.Client.Tools.Tool):
setup.parse([])
ppath = setup['ppath']
max_copies = setup['max_copies']
- prune_list = list()
+ prunes = dict()
def canInstall(self, entry):
"""Check if entry is complete for installation."""
@@ -305,7 +305,10 @@ class POSIX(Bcfg2.Client.Tools.Tool):
try:
entries = ['/'.join([entry.get('name'), ent]) \
for ent in os.listdir(entry.get('name'))]
- ex_ents = [e for e in entries if e not in modlist and e not in self.prune_list]
+ prune_list = list()
+ if entry.get('name') in self.prunes:
+ prune_list = self.prunes[entry.get('name')]
+ ex_ents = [e for e in entries if e not in modlist and e not in prune_list]
if ex_ents:
pruneTrue = False
self.logger.debug("Directory %s contains extra entries:" % \
@@ -318,8 +321,11 @@ class POSIX(Bcfg2.Client.Tools.Tool):
entry.set('qtest', nqtext)
[entry.append(XML.Element('Prune', path=x)) \
for x in ex_ents]
- self.prune_list += ex_ents
- elif self.prune_list:
+ if entry.get('name') not in self.prunes:
+ self.prunes[entry.get('name')] = list()
+ self.prunes[entry.get('name')] += ex_ents
+ elif entry.get('name') in self.prunes \
+ and len(self.prunes[entry.get('name')]) > 0:
pruneTrue = False
except OSError:
ex_ents = []
@@ -443,6 +449,8 @@ class POSIX(Bcfg2.Client.Tools.Tool):
try:
self.logger.debug("Unlinking file %s" % pname)
os.unlink(pname)
+ if entry.get('name') in self.prunes:
+ self.prunes[entry.get('name')].remove(pname)
except OSError:
self.logger.error("Failed to unlink path %s" % pname)
ulfailed = True