Mercurial > hg
annotate hgext/win32text.py @ 31237:1b08aca7870a
vfs: use 'vfs' module directly in 'mercurial.cmdutil'
Now that the 'vfs' classes moved in their own module, lets use the new module
directly. We update code iteratively to help with possible bisect needs in the
future.
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Thu, 02 Mar 2017 13:30:47 +0100 |
parents | d5883fd055c6 |
children | ec7831675867 |
rev | line source |
---|---|
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
1 # win32text.py - LF <-> CRLF/CR translation utilities for Windows/Mac users |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
2 # |
8253
e553fe565c61
win32text: add copyright header
Martin Geisler <mg@lazybytes.net>
parents:
8150
diff
changeset
|
3 # Copyright 2005, 2007-2009 Matt Mackall <mpm@selenic.com> and others |
e553fe565c61
win32text: add copyright header
Martin Geisler <mg@lazybytes.net>
parents:
8150
diff
changeset
|
4 # |
e553fe565c61
win32text: add copyright header
Martin Geisler <mg@lazybytes.net>
parents:
8150
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
7 |
20624
23146e4d9cee
extensions: mark win32text deprecated
Matt Mackall <mpm@selenic.com>
parents:
18054
diff
changeset
|
8 '''perform automatic newline conversion (DEPRECATED) |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
9 |
11269
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
10 Deprecation: The win32text extension requires each user to configure |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
11 the extension again and again for each clone since the configuration |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
12 is not copied when cloning. |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
13 |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
14 We have therefore made the ``eol`` as an alternative. The ``eol`` |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
15 uses a version controlled file for its configuration and each clone |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
16 will therefore use the right settings from the start. |
5f01fd602542
win32text: mark this extension as deprecated
Martin Geisler <mg@aragost.com>
parents:
10263
diff
changeset
|
17 |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
18 To perform automatic newline conversion, use:: |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
19 |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
20 [extensions] |
10112
703db37d186b
hgext: enable extensions without "hgext." prefix in help texts
Martin Geisler <mg@lazybytes.net>
parents:
9217
diff
changeset
|
21 win32text = |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
22 [encode] |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
23 ** = cleverencode: |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
24 # or ** = macencode: |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
25 |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
26 [decode] |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
27 ** = cleverdecode: |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
28 # or ** = macdecode: |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
29 |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
30 If not doing conversion, to make sure you do not commit CRLF/CR by accident:: |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
31 |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
32 [hooks] |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
33 pretxncommit.crlf = python:hgext.win32text.forbidcrlf |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
34 # or pretxncommit.cr = python:hgext.win32text.forbidcr |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
35 |
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
36 To do the same check on a server to prevent CRLF/CR from being |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
37 pushed or pulled:: |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
38 |
9217
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
39 [hooks] |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
40 pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf |
9cdb6964c3a3
win32text: use reST syntax for literal blocks
Martin Geisler <mg@lazybytes.net>
parents:
8936
diff
changeset
|
41 # or pretxnchangegroup.cr = python:hgext.win32text.forbidcr |
8873
e872ef2e6758
help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8253
diff
changeset
|
42 ''' |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
43 |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
44 from __future__ import absolute_import |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
45 |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
46 import re |
7225
59b4ae211584
i18n: import _ instead of gettext
Martin Geisler <mg@daimi.au.dk>
parents:
6750
diff
changeset
|
47 from mercurial.i18n import _ |
29485
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
48 from mercurial.node import ( |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
49 short, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
50 ) |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
51 from mercurial import ( |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
52 util, |
6a98f9408a50
py3: make files use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
26421
diff
changeset
|
53 ) |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
54 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29485
diff
changeset
|
55 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
20624
diff
changeset
|
56 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
20624
diff
changeset
|
57 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
20624
diff
changeset
|
58 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29485
diff
changeset
|
59 testedwith = 'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
12837
diff
changeset
|
60 |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
61 # regexp for single LF without CR preceding. |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
62 re_single_lf = re.compile('(^|[^\r])\n', re.MULTILINE) |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
63 |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
64 newlinestr = {'\r\n': 'CRLF', '\r': 'CR'} |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
65 filterstr = {'\r\n': 'clever', '\r': 'mac'} |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
66 |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
67 def checknewline(s, newline, ui=None, repo=None, filename=None): |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
68 # warn if already has 'newline' in repository. |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
69 # it might cause unexpected eol conversion. |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
70 # see issue 302: |
26420
2fc86d92c4a9
urls: bulk-change BTS urls to new location
Matt Mackall <mpm@selenic.com>
parents:
25829
diff
changeset
|
71 # https://bz.mercurial-scm.org/302 |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
72 if newline in s and ui and filename and repo: |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
73 ui.warn(_('WARNING: %s already has %s line endings\n' |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
74 'and does not need EOL conversion by the win32text plugin.\n' |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
75 'Before your next commit, please reconsider your ' |
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
76 'encode/decode settings in \nMercurial.ini or %s.\n') % |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
77 (filename, newlinestr[newline], repo.join('hgrc'))) |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
78 |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
79 def dumbdecode(s, cmd, **kwargs): |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
80 checknewline(s, '\r\n', **kwargs) |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
81 # replace single LF to CRLF |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
82 return re_single_lf.sub('\\1\r\n', s) |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
83 |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
84 def dumbencode(s, cmd): |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
85 return s.replace('\r\n', '\n') |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
86 |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
87 def macdumbdecode(s, cmd, **kwargs): |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
88 checknewline(s, '\r', **kwargs) |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
89 return s.replace('\n', '\r') |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
90 |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
91 def macdumbencode(s, cmd): |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
92 return s.replace('\r', '\n') |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
93 |
5967
f8ad3b76e923
Provide better context for custom Python encode/decode filters.
Jesse Glick <jesse.glick@sun.com>
parents:
5966
diff
changeset
|
94 def cleverdecode(s, cmd, **kwargs): |
6508
4b2c266bf059
Get rid of reimplementations of util.binary
Bryan O'Sullivan <bos@serpentine.com>
parents:
6484
diff
changeset
|
95 if not util.binary(s): |
6473
9c897ffd3637
Backed out changeset 7f4257b5cbfc
Patrick Mezard <pmezard@gmail.com>
parents:
6247
diff
changeset
|
96 return dumbdecode(s, cmd, **kwargs) |
9c897ffd3637
Backed out changeset 7f4257b5cbfc
Patrick Mezard <pmezard@gmail.com>
parents:
6247
diff
changeset
|
97 return s |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
98 |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
99 def cleverencode(s, cmd): |
6508
4b2c266bf059
Get rid of reimplementations of util.binary
Bryan O'Sullivan <bos@serpentine.com>
parents:
6484
diff
changeset
|
100 if not util.binary(s): |
6473
9c897ffd3637
Backed out changeset 7f4257b5cbfc
Patrick Mezard <pmezard@gmail.com>
parents:
6247
diff
changeset
|
101 return dumbencode(s, cmd) |
9c897ffd3637
Backed out changeset 7f4257b5cbfc
Patrick Mezard <pmezard@gmail.com>
parents:
6247
diff
changeset
|
102 return s |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
103 |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
104 def macdecode(s, cmd, **kwargs): |
6508
4b2c266bf059
Get rid of reimplementations of util.binary
Bryan O'Sullivan <bos@serpentine.com>
parents:
6484
diff
changeset
|
105 if not util.binary(s): |
6484 | 106 return macdumbdecode(s, cmd, **kwargs) |
107 return s | |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
108 |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
109 def macencode(s, cmd): |
6508
4b2c266bf059
Get rid of reimplementations of util.binary
Bryan O'Sullivan <bos@serpentine.com>
parents:
6484
diff
changeset
|
110 if not util.binary(s): |
6484 | 111 return macdumbencode(s, cmd) |
112 return s | |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
113 |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
114 _filters = { |
4859
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
115 'dumbdecode:': dumbdecode, |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
116 'dumbencode:': dumbencode, |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
117 'cleverdecode:': cleverdecode, |
8c5aca855b5d
Correct inadvertent line ending change.
Lee Cantey <lcantey@gmail.com>
parents:
4858
diff
changeset
|
118 'cleverencode:': cleverencode, |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
119 'macdumbdecode:': macdumbdecode, |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
120 'macdumbencode:': macdumbencode, |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
121 'macdecode:': macdecode, |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
122 'macencode:': macencode, |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
123 } |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
124 |
6483
0a803195bb29
win32text: rename forbidcrlforcr() function
Patrick Mezard <pmezard@gmail.com>
parents:
6481
diff
changeset
|
125 def forbidnewline(ui, repo, hooktype, node, newline, **kwargs): |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
126 halt = False |
8150
bbc24c0753a0
util: use built-in set and frozenset
Martin Geisler <mg@lazybytes.net>
parents:
8147
diff
changeset
|
127 seen = set() |
8147
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
128 # we try to walk changesets in reverse order from newest to |
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
129 # oldest, so that if we see a file multiple times, we take the |
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
130 # newest version as canonical. this prevents us from blocking a |
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
131 # changegroup that contains an unacceptable commit followed later |
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
132 # by a commit that fixes the problem. |
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
133 tip = repo['tip'] |
18054
b35e3364f94a
check-code: there must also be whitespace between ')' and operator
Mads Kiilerich <madski@unity3d.com>
parents:
16932
diff
changeset
|
134 for rev in xrange(len(repo) - 1, repo[node].rev() - 1, -1): |
6747
f6c00b17387c
use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents:
6510
diff
changeset
|
135 c = repo[rev] |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
136 for f in c.files(): |
8147
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
137 if f in seen or f not in tip or f not in c: |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
138 continue |
8147
441dc7becd43
win32text: be more careful about rejecting violating changesets
Bryan O'Sullivan <bos@serpentine.com>
parents:
8002
diff
changeset
|
139 seen.add(f) |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
140 data = c[f].data() |
6508
4b2c266bf059
Get rid of reimplementations of util.binary
Bryan O'Sullivan <bos@serpentine.com>
parents:
6484
diff
changeset
|
141 if not util.binary(data) and newline in data: |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
142 if not halt: |
16932
7985a9e2ddce
win32text: lowercase warning message
Martin Geisler <mg@aragost.com>
parents:
16743
diff
changeset
|
143 ui.warn(_('attempt to commit or push text file(s) ' |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
144 'using %s line endings\n') % |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
145 newlinestr[newline]) |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
146 ui.warn(_('in %s: %s\n') % (short(c.node()), f)) |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
147 halt = True |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
148 if halt and hooktype == 'pretxnchangegroup': |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
149 crlf = newlinestr[newline].lower() |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
150 filter = filterstr[newline] |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
151 ui.warn(_('\nTo prevent this mistake in your local repository,\n' |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
152 'add to Mercurial.ini or .hg/hgrc:\n' |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
153 '\n' |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
154 '[hooks]\n' |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
155 'pretxncommit.%s = python:hgext.win32text.forbid%s\n' |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
156 '\n' |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
157 'and also consider adding:\n' |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
158 '\n' |
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
159 '[extensions]\n' |
10132
ebf69364e80f
win32text: do not mention hgext in warning
Martin Geisler <mg@lazybytes.net>
parents:
10112
diff
changeset
|
160 'win32text =\n' |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
161 '[encode]\n' |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
162 '** = %sencode:\n' |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
163 '[decode]\n' |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
164 '** = %sdecode:\n') % (crlf, crlf, filter, filter)) |
5675
a5fe27b83a4a
Issue 882: add standard hook to reject text files with CRLF.
Jesse Glick <jesse.glick@sun.com>
parents:
4859
diff
changeset
|
165 return halt |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
166 |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
167 def forbidcrlf(ui, repo, hooktype, node, **kwargs): |
6483
0a803195bb29
win32text: rename forbidcrlforcr() function
Patrick Mezard <pmezard@gmail.com>
parents:
6481
diff
changeset
|
168 return forbidnewline(ui, repo, hooktype, node, '\r\n', **kwargs) |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
169 |
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
170 def forbidcr(ui, repo, hooktype, node, **kwargs): |
6483
0a803195bb29
win32text: rename forbidcrlforcr() function
Patrick Mezard <pmezard@gmail.com>
parents:
6481
diff
changeset
|
171 return forbidnewline(ui, repo, hooktype, node, '\r', **kwargs) |
6481
e837dded56c7
win32text: Add macencode/macdecode
OHASHI Hideya <ohachige@gmail.com>
parents:
6247
diff
changeset
|
172 |
5966
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
173 def reposetup(ui, repo): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
174 if not repo.local(): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
175 return |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
176 for name, fn in _filters.iteritems(): |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
177 repo.adddatafilter(name, fn) |
11af38a592ae
Register data filters in a localrepo instead of util
Patrick Mezard <pmezard@gmail.com>
parents:
5675
diff
changeset
|
178 |
12837
c82056f2509f
win32text: give deprecation warning
Steve Borho <steve@borho.org>
parents:
11269
diff
changeset
|
179 def extsetup(ui): |
25829
38cf0908bf98
win32text: mark deprecated extension option deprecated
Matt Mackall <mpm@selenic.com>
parents:
25186
diff
changeset
|
180 # deprecated config: win32text.warn |
12837
c82056f2509f
win32text: give deprecation warning
Steve Borho <steve@borho.org>
parents:
11269
diff
changeset
|
181 if ui.configbool('win32text', 'warn', True): |
c82056f2509f
win32text: give deprecation warning
Steve Borho <steve@borho.org>
parents:
11269
diff
changeset
|
182 ui.warn(_("win32text is deprecated: " |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
26420
diff
changeset
|
183 "https://mercurial-scm.org/wiki/Win32TextExtension\n")) |