comparison hgext/win32text.py @ 5967:f8ad3b76e923

Provide better context for custom Python encode/decode filters. While some can function with just some text and an optional command name, others may want a repository object, a ui object, and a file path. Use the enhanced information to good effect in win32text.dumbdecode's warning.
author Jesse Glick <jesse.glick@sun.com>
date Fri, 21 Dec 2007 23:21:17 -0500
parents 11af38a592ae
children f89fd07fc51d
comparison
equal deleted inserted replaced
5966:11af38a592ae 5967:f8ad3b76e923
28 import re 28 import re
29 29
30 # regexp for single LF without CR preceding. 30 # regexp for single LF without CR preceding.
31 re_single_lf = re.compile('(^|[^\r])\n', re.MULTILINE) 31 re_single_lf = re.compile('(^|[^\r])\n', re.MULTILINE)
32 32
33 def dumbdecode(s, cmd): 33 def dumbdecode(s, cmd, ui=None, repo=None, filename=None, **kwargs):
34 # warn if already has CRLF in repository. 34 # warn if already has CRLF in repository.
35 # it might cause unexpected eol conversion. 35 # it might cause unexpected eol conversion.
36 # see issue 302: 36 # see issue 302:
37 # http://www.selenic.com/mercurial/bts/issue302 37 # http://www.selenic.com/mercurial/bts/issue302
38 if '\r\n' in s: 38 if '\r\n' in s and ui and filename and repo:
39 u = ui.ui() 39 ui.warn(_('WARNING: %s already has CRLF line endings\n'
40 u.warn(_('WARNING: file in repository already has CRLF line ending \n' 40 'and does not need EOL conversion by the win32text plugin.\n'
41 ' which does not need eol conversion by win32text plugin.\n' 41 'Before your next commit, please reconsider your '
42 ' Please reconsider encode/decode setting in' 42 'encode/decode settings in \nMercurial.ini or %s.\n') %
43 ' mercurial.ini or .hg/hgrc\n' 43 (filename, repo.join('hgrc')))
44 ' before next commit.\n'))
45 # replace single LF to CRLF 44 # replace single LF to CRLF
46 return re_single_lf.sub('\\1\r\n', s) 45 return re_single_lf.sub('\\1\r\n', s)
47 46
48 def dumbencode(s, cmd): 47 def dumbencode(s, cmd):
49 return s.replace('\r\n', '\n') 48 return s.replace('\r\n', '\n')
50 49
51 def clevertest(s, cmd): 50 def clevertest(s, cmd):
52 if '\0' in s: return False 51 if '\0' in s: return False
53 return True 52 return True
54 53
55 def cleverdecode(s, cmd): 54 def cleverdecode(s, cmd, **kwargs):
56 if clevertest(s, cmd): 55 if clevertest(s, cmd):
57 return dumbdecode(s, cmd) 56 return dumbdecode(s, cmd, **kwargs)
58 return s 57 return s
59 58
60 def cleverencode(s, cmd): 59 def cleverencode(s, cmd):
61 if clevertest(s, cmd): 60 if clevertest(s, cmd):
62 return dumbencode(s, cmd) 61 return dumbencode(s, cmd)