diff --git a/hgext/eol.py b/hgext/eol.py --- a/hgext/eol.py +++ b/hgext/eol.py @@ -113,11 +113,6 @@ testedwith = 'ships-with-hg-core' # Matches a lone LF, i.e., one that is not part of CRLF. singlelf = re.compile('(^|[^\r])\n') -# Matches a single EOL which can either be a CRLF where repeated CR -# are removed or a LF. We do not care about old Macintosh files, so a -# stray CR is an error. -eolre = re.compile('\r*\n') - def inconsistenteol(data): return '\r\n' in data and singlelf.search(data) @@ -131,7 +126,7 @@ def tolf(s, params, ui, **kwargs): if (ui.configbool('eol', 'fix-trailing-newline', False) and s and s[-1] != '\n'): s = s + '\n' - return eolre.sub('\n', s) + return util.tolf(s) def tocrlf(s, params, ui, **kwargs): """Filter to convert to CRLF EOLs.""" @@ -142,7 +137,7 @@ def tocrlf(s, params, ui, **kwargs): if (ui.configbool('eol', 'fix-trailing-newline', False) and s and s[-1] != '\n'): s = s + '\n' - return eolre.sub('\r\n', s) + return util.tocrlf(s) def isbinary(s, params): """Filter to do nothing with the file.""" diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -2200,6 +2200,17 @@ bytecount = unitcountfn( (1, 1, _('%.0f bytes')), ) +# Matches a single EOL which can either be a CRLF where repeated CR +# are removed or a LF. We do not care about old Macintosh files, so a +# stray CR is an error. +_eolre = remod.compile(br'\r*\n') + +def tolf(s): + return _eolre.sub('\n', s) + +def tocrlf(s): + return _eolre.sub('\r\n', s) + def escapestr(s): # call underlying function of s.encode('string_escape') directly for # Python 3 compatibility