Use patch.patch() when checking for patch availability.
The test is closer to what we want to know. It also makes sense when you deal with patched versions of patch() as most people do under win32.
#!/bin/sh
mkdir r1
cd r1
hg init
mkdir a
echo foo > a/f
hg add a
hg ci -m "a/f == foo"
cd ..
hg clone r1 r2
cd r2
hg mv a b
echo foo1 > b/f
hg ci -m" a -> b, b/f == foo1"
cd ..
cd r1
mkdir a/aa
echo bar > a/aa/g
hg add a/aa
hg ci -m "a/aa/g"
hg pull ../r2
hg merge
hg st -C