hgext/win32text.py
changeset 4848 30762680fcd2
parent 1300 e58b1c9a0dec
child 4849 8c5aca855b5d
equal deleted inserted replaced
4847:2192001e4bb4 4848:30762680fcd2
     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     })