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
# test that a commit clears the merge state.
hg init repo
cd repo
echo foo > file
hg commit -Am 'add file'
echo bar >> file
hg commit -Am 'append bar'
echo % create a second head
hg up -C 0
echo baz >> file
hg commit -Am 'append baz'
echo % failing merge
HGMERGE=internal:fail hg merge
echo resolved > file
hg resolve -m file
hg commit -m 'resolved'
echo % resolve -l, should be empty
hg resolve -l