Mercurial > hg
changeset 6506:850071c017fa
keyword: check for '\0' in entire data before acting
util.binary might not be safe enough, as it fails eg. on certain
pdf files (issue1066).
author | Christian Ebert <blacktrash@gmx.net> |
---|---|
date | Wed, 09 Apr 2008 14:12:32 +0200 |
parents | 7ae26bb2d5cc |
children | 9699864de219 |
files | hgext/keyword.py |
diffstat | 1 files changed, 9 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/keyword.py Wed Apr 09 14:05:57 2008 +0200 +++ b/hgext/keyword.py Wed Apr 09 14:12:32 2008 +0200 @@ -100,6 +100,11 @@ '''Returns hgdate in cvs-like UTC format.''' return time.strftime('%Y/%m/%d %H:%M:%S', time.gmtime(date[0])) +def textsafe(s): + '''Safe version of util.binary with reversed logic. + Note: argument may not be None, which is allowed for util.binary.''' + return '\0' not in s + # make keyword tools accessible kwtools = {'templater': None, 'hgcmd': '', 'inc': [], 'exc': ['.hg*']} @@ -158,7 +163,7 @@ def expand(self, path, node, data): '''Returns data with keywords expanded.''' - if not self.restrict and self.matcher(path) and not util.binary(data): + if not self.restrict and self.matcher(path) and textsafe(data): changenode = self.getnode(path, node) return self.substitute(data, path, changenode, self.re_kw.sub) return data @@ -186,7 +191,7 @@ for f in candidates: fp = self.repo.file(f) data = fp.read(mf[f]) - if util.binary(data): + if not textsafe(data): continue if expand: changenode = node or self.getnode(f, mf[f]) @@ -206,7 +211,7 @@ def shrink(self, fname, text): '''Returns text with all keyword substitutions removed.''' - if self.matcher(fname) and not util.binary(text): + if self.matcher(fname) and textsafe(text): return self.shrinktext(text) return text @@ -214,7 +219,7 @@ '''Returns lines with keyword substitutions removed.''' if self.matcher(fname): text = ''.join(lines) - if not util.binary(text): + if textsafe(text): return self.shrinktext(text).splitlines(True) return lines