comparison hgext/win32text.py @ 6473:9c897ffd3637

Backed out changeset 7f4257b5cbfc util.binary heuristic cannot be trusted when decoding working directory files.
author Patrick Mezard <pmezard@gmail.com>
date Fri, 04 Apr 2008 23:09:54 +0200
parents 7f4257b5cbfc
children ab8038bf5127
comparison
equal deleted inserted replaced
6247:7f4257b5cbfc 6473:9c897ffd3637
20 # To do the same check on a server to prevent CRLF from being pushed or pulled: 20 # To do the same check on a server to prevent CRLF from being pushed or pulled:
21 # 21 #
22 # [hooks] 22 # [hooks]
23 # pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf 23 # pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
24 24
25 from mercurial import util
26 from mercurial.i18n import gettext as _ 25 from mercurial.i18n import gettext as _
27 from mercurial.node import bin, short 26 from mercurial.node import bin, short
28 import re 27 import re
29 28
30 # regexp for single LF without CR preceding. 29 # regexp for single LF without CR preceding.
45 return re_single_lf.sub('\\1\r\n', s) 44 return re_single_lf.sub('\\1\r\n', s)
46 45
47 def dumbencode(s, cmd): 46 def dumbencode(s, cmd):
48 return s.replace('\r\n', '\n') 47 return s.replace('\r\n', '\n')
49 48
49 def clevertest(s, cmd):
50 if '\0' in s: return False
51 return True
52
50 def cleverdecode(s, cmd, **kwargs): 53 def cleverdecode(s, cmd, **kwargs):
51 if util.binary(s): 54 if clevertest(s, cmd):
52 return s 55 return dumbdecode(s, cmd, **kwargs)
53 return dumbdecode(s, cmd, **kwargs) 56 return s
54 57
55 def cleverencode(s, cmd): 58 def cleverencode(s, cmd):
56 if util.binary(s): 59 if clevertest(s, cmd):
57 return s 60 return dumbencode(s, cmd)
58 return dumbencode(s, cmd) 61 return s
59 62
60 _filters = { 63 _filters = {
61 'dumbdecode:': dumbdecode, 64 'dumbdecode:': dumbdecode,
62 'dumbencode:': dumbencode, 65 'dumbencode:': dumbencode,
63 'cleverdecode:': cleverdecode, 66 'cleverdecode:': cleverdecode,
70 c = repo.changectx(rev) 73 c = repo.changectx(rev)
71 for f in c.files(): 74 for f in c.files():
72 if f not in c: 75 if f not in c:
73 continue 76 continue
74 data = c[f].data() 77 data = c[f].data()
75 if not util.binary(data) and '\r\n' in data: 78 if '\0' not in data and '\r\n' in data:
76 if not halt: 79 if not halt:
77 ui.warn(_('Attempt to commit or push text file(s) ' 80 ui.warn(_('Attempt to commit or push text file(s) '
78 'using CRLF line endings\n')) 81 'using CRLF line endings\n'))
79 ui.warn(_('in %s: %s\n') % (short(c.node()), f)) 82 ui.warn(_('in %s: %s\n') % (short(c.node()), f))
80 halt = True 83 halt = True