summaryrefslogtreecommitdiffstats
path: root/src/lib/Client
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2007-08-01 13:45:59 +0000
committerNarayan Desai <desai@mcs.anl.gov>2007-08-01 13:45:59 +0000
commit2361aaca291b381bde937af2e575ef053eba6418 (patch)
treef70bad4862e8abc7a878c8d6ac30222b2cb33ff5 /src/lib/Client
parentae3dc099f25c067ea414e675e24b97848f3bd81a (diff)
downloadbcfg2-2361aaca291b381bde937af2e575ef053eba6418.tar.gz
bcfg2-2361aaca291b381bde937af2e575ef053eba6418.tar.bz2
bcfg2-2361aaca291b381bde937af2e575ef053eba6418.zip
Client side of improved support for binary files in statistics
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@3587 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Client')
-rw-r--r--src/lib/Client/Frame.py7
-rw-r--r--src/lib/Client/Tools/POSIX.py52
2 files changed, 37 insertions, 22 deletions
diff --git a/src/lib/Client/Frame.py b/src/lib/Client/Frame.py
index ecd4917a3..b19594402 100644
--- a/src/lib/Client/Frame.py
+++ b/src/lib/Client/Frame.py
@@ -1,7 +1,7 @@
'''Frame is the Client Framework that verifies and installs entries, and generates statistics'''
__revision__ = '$Revision$'
-import binascii, logging, time
+import logging, time
import Bcfg2.Client.Tools
def cmpent(ent1, ent2):
@@ -326,10 +326,7 @@ class Frame:
for item in data:
item.set('qtext', '')
container.append(item)
- if item.get('current_diff', False):
- item.set('current_bdiff',
- binascii.b2a_base64(item.get('current_diff')))
- item.set('current_diff', '')
+ item.text = None
timeinfo = Bcfg2.Client.XML.Element("OpStamps")
feedback.append(stats)
diff --git a/src/lib/Client/Tools/POSIX.py b/src/lib/Client/Tools/POSIX.py
index 783e3192a..f4e3063a6 100644
--- a/src/lib/Client/Tools/POSIX.py
+++ b/src/lib/Client/Tools/POSIX.py
@@ -43,7 +43,20 @@ def normGid(entry):
except (OSError, KeyError):
self.logger.error('GID normalization failed for %s' % (entry.get('name')))
return False
-
+
+text_chars = "".join(map(chr, range(32, 127)) + list("\n\r\t\b"))
+notrans = string.maketrans("", "")
+
+def isString(strng):
+ '''Returns true if a string contains no binary chars'''
+ if "\0" in strng:
+ return False
+
+ if not strng:
+ return True
+
+ return len(strng.translate(notrans, text_chars)) == 0
+
class POSIX(Bcfg2.Client.Tools.Tool):
'''POSIX File support code'''
__name__ = 'POSIX'
@@ -251,22 +264,27 @@ class POSIX(Bcfg2.Client.Tools.Tool):
return False
contentStatus = content == tempdata
if not contentStatus:
- diff = '\n'.join([x for x in difflib.ndiff(content.split('\n'), tempdata.split('\n'))])
- try:
- entry.set("current_diff", xml.sax.saxutils.escape(diff))
- except:
- pass
- udiff = '\n'.join([x for x in difflib.unified_diff(content.split('\n'), \
- tempdata.split('\n'))])
- try:
- eudiff = udiff.encode('ascii')
- except:
- eudiff = "Binary file: no diff printed"
- nqtext = entry.get('qtext', '')
- if nqtext:
- nqtext += '\n'
- nqtext += eudiff
- entry.set('qtext', nqtext)
+ if not isString(content) or not isString(tempdata):
+ entry.set('current_bfile', binascii.b2a_base64(content))
+ nqtext = entry.get('qtext', '')
+ nqtext += '\nBinary file, no printable diff'
+ entry.set('qtext', nqtest)
+ else:
+ diff = '\n'.join([x for x in difflib.ndiff(content.split('\n'),
+ tempdata.split('\n'))])
+ entry.set("current_bdiff", binascii.b2a_base64(diff))
+ udiff = '\n'.join([x for x in \
+ difflib.unified_diff(content.split('\n'), \
+ tempdata.split('\n'))])
+ try:
+ eudiff = udiff.encode('ascii')
+ except:
+ eudiff = "Binary file: no diff printed"
+ nqtext = entry.get('qtext', '')
+ if nqtext:
+ nqtext += '\n'
+ nqtext += eudiff
+ entry.set('qtext', nqtext)
qtxt = entry.get('qtext', '')
qtxt += "\nInstall ConfigFile %s: (y/N): " % (entry.get('name'))
entry.set('qtext', qtxt)