Mercurial > hg
annotate tests/test-revlog-group-emptyiter.t @ 14007:d764463b433e
atomictempfile: avoid infinite recursion in __del__().
The problem is that a programmer using atomictempfile directly can
make an innocent everyday mistake -- not enough args to the
constructor -- which escalates badly. You would expect a simple
TypeError crash in that case, but you actually get an infinite
recursion that is surprisingly difficult to kill: it happens between
__del__() and __getattr__(), and Python does not handle infinite
recursion from __del__() well.
The fix is to not implement __getattr__(), but instead assign instance
attributes for the methods we wish to delegate to the builtin file
type: write() and fileno(). I've audited mercurial.* and hgext.* and
found no users of atomictempfile using methods other than write() and
rename(). I audited third-party extensions and found one (snap)
passing an atomictempfile to util.fstat(), so I also threw in
fileno().
The last time I submitted a similar patch, Matt proposed that we make
atomictempfile a subclass of file instead of wrapping it. Rejected on
grounds of unnecessary complexity: for one thing, it would make the
Windows implementation of posixfile quite a bit more complex. It would
have to become a subclass of file rather than a simple function -- but
since it's written in C, this is non-obvious and non-trivial.
Furthermore, there's nothing wrong with wrapping objects and
delegating methods: it's a well-established pattern that works just
fine in many cases. Subclassing is not the answer to all of life's
problems.
author | Greg Ward <greg@gerg.ca> |
---|---|
date | Sun, 24 Apr 2011 19:25:10 -0400 |
parents | 4fee1fd3de9a |
children | f2719b387380 |
rev | line source |
---|---|
12399
4fee1fd3de9a
tests: added a short description to issue numbers
Martin Geisler <mg@aragost.com>
parents:
12328
diff
changeset
|
1 Issue1678: IndexError when pushing |
12328
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
11918
diff
changeset
|
2 |
11918
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
3 setting up base repo |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
4 $ hg init a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
5 $ cd a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
6 $ touch a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
7 $ hg ci -Am a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
8 adding a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
9 $ cd .. |
8635
aaaf4af1c173
revlog: add test for 7659eecd9da2 (issue1678)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
10 |
11918
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
11 cloning base repo |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
12 $ hg clone a b |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
13 updating to branch default |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
14 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
15 $ cd b |
8635
aaaf4af1c173
revlog: add test for 7659eecd9da2 (issue1678)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
16 |
11918
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
17 setting up cset to push |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
18 $ hg up null |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
19 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
20 $ touch a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
21 different msg so we get a clog new entry |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
22 $ hg ci -Am b |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
23 adding a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
24 created new head |
8635
aaaf4af1c173
revlog: add test for 7659eecd9da2 (issue1678)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
25 |
11918
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
26 pushing |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
27 $ hg push -f ../a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
28 pushing to ../a |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
29 searching for changes |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
30 adding changesets |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
31 adding manifests |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
32 adding file changes |
f21ecd091970
tests: unify test-revlog-group-emptyiter
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
8635
diff
changeset
|
33 added 1 changesets with 0 changes to 0 files (+1 heads) |
8635
aaaf4af1c173
revlog: add test for 7659eecd9da2 (issue1678)
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
diff
changeset
|
34 |