1 import mercurial.util |
1 from mercurial import util, ui |
|
2 from mercurial.i18n import gettext as _ |
|
3 import re |
|
4 |
|
5 # regexp for single LF without CR preceding. |
|
6 re_single_lf = re.compile('(^|[^\r])\n', re.MULTILINE) |
2 |
7 |
3 def dumbdecode(s, cmd): |
8 def dumbdecode(s, cmd): |
4 return s.replace('\n', '\r\n') |
9 # warn if already has CRLF in repository. |
|
10 # it might cause unexpected eol conversion. |
|
11 # see issue 302: |
|
12 # http://www.selenic.com/mercurial/bts/issue302 |
|
13 if '\r\n' in s: |
|
14 u = ui.ui() |
|
15 u.warn(_('WARNING: file in repository already has CRLF line ending \n' |
|
16 ' which does not need eol conversion by win32text plugin.\n' |
|
17 ' Please reconsider encode/decode setting in' |
|
18 ' mercurial.ini or .hg/hgrc\n' |
|
19 ' before next commit.\n')) |
|
20 # replace single LF to CRLF |
|
21 return re_single_lf.sub('\\1\r\n', s) |
5 |
22 |
6 def dumbencode(s, cmd): |
23 def dumbencode(s, cmd): |
7 return s.replace('\r\n', '\n') |
24 return s.replace('\r\n', '\n') |
8 |
25 |
9 def clevertest(s, cmd): |
26 def clevertest(s, cmd): |
18 def cleverencode(s, cmd): |
35 def cleverencode(s, cmd): |
19 if clevertest(s, cmd): |
36 if clevertest(s, cmd): |
20 return dumbencode(s, cmd) |
37 return dumbencode(s, cmd) |
21 return s |
38 return s |
22 |
39 |
23 mercurial.util.filtertable.update({ |
40 util.filtertable.update({ |
24 'dumbdecode:': dumbdecode, |
41 'dumbdecode:': dumbdecode, |
25 'dumbencode:': dumbencode, |
42 'dumbencode:': dumbencode, |
26 'cleverdecode:': cleverdecode, |
43 'cleverdecode:': cleverdecode, |
27 'cleverencode:': cleverencode, |
44 'cleverencode:': cleverencode, |
28 }) |
45 }) |