Mercurial > hg-stable
changeset 6066:f3a8b5360100
Strip filter name from command before passing to filter function.
The new registration of in-process data filters (introduced in
f8ad3b76e923 & 11af38a592ae) failed to correctly strip the filter name
from its arguments before passing the "command" to the filter
function. Thus a registration such as
[decode]
*.gz = compress: -9
would result in the associated filter function being called with the
argument 'compress: -9' rather than just '-9' as expected.
author | Jesse Glick <jesse.glick@sun.com> |
---|---|
date | Sat, 09 Feb 2008 12:27:58 -0500 |
parents | 53ed9b40cfc4 |
children | ea33f695304a |
files | mercurial/localrepo.py tests/test-custom-filters tests/test-custom-filters.out |
diffstat | 3 files changed, 74 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/localrepo.py Sat Feb 09 18:38:54 2008 -0200 +++ b/mercurial/localrepo.py Sat Feb 09 12:27:58 2008 -0500 @@ -501,9 +501,11 @@ for pat, cmd in self.ui.configitems(filter): mf = util.matcher(self.root, "", [pat], [], [])[1] fn = None + params = cmd for name, filterfn in self._datafilters.iteritems(): if cmd.startswith(name): fn = filterfn + params = cmd[len(name):].lstrip() break if not fn: fn = lambda s, c, **kwargs: util.filter(s, c) @@ -511,7 +513,7 @@ if not inspect.getargspec(fn)[2]: oldfn = fn fn = lambda s, c, **kwargs: oldfn(s, c) - l.append((mf, fn, cmd)) + l.append((mf, fn, params)) self.filterpats[filter] = l for mf, fn, cmd in self.filterpats[filter]:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-custom-filters Sat Feb 09 12:27:58 2008 -0500 @@ -0,0 +1,60 @@ +#!/bin/sh + +hg init + +cat > .hg/hgrc <<EOF +[extensions] +prefixfilter = prefix.py +[encode] +*.txt = stripprefix: Copyright 2046, The Masters +[decode] +*.txt = insertprefix: Copyright 2046, The Masters +EOF + +cat > prefix.py <<EOF +from mercurial import util +def stripprefix(s, cmd, filename, **kwargs): + header = '%s\n' % cmd + if s[:len(header)] != header: + raise util.Abort('missing header "%s" in %s' % (cmd, filename)) + return s[len(header):] +def insertprefix(s, cmd): + return '%s\n%s' % (cmd, s) +def reposetup(ui, repo): + repo.adddatafilter('stripprefix:', stripprefix) + repo.adddatafilter('insertprefix:', insertprefix) +EOF + +cat > .hgignore <<EOF +.hgignore +prefix.py +prefix.pyc +EOF + +cat > stuff.txt <<EOF +Copyright 2046, The Masters +Some stuff to ponder very carefully. +EOF +hg add stuff.txt +hg ci -m stuff + +echo '% Repository data:' +hg cat stuff.txt + +echo '% Fresh checkout:' +rm stuff.txt +hg up +cat stuff.txt +echo >> stuff.txt <<EOF +Very very carefully. +EOF +hg stat + +cat > morestuff.txt <<EOF +Unauthorized material subject to destruction. +EOF + +echo '% Problem encoding:' +hg add morestuff.txt +hg ci -m morestuff +hg stat
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-custom-filters.out Sat Feb 09 12:27:58 2008 -0500 @@ -0,0 +1,11 @@ +% Repository data: +Some stuff to ponder very carefully. +% Fresh checkout: +1 files updated, 0 files merged, 0 files removed, 0 files unresolved +Copyright 2046, The Masters +Some stuff to ponder very carefully. +M stuff.txt +% Problem encoding: +abort: missing header "Copyright 2046, The Masters" in morestuff.txt +M stuff.txt +A morestuff.txt