patchutils icon indicating copy to clipboard operation
patchutils copied to clipboard

File moves are ignored by filterdiff

Open jdm opened this issue 7 years ago • 20 comments

A diff like:

diff --git a/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order.html b/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order-new.html
similarity index 100%
rename from tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order.html
rename to tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order-new.html

gets excluded when I run filterdiff -p 1 -i tests/wpt/web-platform-tests.

jdm avatar Feb 07 '18 16:02 jdm

I'm pretty sure the cause is https://github.com/twaugh/patchutils/blob/master/src/filterdiff.c#L1070-L1073.

jdm avatar Feb 07 '18 16:02 jdm

can you post the diff file or a kind of sample please ?

sergiomb2 avatar Feb 07 '18 16:02 sergiomb2

More specifically, with this diff:

diff --git a/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order.html b/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order-new.html
similarity index 100%
rename from tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order.html
rename to tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order-new.html
diff --git a/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.scale.large.html b/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.scale.large.html
deleted file mode 100644
index 926530d1f7e6..000000000000
--- a/tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.scale.large.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<!-- DO NOT EDIT! This test has been generated by tools/gentest.py. -->
-<title>Canvas test: 2d.transformation.scale.large</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/common/canvas-tests.js"></script>
-<link rel="stylesheet" href="/common/canvas-tests.css">
-<body class="show_output">
-
-<h1>2d.transformation.scale.large</h1>
-<p class="desc">scale() with large scale factors works</p>
-
-<p class="notes">Not really that large at all, but it hits the limits in Firefox.
-<p class="output">Actual output:</p>
-<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
-<p class="output expectedtext">Expected output:<p><img src="/images/green-100x50.png" class="output expected" id="expected" alt="">
-<ul id="d"></ul>
-<script>
-var t = async_test("scale() with large scale factors works");
-_addTest(function(canvas, ctx) {
-
-ctx.fillStyle = '#f00';
-ctx.fillRect(0, 0, 100, 50);
-
-ctx.scale(1e5, 1e5);
-ctx.fillStyle = '#0f0';
-ctx.fillRect(0, 0, 1, 1);
-_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
-
-
-});
-</script>
-

jdm avatar Feb 07 '18 16:02 jdm

filterdiff collects the first five lines, so there are two diff headers, then throws them all out because pat_exclude and verbose are both false at https://github.com/twaugh/patchutils/blob/master/src/filterdiff.c#L1075-L1083.

jdm avatar Feb 07 '18 16:02 jdm

filterdiff [[-i PATTERN] | [--include=PATTERN]] [[-I FILE] | [--include-from-file=FILE]] [[-p n]

what you want with -p -i ? is a syntax error

filterdiff: option requires an argument -- 'p'

cat yourfile | filterdiff works

sergiomb2 avatar Feb 07 '18 16:02 sergiomb2

Sorry, I meant -p 1.

jdm avatar Feb 07 '18 16:02 jdm

If I use -v it is a workaround for this particular diff, but it incorrectly includes moves that do not match the pattern.

jdm avatar Feb 07 '18 16:02 jdm

I don't understood the problem , is the -i ?

sergiomb2 avatar Feb 07 '18 16:02 sergiomb2

The problem is that the diff contains a change to a file (tests/wpt/web-platform-tests/2dcontext/transformations/2d.transformation.order.html) that matches the pattern provided to -i (tests/wpt/web-platform-tests), but the change is not included in the filtered diff.

jdm avatar Feb 07 '18 16:02 jdm

+++ /dev/null

as I understand -i just includes files in diff that match if you just have the delete file , what you except ? Anyway you fail to provide the complete example , I still have to deduce what you mean and what example you use .

sergiomb2 avatar Feb 08 '18 15:02 sergiomb2

I posted the complete example in https://github.com/twaugh/patchutils/issues/22#issuecomment-363819266. When I filter that diff using filterdiff -p 1 -i tests/wpt/web-platform-tests it only shows the file that is removed, and does not include the file that is renamed.

jdm avatar Mar 18 '18 02:03 jdm

I think you expect something that filterdiff does not do , what you are asking to just show the diffs where file name have "tests/wpt/web-platform-tests" So you need your git diff not detect similarity and show the rename files , but the real patch

sergiomb2 avatar Mar 21 '18 01:03 sergiomb2

Why is that not the expected behaviour of filterdiff?

jdm avatar Mar 21 '18 01:03 jdm

you need your git diff not detect similarity and don't try detect renamed files and show the complete patch

sergiomb2 avatar Mar 21 '18 01:03 sergiomb2

My question is why filterdiff should not be modified to accommodate this diff?

jdm avatar Mar 21 '18 02:03 jdm

man filterdiff - extract or exclude diffs from a diff file
if file doesn't not have the diff but have rename from / to , what you expect from filterdiff ?

sergiomb2 avatar Mar 21 '18 19:03 sergiomb2

I think "diff" is generally used to describe more than just the - and + parts of the diff file. I would consider the renaming information an important part of the diff.

jdm avatar Mar 21 '18 19:03 jdm

I just encountered the same problem. @jdm Did you manage to find a workaround for this?

carlfriedrich avatar Feb 25 '22 17:02 carlfriedrich

I no longer remember any of the context for this problem.

jdm avatar Feb 26 '22 17:02 jdm

I'm pretty sure the cause is https://github.com/twaugh/patchutils/blob/master/src/filterdiff.c#L1070-L1073.

I see, we may try not exclude removes and files permissions as mention in #59

sergiomb2 avatar Feb 07 '24 00:02 sergiomb2