##// END OF EJS Templates
keepalive: attempt to fix issue1003...
keepalive: attempt to fix issue1003 This is a reimport of the relevant piece of the upstream urlgrabber, which appears to be more correct.

File last commit:

r8002:36a23a18 default
r8146:4f13ed6e default
Show More
win32text.py
145 lines | 4.5 KiB | text/x-python | PythonLexer
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 # win32text.py - LF <-> CRLF/CR translation utilities for Windows/Mac users
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 #
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
#
# To perform automatic newline conversion, use:
#
# [extensions]
# hgext.win32text =
# [encode]
# ** = cleverencode:
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 # # or ** = macencode:
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 # [decode]
# ** = cleverdecode:
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 # # or ** = macdecode:
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 #
Martin Geisler
win32text: word-wrap help texts at 70 characters
r8002 # If not doing conversion, to make sure you do not commit CRLF/CR by
# accident:
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 #
# [hooks]
# pretxncommit.crlf = python:hgext.win32text.forbidcrlf
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 # # or pretxncommit.cr = python:hgext.win32text.forbidcr
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 #
Martin Geisler
win32text: word-wrap help texts at 70 characters
r8002 # To do the same check on a server to prevent CRLF/CR from being
# pushed or pulled:
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 #
# [hooks]
# pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 # # or pretxnchangegroup.cr = python:hgext.win32text.forbidcr
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675
Martin Geisler
i18n: import _ instead of gettext
r7225 from mercurial.i18n import _
Peter Arrenbrecht
cleanup: drop unused imports
r7873 from mercurial.node import short
Dirkjan Ochtman
win32text: actually import util so util.binary() can be used
r6510 from mercurial import util
Lee Cantey
Correct inadvertent line ending change.
r4859 import re
# regexp for single LF without CR preceding.
re_single_lf = re.compile('(^|[^\r])\n', re.MULTILINE)
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 newlinestr = {'\r\n': 'CRLF', '\r': 'CR'}
filterstr = {'\r\n': 'clever', '\r': 'mac'}
def checknewline(s, newline, ui=None, repo=None, filename=None):
# warn if already has 'newline' in repository.
Lee Cantey
Correct inadvertent line ending change.
r4859 # it might cause unexpected eol conversion.
# see issue 302:
# http://www.selenic.com/mercurial/bts/issue302
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 if newline in s and ui and filename and repo:
ui.warn(_('WARNING: %s already has %s line endings\n'
Jesse Glick
Provide better context for custom Python encode/decode filters....
r5967 'and does not need EOL conversion by the win32text plugin.\n'
'Before your next commit, please reconsider your '
'encode/decode settings in \nMercurial.ini or %s.\n') %
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 (filename, newlinestr[newline], repo.join('hgrc')))
def dumbdecode(s, cmd, **kwargs):
checknewline(s, '\r\n', **kwargs)
Lee Cantey
Correct inadvertent line ending change.
r4859 # replace single LF to CRLF
return re_single_lf.sub('\\1\r\n', s)
def dumbencode(s, cmd):
return s.replace('\r\n', '\n')
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 def macdumbdecode(s, cmd, **kwargs):
checknewline(s, '\r', **kwargs)
return s.replace('\n', '\r')
def macdumbencode(s, cmd):
return s.replace('\r', '\n')
Jesse Glick
Provide better context for custom Python encode/decode filters....
r5967 def cleverdecode(s, cmd, **kwargs):
Bryan O'Sullivan
Get rid of reimplementations of util.binary
r6508 if not util.binary(s):
Patrick Mezard
Backed out changeset 7f4257b5cbfc...
r6473 return dumbdecode(s, cmd, **kwargs)
return s
Lee Cantey
Correct inadvertent line ending change.
r4859
def cleverencode(s, cmd):
Bryan O'Sullivan
Get rid of reimplementations of util.binary
r6508 if not util.binary(s):
Patrick Mezard
Backed out changeset 7f4257b5cbfc...
r6473 return dumbencode(s, cmd)
return s
Lee Cantey
Correct inadvertent line ending change.
r4859
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 def macdecode(s, cmd, **kwargs):
Bryan O'Sullivan
Get rid of reimplementations of util.binary
r6508 if not util.binary(s):
Patrick Mezard
Merge with macencode branch
r6484 return macdumbdecode(s, cmd, **kwargs)
return s
OHASHI Hideya
win32text: Add macencode/macdecode
r6481
def macencode(s, cmd):
Bryan O'Sullivan
Get rid of reimplementations of util.binary
r6508 if not util.binary(s):
Patrick Mezard
Merge with macencode branch
r6484 return macdumbencode(s, cmd)
return s
OHASHI Hideya
win32text: Add macencode/macdecode
r6481
Patrick Mezard
Register data filters in a localrepo instead of util...
r5966 _filters = {
Lee Cantey
Correct inadvertent line ending change.
r4859 'dumbdecode:': dumbdecode,
'dumbencode:': dumbencode,
'cleverdecode:': cleverdecode,
'cleverencode:': cleverencode,
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 'macdumbdecode:': macdumbdecode,
'macdumbencode:': macdumbencode,
'macdecode:': macdecode,
'macencode:': macencode,
Patrick Mezard
Register data filters in a localrepo instead of util...
r5966 }
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675
Patrick Mezard
win32text: rename forbidcrlforcr() function
r6483 def forbidnewline(ui, repo, hooktype, node, newline, **kwargs):
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 halt = False
Matt Mackall
add __len__ and __iter__ methods to repo and revlog
r6750 for rev in xrange(repo[node].rev(), len(repo)):
Matt Mackall
use repo[changeid] to get a changectx
r6747 c = repo[rev]
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 for f in c.files():
if f not in c:
continue
data = c[f].data()
Bryan O'Sullivan
Get rid of reimplementations of util.binary
r6508 if not util.binary(data) and newline in data:
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 if not halt:
ui.warn(_('Attempt to commit or push text file(s) '
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 'using %s line endings\n') %
newlinestr[newline])
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 ui.warn(_('in %s: %s\n') % (short(c.node()), f))
halt = True
if halt and hooktype == 'pretxnchangegroup':
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 crlf = newlinestr[newline].lower()
filter = filterstr[newline]
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 ui.warn(_('\nTo prevent this mistake in your local repository,\n'
'add to Mercurial.ini or .hg/hgrc:\n'
'\n'
'[hooks]\n'
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 'pretxncommit.%s = python:hgext.win32text.forbid%s\n'
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 '\n'
'and also consider adding:\n'
'\n'
'[extensions]\n'
'hgext.win32text =\n'
'[encode]\n'
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 '** = %sencode:\n'
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 '[decode]\n'
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 '** = %sdecode:\n') % (crlf, crlf, filter, filter))
Jesse Glick
Issue 882: add standard hook to reject text files with CRLF....
r5675 return halt
Patrick Mezard
Register data filters in a localrepo instead of util...
r5966
OHASHI Hideya
win32text: Add macencode/macdecode
r6481 def forbidcrlf(ui, repo, hooktype, node, **kwargs):
Patrick Mezard
win32text: rename forbidcrlforcr() function
r6483 return forbidnewline(ui, repo, hooktype, node, '\r\n', **kwargs)
OHASHI Hideya
win32text: Add macencode/macdecode
r6481
def forbidcr(ui, repo, hooktype, node, **kwargs):
Patrick Mezard
win32text: rename forbidcrlforcr() function
r6483 return forbidnewline(ui, repo, hooktype, node, '\r', **kwargs)
OHASHI Hideya
win32text: Add macencode/macdecode
r6481
Patrick Mezard
Register data filters in a localrepo instead of util...
r5966 def reposetup(ui, repo):
if not repo.local():
return
for name, fn in _filters.iteritems():
repo.adddatafilter(name, fn)