extdiff: add 3-way diff for merge changesets
This adds 3-way diff for merge changesets (using -c) and for diffing
the working directory context against two parents. To enable it, use
the new magic value '$parent2' in the argument line. In order to work,
your differ must support that the second parent argument is left out;
this will happen in 2-way mode. Default arguments are as before, without
enabling 3-way mode, ensuring backwards compatibility.
This also fixes a problem when diffing a merge changeset with a single
file change. Extdiff would sometimes do the wrong thing in that situation.
dirstate: kill dirstate.granularity config option
The dirstate.granularity configuration parameter was never documented,
it only adds code complexity and it is unneeded.
Adding comments describing forced 'unset' entries.
streamclone: partially encode filename over the wire, not for local read (
issue1847)
(Fixes
issue1847, which was introduced by
810387f59696: stream clone
of a repo with directory named *.d failed: server raises exception
"IOError: [Errno 2] No such file or directory:
/tmp/test/.hg/store/data/foo.d.hg.hg/foo".)