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

Re: Git on Windows, CRLF issues

From
Avery Pennarun <apenwarr@gmail.com>
Date
Apr 24, 2008, 16:56 UTC
Message-ID
<32541b130804240956u2ec5817ey7b9652447489bc86@mail.gmail.com>
In-Reply-To
<alpine.DEB.1.00.0804240909220.26553@eeepc-johanness>
On 4/24/08, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
Show 10 quoted lines
>  On Wed, 23 Apr 2008, Avery Pennarun wrote:
>  > What I really want is the equivalent of "dos2unix --recursive *.c *.txt
>  > etc" for all commits.
>
> I start to wonder if "git fast-export --all | my-intelligent-perl-script |
>  git fast-import" would not be a better solution here.
>
>  All you would have to do is to detect when a blob begins, and how long it
>  is, and work with that.  If your trees do not contain any binary files, it
>  should be trivial.

Err, yes... as long as there are no binary files. I'm not so lucky, and life is a little more complex in that case. It also gives no easy way of selectively applying the blob filter based on filename, which is pretty important when you do have some binary files and you're trying to decide whether to run dos2unix.

(In contrast, the *other* objection, which is that the same blob might have multiple filenames, doesn't bother me at all, since I'm sure I don't have any .txt files that were accidentally named .jpg at some point.)

I agree that a working solution based on git-fast-export/git-fast-import should run faster than any of the other proposed solutions, but my version of Jeff's patch is quite fast and it's easy to compose simple command lines that "make simple things simple and hard things possible":

  git-filter-branch --blob-filter dos2unix HEAD
  git-filter-branch --blob-filter 'case "$path" in *.c) expand -8;; *)
cat;; esac' HEAD
It sure beats writing a perl script every time you want to do something.
Jeff wrote:
> But I think the problem then is
> that the blob filter isn't terribly useful. IOW, it is not really a
> separate filter, but rather an optimizing pattern for an index filter,
> so maybe calling it a blob filter is the wrong approach

The problem is that doing an optimization on an index filter is kind of hard for a user to express, and each user will have to implement the caching logic by hand every time. Using --index-filter at all requires extremely high levels of shell and git knowledge.

The fact that the blob transformation might "slightly depend on" the path is not actually very important; fundamentally we're still transforming blobs, not paths. We're just using the filename as a *hint* about what kind of transformation we need to do on that particular blob.

I think the measure of a good idea here is how straightforward it is to express what you want on the command line, and --blob-filter makes it easy to express a certain class of filters.

Have fun,
Avery
Previous: Johannes SchindelinNext: Jeff King
Message 21 of 30 in “Git on Windows, CRLF issues”
  1. Peter KarlssonApr 21, 2008
  2. Johannes SchindelinApr 21, 2008
  3. Avery PennarunApr 21, 2008
  4. Jeff KingApr 22, 2008
  5. Avery PennarunApr 22, 2008
  6. Peter KarlssonApr 23, 2008
  7. Jeff KingApr 23, 2008
  8. Peter KarlssonApr 23, 2008
  9. Johan HerlandApr 23, 2008
  10. Johannes SixtApr 23, 2008
  11. Jeff KingApr 23, 2008
  12. Johannes SchindelinApr 23, 2008
  13. Jeff KingApr 23, 2008
  14. Johannes SixtApr 23, 2008
  15. Jeff KingApr 23, 2008
  16. Johannes SixtApr 23, 2008
  17. Jeff KingApr 23, 2008
  18. Junio C HamanoApr 23, 2008
  19. Avery PennarunApr 23, 2008
  20. Johannes SchindelinApr 24, 2008
  21. Avery PennarunApr 24, 2008
  22. Jeff KingApr 24, 2008
  23. Avery PennarunApr 23, 2008
  24. Johannes SixtApr 24, 2008
  25. Johannes SixtApr 22, 2008
  26. Jakub NarebskiApr 21, 2008
  27. Peter KarlssonApr 22, 2008
  28. Johannes SixtApr 22, 2008
  29. Johannes SixtApr 22, 2008
  30. Peter KarlssonApr 22, 2008

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.