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
"$TESTDIR/hghave" execbit || exit 80
hg init repo
cd repo
echo foo > foo
chmod 644 foo
hg ci -qAm '644'
chmod 755 foo
hg ci -qAm '755'
echo '% reverting to rev 0'
hg revert -a -r 0
hg st
hg diff --git