Johannes Schindelin <Johannes.Schindelin@xxxxxx> writes: > On Fri, 28 Jul 2006, Junio C Hamano wrote: >> >> A quick comment without looking much at the code. Do you sanely >> bail out when asked to reverse-apply a binary patch? > > Nope. I swap old_sha1_prefix and new_sha1_prefix in that case, I hoped > that is enough? You would need something like this, at least for now, since both deflated literal and deflated delta methods are irreversible. I'll cook up another binary diff output that can go bidirectional. Note that --allow-binary-replacement uses the blob object name recorded on index lines of binary patch, and uses it to cheat (iow, when it knows your version is the old version recorded on index line and your repository happens to have the resulting blob, it just uses the blob without looking at the binary contents recorded in the patch), so you have to work a bit hard to cause it to fail in t/trash repository after you run t4103 test. Resetting to "master", apply BF.diff, and immediately reverse apply BF.diff would _work_, only because "master" and "binary" branch keep both preimage and postimage. -- >8 -- diff --git a/builtin-apply.c b/builtin-apply.c index 6b38a8a..d4381d9 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -1535,6 +1535,12 @@ static int apply_binary_fragment(struct void *data; void *result; + /* Binary patch is irreversible */ + if (patch->is_reverse) + return error("cannot reverse-apply a binary patch to '%s'", + patch->new_name + ? patch->new_name : patch->old_name); + data = inflate_it(fragment->patch, fragment->size, patch->deflate_origlen); if (!data) - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html