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

Re: Use a *real* built-in diff generator

From
Linus Torvalds <torvalds@osdl.org>
Date
Mar 25, 2006, 18:39 UTC
Message-ID
<Pine.LNX.4.64.0603251030340.15714@g5.osdl.org>
In-Reply-To
<Pine.LNX.4.64.0603251009500.11968@alien.or.mcafeemobile.com>
On Sat, 25 Mar 2006, Davide Libenzi wrote:
Show 7 quoted lines
> 
> > Now, to be honest, the real reason I wanted a built-in diff wasn't the
> > speed advantage, but the fact that it's so much more flexible. The lack of
> > fork/exec just allows us to do things that weren't practical before.
> 
> I don't know if git is patch-forkexec sensitive or not, but if it is you can
> take a look at libxdiff's xdl_patch(), or at libifying GNU patch.

I don't need "patch", since I wrote my own anyway. It's just called "apply" instead of "patch".

Doing "apply" is not only much simpler than doing "diff", but I needed my own much earlier: it's much more timing-critical for me (applying 200 patches in one go), and git needed something that could honor renames and copies, and the mode bits too.

Besides, I hate how GNU patch bends over backwards in applying crap that isn't a proper patch at all (whitespace-corruption, you name it: GNU patch will accept it). Also, I made "git-apply" be all-or-nothing: either it applies the _whole_ patch (across many different files) or it applies none of it. With GNU patch, if you get an error on the fifth file, the four first files have been modified already - aarrgghhh..

See "apply.c" for details if you care. It's stupid, but it works (and it _only_ handles unified diffs - with the git extensions, of course).

(I also absolutely hate the GNU coding standards, so I'd be very unlikely to libify any of the FSF projects. With libxdiff, I can actually read the code: it may be a bit dense at times, but at least the code is written to be readable, unlike most FSF projects).

			Linus
Previous: Davide LibenziNext: Davide Libenzi
Message 13 of 22 in “Use a *real* built-in diff generator”
  1. Linus TorvaldsMar 25, 2006
  2. Junio C HamanoMar 25, 2006
  3. Junio C HamanoMar 25, 2006
  4. Linus TorvaldsMar 25, 2006
  5. Davide LibenziMar 25, 2006
  6. Marco CostalbaMar 25, 2006
  7. Alex RiesenMar 25, 2006
  8. Linus TorvaldsMar 25, 2006
  9. Morten WelinderMar 25, 2006
  10. Linus TorvaldsMar 25, 2006
  11. Linus TorvaldsMar 25, 2006
  12. Davide LibenziMar 25, 2006
  13. Linus TorvaldsMar 25, 2006
  14. Davide LibenziMar 26, 2006
  15. Ralf BaechleMar 26, 2006
  16. Petr BaudisMar 26, 2006
  17. Linus TorvaldsMar 25, 2006
  18. Davide LibenziMar 26, 2006
  19. Junio C HamanoMar 25, 2006
  20. Junio C HamanoMar 25, 2006
  21. Linus TorvaldsMar 25, 2006
  22. Linus TorvaldsMar 25, 2006

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.