Mercurial > hg
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) |