Mercurial > hg
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 |