patch: support diff data loss detection and upgrade
In worst case, generating diff in upgrade mode can be two times more expensive
than generating it in git mode directly: we may have to regenerate the whole
diff again whenever a git feature is detected. Also, the first diff attempt is
completely buffered instead of being streamed. That said, even without having
profiled it yet, I am convinced we can fast-path the upgrade mode if necessary
were it to be used in regular diff commands, and not only in mq where avoiding
data loss is worth the price.
#!/bin/sh
hg init 1
echo '[ui]' >> 1/.hg/hgrc
echo 'timeout = 10' >> 1/.hg/hgrc
echo foo > 1/foo
hg --cwd 1 ci -A -m foo
hg clone 1 2
hg clone 2 3
echo '[hooks]' >> 2/.hg/hgrc
echo 'changegroup.push = hg push -qf ../1' >> 2/.hg/hgrc
echo bar >> 3/foo
hg --cwd 3 ci -m bar
hg --cwd 3 push ../2