Re: Incorrect behavior from git checkout --patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dave

Thanks for the bug report. I've tried to reproduce it on the latest master, version 2.22.0 and 2.20.1 and am unable to do so. I thought it might be related to a bug I recently fixed[1] but it does not appear to be. I've appended the files I used below just in case I made a mistake translating your patches to files that can be used with git checkout.

Best Wishes

Phillip

[1] https://github.com/git/git/commit/1b074e15d0f976be2bc14f9528874a841c055213#diff-588be9a03d1f7e33db12f186aad5fde9

pre-image

block_one {
line 1
line 2
line 3
2 4 6 8
line 4
line 5
line 6
2 4 6 8
line 7
line 8
line 9
2 4 6 8
line 10
line 11
line 12
}

block_two {
line 1
line 2
line 3
2 5 6 9
line 4
line 5
line 6
2 5 6 9
line 7
line 8
line 9
2 5 6 9
line 10
line 11
line 12
}

post-image

block_one {
line 1
line 1.5
line 2
line 2.5
line 3
2 4 6 8
line 4
line 4.5
line 5
line 5.5
line 6
2 4 6 8
line 7
line 7.5
line 8
line 8.5
line 9
2 4 6 8
line 10
line 10.5
line 11
line 11.5
line 12
}

block_two {
line 1
line 1.5
line 2
line 2.5
line 3
2 5 6 9
line 4
line 4.5
line 5
line 5.5
line 6
2 5 6 9
line 7
line 7.5
line 8
line 8.5
line 9
2 5 6 9
line 10
line 10.5
line 11
line 11.5
line 12
}



On 10/08/2019 21:12, Dave Kaminski wrote:
I am observing git checkout --patch making changes to the wrong lines of a file.

This is with a clean install of git version 2.20.1 on a debian docker
container (image tag 10.0 which is also "latest" as of this writing).

With a diff that looks like the following:

diff --git a/file.txt b/file.txt
index 868aa22..ea4d786 100644
--- a/file.txt
+++ b/file.txt
@@ -1,35 +1,51 @@
  block_one {
  line 1
+line 1.5
  line 2
+line 2.5
  line 3
  2 4 6 8
  line 4
+line 4.5
  line 5
+line 5.5
  line 6
  2 4 6 8
  line 7
+line 7.5
  line 8
+line 8.5
  line 9
  2 4 6 8
  line 10
+line 10.5
  line 11
+line 11.5
  line 12
  }

  block_two {
  line 1
+line 1.5
  line 2
+line 2.5
  line 3
-2 5 6 9
+2 4 6 8
  line 4
+line 4.5
  line 5
+line 5.5
  line 6
-2 5 6 9
+2 4 6 8
  line 7
+line 7.5
  line 8
+line 8.5
  line 9
-2 5 6 9
+2 4 6 8
  line 10
+line 10.5
  line 11
+line 11.5
  line 12
  }

doing a `git checkout --patch -- ./file.txt`, splitting the diff into
hunks, and discarding all of the hunks that begin with numbers, e.g.

@@ -22,3 +32,3 @@
  line 3
-2 5 6 9
+2 4 6 8
  line 4

the expected state of the file in the working directory is this:

diff --git a/file.txt b/file.txt
index 868aa22..9ab67a1 100644
--- a/file.txt
+++ b/file.txt
@@ -1,35 +1,51 @@
  block_one {
  line 1
+line 1.5
  line 2
+line 2.5
  line 3
  2 4 6 8
  line 4
+line 4.5
  line 5
+line 5.5
  line 6
  2 4 6 8
  line 7
+line 7.5
  line 8
+line 8.5
  line 9
  2 4 6 8
  line 10
+line 10.5
  line 11
+line 11.5
  line 12
  }

  block_two {
  line 1
+line 1.5
  line 2
+line 2.5
  line 3
  2 5 6 9
  line 4
+line 4.5
  line 5
+line 5.5
  line 6
  2 5 6 9
  line 7
+line 7.5
  line 8
+line 8.5
  line 9
  2 5 6 9
  line 10
+line 10.5
  line 11
+line 11.5
  line 12
  }

but instead the actual state of the file is this:

diff --git a/file.txt b/file.txt
index 868aa22..76fe65d 100644
--- a/file.txt
+++ b/file.txt
@@ -1,35 +1,51 @@
  block_one {
  line 1
+line 1.5
  line 2
+line 2.5
  line 3
  2 4 6 8
  line 4
+line 4.5
  line 5
+line 5.5
  line 6
  2 4 6 8
  line 7
+line 7.5
  line 8
+line 8.5
  line 9
-2 4 6 8
+2 5 6 9
  line 10
+line 10.5
  line 11
+line 11.5
  line 12
  }

  block_two {
  line 1
+line 1.5
  line 2
+line 2.5
  line 3
  2 5 6 9
  line 4
+line 4.5
  line 5
+line 5.5
  line 6
  2 5 6 9
  line 7
+line 7.5
  line 8
+line 8.5
  line 9
-2 5 6 9
+2 4 6 8
  line 10
+line 10.5
  line 11
+line 11.5
  line 12
  }

See the changes between "line 9" and "line 10" in both blocks that are
not correct.




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux