# HG changeset patch # User Yuya Nishihara # Date 1490790534 -32400 # Node ID fe9b33bcec6a51f16c38aec83e67a4230d8fddda # Parent 8181f378b07389d0bc204bef53dcc9d5e07923c8 util: extract pure tolf/tocrlf() functions from eol extension This can be used for EOL conversion of text files. diff -r 8181f378b073 -r fe9b33bcec6a hgext/eol.py --- a/hgext/eol.py Wed Mar 29 21:23:28 2017 +0900 +++ b/hgext/eol.py Wed Mar 29 21:28:54 2017 +0900 @@ -113,11 +113,6 @@ # 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 @@ 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 @@ 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 -r 8181f378b073 -r fe9b33bcec6a mercurial/util.py --- a/mercurial/util.py Wed Mar 29 21:23:28 2017 +0900 +++ b/mercurial/util.py Wed Mar 29 21:28:54 2017 +0900 @@ -2200,6 +2200,17 @@ (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