Mercurial > hg
annotate tests/test-convert-bzr-merges.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 | 90efbd1a2a56 |
children | f84dda152a55 |
rev | line source |
---|---|
12516
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
1 N.B. bzr 1.13 has a bug that breaks this test. If you see this |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
2 test fail, check your bzr version. Upgrading to bzr 1.13.1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
3 should fix it. |
7053 | 4 |
12516
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
5 $ . "$TESTDIR/bzr-definitions" |
8084
5b3fee9c1f4d
Add comment about this test failing under bzr 1.13 due to a bug in bzr.
Greg Ward <greg-hg@gerg.ca>
parents:
7604
diff
changeset
|
6 |
12516
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
7 test multiple merges at once |
7053 | 8 |
12516
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
9 $ mkdir test-multimerge |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
10 $ cd test-multimerge |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
11 $ bzr init -q source |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
12 $ cd source |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
13 $ echo content > file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
14 $ bzr add -q file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
15 $ bzr commit -q -m 'Initial add' |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
16 $ cd .. |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
17 $ bzr branch -q source source-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
18 $ cd source-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
19 $ echo morecontent >> file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
20 $ echo evenmorecontent > file-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
21 $ bzr add -q file-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
22 $ bzr commit -q -m 'Added branch1 file' |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
23 $ cd ../source |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
24 $ sleep 1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
25 $ echo content > file-parent |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
26 $ bzr add -q file-parent |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
27 $ bzr commit -q -m 'Added parent file' |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
28 $ cd .. |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
29 $ bzr branch -q source source-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
30 $ cd source-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
31 $ echo somecontent > file-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
32 $ bzr add -q file-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
33 $ bzr commit -q -m 'Added brach2 file' |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
34 $ sleep 1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
35 $ cd ../source |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
36 $ bzr merge -q ../source-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
37 $ bzr merge -q --force ../source-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
38 $ bzr commit -q -m 'Merged branches' |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
39 $ cd .. |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
40 $ hg convert --datesort source source-hg |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
41 initializing destination source-hg repository |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
42 scanning source... |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
43 sorting... |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
44 converting... |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
45 4 Initial add |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
46 3 Added branch1 file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
47 2 Added parent file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
48 1 Added brach2 file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
49 0 Merged branches |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
50 $ glog -R source-hg |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
51 o 5 "(octopus merge fixup)" files: |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
52 |\ |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
53 | o 4 "Merged branches" files: file-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
54 | |\ |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
55 o---+ 3 "Added brach2 file" files: file-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
56 / / |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
57 | o 2 "Added parent file" files: file-parent |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
58 | | |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
59 o | 1 "Added branch1 file" files: file file-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
60 |/ |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
61 o 0 "Initial add" files: file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
62 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
63 $ manifest source-hg tip |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
64 % manifest of tip |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
65 644 file |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
66 644 file-branch1 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
67 644 file-branch2 |
90efbd1a2a56
tests: unify test-convert-bzr-merges
Matt Mackall <mpm@selenic.com>
parents:
8084
diff
changeset
|
68 644 file-parent |