workingctx: correctly compute the flag for noexec filesystems+merge
This bug happens if the filesystem doesn't support exec-bit, during merges,
for example in
24ed7a541f23 on the hg repo.
If f is not in p1, but is in p2 and has the x-bit in p2, since the dirstate is
based on p1, and the FS doesn't support the exec-bit, the dirstate can't
"guess" the right bit.
We instead fix it in workingcontext.flags()/manifest.
#!/bin/sh
hg init
cat > .hg/hgrc <<EOF
[encode]
not.gz = tr [:lower:] [:upper:]
*.gz = gzip -d
[decode]
not.gz = tr [:upper:] [:lower:]
*.gz = gzip
EOF
echo "this is a test" | gzip > a.gz
echo "this is a test" > not.gz
hg add *
hg ci -m "test" -d "1000000 0"
echo %% no changes
hg status
touch *
echo %% no changes
hg status
echo %% check contents in repo are encoded
hg debugdata .hg/store/data/a.gz.d 0
hg debugdata .hg/store/data/not.gz.d 0
echo %% check committed content was decoded
gunzip < a.gz
cat not.gz
rm *
hg co -C
echo %% check decoding of our new working dir copy
gunzip < a.gz
cat not.gz
echo %% check hg cat operation
hg cat a.gz
hg cat --decode a.gz | gunzip
mkdir subdir
cd subdir
hg -R .. cat ../a.gz
hg -R .. cat --decode ../a.gz | gunzip