use 'x is None' instead of 'x == None'
The built-in None object is a singleton and it is therefore safe to
compare memory addresses with is. It is also faster, how much depends
on the object being compared. For a simple type like str I get:
| s = "foo" | s = None
----------+-----------+----------
s == None | 0.25 usec | 0.21 usec
s is None | 0.17 usec | 0.17 usec
#!/bin/sh
hg init t
cd t
echo 1 > foo
hg ci -Am1 # 0
hg branch branchA
echo a1 > foo
hg ci -ma1 # 1
cd ..
hg init tt
cd tt
hg pull ../t
hg up branchA
cd ../t
echo a2 > foo
hg ci -ma2 # 2
echo % create branch B
hg up 0
hg branch branchB
echo b1 > foo
hg ci -mb1 # 3
cd ../tt
echo % a new branch is there
hg pull -u ../t
echo % develop both branch
cd ../t
hg up branchA
echo a3 > foo
hg ci -ma3 # 4
hg up branchB
echo b2 > foo
hg ci -mb2 # 5
cd ../tt
echo % should succeed, no new heads
hg pull -u ../t
echo % add an head on other branch
cd ../t
hg up branchA
echo a4 > foo
hg ci -ma4 # 6
hg up branchB
echo b3.1 > foo
hg ci -m b3.1 # 7
hg up 5
echo b3.2 > foo
hg ci -m b3.2 # 8
cd ../tt
echo % should succeed only one head on our branch
hg pull -u ../t
cd ../t
hg up -C branchA
echo a5.1 > foo
hg ci -ma5.1 # 9
hg up 6
echo a5.2 > foo
hg ci -ma5.2 # 10
hg up 7
echo b4.1 > foo
hg ci -m b4.1 # 11
hg up -C 8
echo b4.2 > foo
hg ci -m b4.2 # 12
cd ../tt
echo % should fail new head in our branch
hg pull -u ../t