Mercurial > hg
annotate contrib/casesmash.py @ 23711:1e6fb8db666e
context: avoid breaking already fixed self._status at ctx.status()
Before this patch, "status()" on "workingcommitctx" with "always
match" object causes breaking "self._status" in
"workingctx._buildstatus()", because "workingctx._buildstatus()"
caches the result of "dirstate.status()" into "self._status" for
efficiency, even though it should be fixed at construction for
committing.
For example, template function "diff()" without any patterns in
"committemplate" implies "status()" on "workingcommitctx" with "always
match" object, via "basectx.diff()" and "patch.diff()".
Then, broken "self._status" causes committing unexpected files.
To avoid breaking already fixed "self._status" at "ctx.status()", this
patch overrides "_buildstatus" in "workingcommitctx".
This patch doesn't write out the result of template function "diff()"
in "committemplate" in "test-commit.t", because matching against files
to be committed still has an issue fixed in subsequent patch.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Wed, 31 Dec 2014 17:55:43 +0900 |
parents | 9de689d20230 |
children | 42a7301fb4d5 |
rev | line source |
---|---|
19322
ff1586a3adc5
cleanup: remove unused imports
Simon Heimberg <simohe@besonet.ch>
parents:
14730
diff
changeset
|
1 import os, __builtin__ |
14730 | 2 from mercurial import util |
3 | |
4 def lowerwrap(scope, funcname): | |
5 f = getattr(scope, funcname) | |
6 def wrap(fname, *args, **kwargs): | |
7 d, base = os.path.split(fname) | |
8 try: | |
9 files = os.listdir(d or '.') | |
19378
9de689d20230
cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents:
19322
diff
changeset
|
10 except OSError: |
14730 | 11 files = [] |
12 if base in files: | |
13 return f(fname, *args, **kwargs) | |
14 for fn in files: | |
15 if fn.lower() == base.lower(): | |
16 return f(os.path.join(d, fn), *args, **kwargs) | |
17 return f(fname, *args, **kwargs) | |
18 scope.__dict__[funcname] = wrap | |
19 | |
20 def normcase(path): | |
21 return path.lower() | |
22 | |
23 os.path.normcase = normcase | |
24 | |
25 for f in 'file open'.split(): | |
26 lowerwrap(__builtin__, f) | |
27 | |
28 for f in "chmod chown open lstat stat remove unlink".split(): | |
29 lowerwrap(os, f) | |
30 | |
31 for f in "exists lexists".split(): | |
32 lowerwrap(os.path, f) | |
33 | |
34 lowerwrap(util, 'posixfile') |