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.
EVERYTHING
diff -r ec612a6291f1 alpha/one
--- a/alpha/one
+++ b/alpha/one
@@ -0,0 +1,1 @@
+1
diff -r ec612a6291f1 beta/two
--- a/beta/two
+++ b/beta/two
@@ -0,0 +1,1 @@
+2
BETA ONLY
diff -r ec612a6291f1 beta/two
--- a/beta/two
+++ b/beta/two
@@ -0,0 +1,1 @@
+2
INSIDE BETA
diff -r ec612a6291f1 beta/two
--- a/beta/two
+++ b/beta/two
@@ -0,0 +1,1 @@
+2