git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v1 1/1] correct apply for files commited with CRLF

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 4, 2017, 17:57 UTC
Message-ID
<xmqqini3tdur.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<191dc9ea-6ad3-f754-59da-2075a6fd581e@web.de>
Torsten Bögershausen <tboegi@web.de> writes:
> Back to the fix, the read_old_data() from below works on the working tree,
> yes, but after convert_to_git().
> And that is why we need the index, to fix this very case.

But "git apply" (without "--cached" or "--index") is to work on the working tree file only. The target file of the patch that is going to be modified does not even have to be in the index, i.e. it is perfectly fine to:

 (1) create a file F, commit, then modify that file;
 (2) take two patches out of that repository you did (1);
 (3) go to a Git repository that does not yet know about file F;
 (4) run "git apply" to process the first patch you took in (2),
     which will create file F; then
 (5) run "git apply" to process the second patch on top, which will
     modify file F.

Step (4) will probably not cause too much issue, as the only thing we make sure is "Because the patch creates F, F does not exist in the directory", which would be the case.

Now, when trying to apply the second patch at step (5), we may need to adjust for the broken line-ending convention, but you do not have any entry in the index for F to rely on.

That is why I am saying convert_to_git() that checks the index content is a wrong thing to use in this codepath.

It is OK to use it for "git add" and friends, as the intent of the (I'd say "broken") "safe CRLF" mechanism is to take a hint from the "previous" state to see if CRLF in the "new" content should be munged, and the "previous" in the context of running "git add" _is_ what is in the index.

The "previous" in the context of running "git apply" (which does not look at the index) is _not_ what is in the index, on the other hand. Instead of "struct index_state *", convert_to_git() needs to be fixed to take something else that can be queried for the "previous" version to use as a hint, if "safe CRLF" wants to work correctly.

Previous: Torsten BögershausenNext: Junio C Hamano
Message 8 of 36 in “core.autocrlf=true causes `git apply` to fail on patch generated with `git diff-index HEAD --patch`”
  1. Anthony SottileAug 1, 2017
  2. Torsten BögershausenAug 1, 2017
  3. Anthony SottileAug 1, 2017
  4. Torsten BögershausenAug 2, 2017
  5. 1/1 correct apply for files commited with CRLFtboegi@web.de, Aug 2, 2017
  6. Junio C HamanoAug 2, 2017
  7. Torsten BögershausenAug 4, 2017
  8. Junio C HamanoAug 4, 2017
  9. Junio C HamanoAug 4, 2017
  10. Junio C HamanoAug 2, 2017
  11. Torsten BögershausenAug 12, 2017
  12. Torsten BögershausenAug 12, 2017
  13. convert: Add SAFE_CRLF_KEEP_CRLFtboegi@web.de, Aug 12, 2017
  14. File commited with CRLF should roundtrip diff and applytboegi@web.de, Aug 12, 2017
  15. Junio C HamanoAug 14, 2017
  16. 1/2 convert: Add SAFE_CRLF_KEEP_CRLFtboegi@web.de, Aug 17, 2017
  17. 2/2 File commited with CRLF should roundtrip diff and applytboegi@web.de, Aug 17, 2017
  18. Junio C HamanoAug 17, 2017
  19. 1/2 convert: Add SAFE_CRLF_KEEP_CRLFtboegi@web.de, Aug 17, 2017
  20. 2/2 File commited with CRLF should roundtrip diff and applytboegi@web.de, Aug 17, 2017
  21. Junio C HamanoAug 17, 2017
  22. Junio C HamanoAug 17, 2017
  23. 1/2 convert: Add SAFE_CRLF_KEEP_CRLFtboegi@web.de, Aug 19, 2017
  24. 2/2 File commited with CRLF should roundtrip diff and applytboegi@web.de, Aug 19, 2017
  25. 1/2 convert: Add SAFE_CRLF_KEEP_CRLFtboegi@web.de, Aug 13, 2017
  26. 2/2 File commited with CRLF should roundtrip diff and applytboegi@web.de, Aug 13, 2017
  27. 3/2 apply: remove unused member apply_state.flagsJunio C Hamano, Aug 16, 2017
  28. Junio C HamanoAug 16, 2017
  29. 4/2 apply: only pay attention to CRLF in the preimageJunio C Hamano, Aug 16, 2017
  30. 5/2 apply: localize the CRLF business to read_old_data()Junio C Hamano, Aug 16, 2017
  31. 6/2 apply: clarify read_old_data() is about no-index caseJunio C Hamano, Aug 16, 2017
  32. Torsten BögershausenAug 17, 2017
  33. Junio C HamanoAug 17, 2017
  34. Junio C HamanoAug 17, 2017
  35. Torsten BögershausenAug 17, 2017
  36. Junio C HamanoAug 17, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.