tests/test-update-issue1456.t
wrapfunction: use functools.partial if possible
Every `extensions.bind` call inserts a frame in traceback:
... in closure
return func(*(args + a), **kw)
which makes traceback noisy.
The Python stdlib has a `functools.partial` which is backed by C code and
does not pollute traceback. However it does not support instancemethod and
sets `args` attribute which could be problematic for alias handling.
This patch makes `wrapfunction` use `functools.partial` if we are wrapping a
function directly exported by a module (so it's impossible to be a class or
instance method), and special handles `wrapfunction` results so alias
handling code could handle `args` just fine.
As an example, `hg rebase -s . -d . --traceback` got 6 lines removed in my
setup:
File "hg/mercurial/dispatch.py", line 898, in _dispatch
cmdpats, cmdoptions)
-File "hg/mercurial/extensions.py", line 333, in closure
- return func(*(args + a), **kw)
File "hg/hgext/journal.py", line 84, in runcommand
return orig(lui, repo, cmd, fullargs, *args)
-File "hg/mercurial/extensions.py", line 333, in closure
- return func(*(args + a), **kw)
File "fb-hgext/hgext3rd/fbamend/hiddenoverride.py", line 119, in runcommand
result = orig(lui, repo, cmd, fullargs, *args)
File "hg/mercurial/dispatch.py", line 660, in runcommand
ret = _runcommand(ui, options, cmd, d)
-File "hg/mercurial/extensions.py", line 333, in closure
- return func(*(args + a), **kw)
File "hg/hgext/pager.py", line 69, in pagecmd
return orig(ui, options, cmd, cmdfunc)
....
Differential Revision: https://phab.mercurial-scm.org/D632
#require execbit
$ rm -rf a
$ hg init a
$ cd a
$ echo foo > foo
$ hg ci -qAm0
$ echo toremove > toremove
$ echo todelete > todelete
$ chmod +x foo toremove todelete
$ hg ci -qAm1
Test that local removed/deleted, remote removed works with flags
$ hg rm toremove
$ rm todelete
$ hg co -q 0
$ echo dirty > foo
$ hg up -c
abort: uncommitted changes
[255]
$ hg up -q
$ cat foo
dirty
$ hg st -A
M foo
C todelete
C toremove
Validate update of standalone execute bit change:
$ hg up -C 0
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ chmod -x foo
$ hg ci -m removeexec
nothing changed
[1]
$ hg up -C 0
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg up
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg st
$ cd ..