##// END OF EJS Templates
Fix file-changed-to-dir and dir-to-file commits (issue660)....
Fix file-changed-to-dir and dir-to-file commits (issue660). Allow adding to dirstate files that clash with previously existing but marked for removal. Protect from reintroducing clashes by revert. This change doesn't address related issues with update. Current workaround is to do "clean" update by manually removing conflicting files/dirs from working directory.

File last commit:

r4859:8c5aca85 default
r5487:7a64931e default
Show More
win32text.py
45 lines | 1.3 KiB | text/x-python | PythonLexer
from mercurial import util, ui
from mercurial.i18n import gettext as _
import re
# regexp for single LF without CR preceding.
re_single_lf = re.compile('(^|[^\r])\n', re.MULTILINE)
def dumbdecode(s, cmd):
# warn if already has CRLF in repository.
# it might cause unexpected eol conversion.
# see issue 302:
# http://www.selenic.com/mercurial/bts/issue302
if '\r\n' in s:
u = ui.ui()
u.warn(_('WARNING: file in repository already has CRLF line ending \n'
' which does not need eol conversion by win32text plugin.\n'
' Please reconsider encode/decode setting in'
' mercurial.ini or .hg/hgrc\n'
' before next commit.\n'))
# replace single LF to CRLF
return re_single_lf.sub('\\1\r\n', s)
def dumbencode(s, cmd):
return s.replace('\r\n', '\n')
def clevertest(s, cmd):
if '\0' in s: return False
return True
def cleverdecode(s, cmd):
if clevertest(s, cmd):
return dumbdecode(s, cmd)
return s
def cleverencode(s, cmd):
if clevertest(s, cmd):
return dumbencode(s, cmd)
return s
util.filtertable.update({
'dumbdecode:': dumbdecode,
'dumbencode:': dumbencode,
'cleverdecode:': cleverdecode,
'cleverencode:': cleverencode,
})