Show More
@@ -127,6 +127,56 b' filters = {' | |||||
127 | 'cleverdecode:': tocrlf |
|
127 | 'cleverdecode:': tocrlf | |
128 | } |
|
128 | } | |
129 |
|
129 | |||
|
130 | class eolfile(object): | |||
|
131 | def __init__(self, ui, root, data): | |||
|
132 | self._decode = {'LF': 'to-lf', 'CRLF': 'to-crlf', 'BIN': 'is-binary'} | |||
|
133 | self._encode = {'LF': 'to-lf', 'CRLF': 'to-crlf', 'BIN': 'is-binary'} | |||
|
134 | ||||
|
135 | self.cfg = config.config() | |||
|
136 | # Our files should not be touched. The pattern must be | |||
|
137 | # inserted first override a '** = native' pattern. | |||
|
138 | self.cfg.set('patterns', '.hg*', 'BIN') | |||
|
139 | # We can then parse the user's patterns. | |||
|
140 | self.cfg.parse('.hgeol', data) | |||
|
141 | ||||
|
142 | isrepolf = self.cfg.get('repository', 'native') != 'CRLF' | |||
|
143 | self._encode['NATIVE'] = isrepolf and 'to-lf' or 'to-crlf' | |||
|
144 | iswdlf = ui.config('eol', 'native', os.linesep) in ('LF', '\n') | |||
|
145 | self._decode['NATIVE'] = iswdlf and 'to-lf' or 'to-crlf' | |||
|
146 | ||||
|
147 | include = [] | |||
|
148 | exclude = [] | |||
|
149 | for pattern, style in self.cfg.items('patterns'): | |||
|
150 | key = style.upper() | |||
|
151 | if key == 'BIN': | |||
|
152 | exclude.append(pattern) | |||
|
153 | else: | |||
|
154 | include.append(pattern) | |||
|
155 | # This will match the files for which we need to care | |||
|
156 | # about inconsistent newlines. | |||
|
157 | self.match = match.match(root, '', [], include, exclude) | |||
|
158 | ||||
|
159 | def setfilters(self, ui): | |||
|
160 | for pattern, style in self.cfg.items('patterns'): | |||
|
161 | key = style.upper() | |||
|
162 | try: | |||
|
163 | ui.setconfig('decode', pattern, self._decode[key]) | |||
|
164 | ui.setconfig('encode', pattern, self._encode[key]) | |||
|
165 | except KeyError: | |||
|
166 | ui.warn(_("ignoring unknown EOL style '%s' from %s\n") | |||
|
167 | % (style, self.cfg.source('patterns', pattern))) | |||
|
168 | ||||
|
169 | def parseeol(ui, repo, node=None): | |||
|
170 | try: | |||
|
171 | if node is None: | |||
|
172 | # Cannot use workingctx.data() since it would load | |||
|
173 | # and cache the filters before we configure them. | |||
|
174 | data = repo.wfile('.hgeol').read() | |||
|
175 | else: | |||
|
176 | data = repo[node]['.hgeol'].data() | |||
|
177 | return eolfile(ui, repo.root, data) | |||
|
178 | except (IOError, LookupError): | |||
|
179 | return None | |||
130 |
|
180 | |||
131 | def hook(ui, repo, node, hooktype, **kwargs): |
|
181 | def hook(ui, repo, node, hooktype, **kwargs): | |
132 | """verify that files have expected EOLs""" |
|
182 | """verify that files have expected EOLs""" | |
@@ -153,7 +203,7 b' def hook(ui, repo, node, hooktype, **kwa' | |||||
153 | def preupdate(ui, repo, hooktype, parent1, parent2): |
|
203 | def preupdate(ui, repo, hooktype, parent1, parent2): | |
154 | #print "preupdate for %s: %s -> %s" % (repo.root, parent1, parent2) |
|
204 | #print "preupdate for %s: %s -> %s" % (repo.root, parent1, parent2) | |
155 | try: |
|
205 | try: | |
156 |
repo. |
|
206 | repo.loadeol(parent1) | |
157 | except error.ParseError, inst: |
|
207 | except error.ParseError, inst: | |
158 | ui.warn(_("warning: ignoring .hgeol file due to parse error " |
|
208 | ui.warn(_("warning: ignoring .hgeol file due to parse error " | |
159 | "at %s: %s\n") % (inst.args[1], inst.args[0])) |
|
209 | "at %s: %s\n") % (inst.args[1], inst.args[0])) | |
@@ -184,62 +234,16 b' def reposetup(ui, repo):' | |||||
184 |
|
234 | |||
185 | class eolrepo(repo.__class__): |
|
235 | class eolrepo(repo.__class__): | |
186 |
|
236 | |||
187 | _decode = {'LF': 'to-lf', 'CRLF': 'to-crlf', 'BIN': 'is-binary'} |
|
237 | def loadeol(self, node=None): | |
188 | _encode = {'LF': 'to-lf', 'CRLF': 'to-crlf', 'BIN': 'is-binary'} |
|
238 | eol = parseeol(self.ui, self, node) | |
189 |
|
239 | if eol is None: | ||
190 | def readhgeol(self, node=None): |
|
|||
191 | try: |
|
|||
192 | if node is None: |
|
|||
193 | # Cannot use workingctx.data() since it would load |
|
|||
194 | # and cache the filters before we configure them. |
|
|||
195 | data = self.wfile('.hgeol').read() |
|
|||
196 | else: |
|
|||
197 | data = self[node]['.hgeol'].data() |
|
|||
198 | except (IOError, LookupError): |
|
|||
199 | return None |
|
240 | return None | |
200 |
|
241 | eol.setfilters(self.ui) | ||
201 | if self.ui.config('eol', 'native', os.linesep) in ('LF', '\n'): |
|
242 | return eol.match | |
202 | self._decode['NATIVE'] = 'to-lf' |
|
|||
203 | else: |
|
|||
204 | self._decode['NATIVE'] = 'to-crlf' |
|
|||
205 |
|
||||
206 | eol = config.config() |
|
|||
207 | # Our files should not be touched. The pattern must be |
|
|||
208 | # inserted first override a '** = native' pattern. |
|
|||
209 | eol.set('patterns', '.hg*', 'BIN') |
|
|||
210 | # We can then parse the user's patterns. |
|
|||
211 | eol.parse('.hgeol', data) |
|
|||
212 |
|
||||
213 | if eol.get('repository', 'native') == 'CRLF': |
|
|||
214 | self._encode['NATIVE'] = 'to-crlf' |
|
|||
215 | else: |
|
|||
216 | self._encode['NATIVE'] = 'to-lf' |
|
|||
217 |
|
||||
218 | for pattern, style in eol.items('patterns'): |
|
|||
219 | key = style.upper() |
|
|||
220 | try: |
|
|||
221 | self.ui.setconfig('decode', pattern, self._decode[key]) |
|
|||
222 | self.ui.setconfig('encode', pattern, self._encode[key]) |
|
|||
223 | except KeyError: |
|
|||
224 | self.ui.warn(_("ignoring unknown EOL style '%s' from %s\n") |
|
|||
225 | % (style, eol.source('patterns', pattern))) |
|
|||
226 |
|
||||
227 | include = [] |
|
|||
228 | exclude = [] |
|
|||
229 | for pattern, style in eol.items('patterns'): |
|
|||
230 | key = style.upper() |
|
|||
231 | if key == 'BIN': |
|
|||
232 | exclude.append(pattern) |
|
|||
233 | else: |
|
|||
234 | include.append(pattern) |
|
|||
235 |
|
||||
236 | # This will match the files for which we need to care |
|
|||
237 | # about inconsistent newlines. |
|
|||
238 | return match.match(self.root, '', [], include, exclude) |
|
|||
239 |
|
243 | |||
240 | def _hgcleardirstate(self): |
|
244 | def _hgcleardirstate(self): | |
241 | try: |
|
245 | try: | |
242 |
self._eolfile = self. |
|
246 | self._eolfile = (self.loadeol() or self.loadeol('tip')) | |
243 | except error.ParseError, inst: |
|
247 | except error.ParseError, inst: | |
244 | ui.warn(_("warning: ignoring .hgeol file due to parse error " |
|
248 | ui.warn(_("warning: ignoring .hgeol file due to parse error " | |
245 | "at %s: %s\n") % (inst.args[1], inst.args[0])) |
|
249 | "at %s: %s\n") % (inst.args[1], inst.args[0])) |
General Comments 0
You need to be logged in to leave comments.
Login now