--- a/hgkw/keyword.py Mon Jan 08 05:40:34 2007 +0100
+++ b/hgkw/keyword.py Mon Jan 08 12:54:31 2007 +0100
@@ -1,5 +1,5 @@
# keyword.py - keyword expansion for mercurial
-# $Id: keyword.py,v 85c345cd495b 2007-01-08 03:05:22 +0100 blacktrash $
+# $Id$
'''keyword expansion hack against the grain of a DSCM
@@ -246,25 +246,40 @@
return n
class kwfilelog(filelog.filelog):
+ '''
+ Superclass over filelog to customize it's read, add, cmp methods.
+ Keywords are "stored" unexpanded, and expanded on reading.
+ '''
def __init__(self, opener, path, repo,
defversion=revlog.REVLOG_DEFAULT_VERSION):
super(kwfilelog, self).__init__(opener, path, defversion)
self._repo = repo
self._path = path
+ def iskwcandidate(self, data):
+ '''Decides whether to act on keywords.'''
+ return (kwfmatches(ui, self._repo, [self._path])
+ and not util.binary(data))
+
def read(self, node):
+ '''Substitutes keywords when reading filelog.'''
data = super(kwfilelog, self).read(node)
- if not util.binary(data) and \
- kwfmatches(ui, self._repo, [self._path]):
+ if self.iskwcandidate(data):
return re_kw.sub(lambda m:
kwexpand(m, self._repo, self._path,
fileid=node, filelog=self), data)
return data
+ def add(self, text, meta, tr, link, p1=None, p2=None):
+ '''Removes keyword substitutions when adding to filelog.'''
+ if self.iskwcandidate(text):
+ text = re_kw.sub(r'$\1$', text)
+ return super(kwfilelog, self).add(text,
+ meta, tr, link, p1=None, p2=None)
+
def cmp(self, node, text):
- '''Removes keyword substitution for comparison.'''
- if not util.binary(text) and \
- kwfmatches(ui, self._repo, [self._path]):
+ '''Removes keyword substitutions for comparison.'''
+ if self.iskwcandidate(text):
text = re_kw.sub(r'$\1$', text)
return super(kwfilelog, self).cmp(node, text)