diff options
author | Matt Cooper <vtbassmatt@gmail.com> | 2021-11-02 15:46:07 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-11-03 11:22:27 -0700 |
commit | b79541af7a1a7b7f2438f43196b1774d7b71e852 (patch) | |
tree | e2e71ca1ab3e3829a0db9d86697b0bb277bbfefb /builtin/send-pack.c | |
parent | 970fa57f768a276bddbc4bd1450bb1c3feb20f2b (diff) | |
download | git-b79541af7a1a7b7f2438f43196b1774d7b71e852.tar.gz |
t1051: introduce a smudge filter test for extremely large files
The filter system allows for alterations to file contents when they're
added to the database or working tree. ("Smudge" when moving to the
working tree; "clean" when moving to the database.) This is used
natively to handle CRLF to LF conversions. It's also employed by Git-LFS
to replace large files from the working tree with small tracking files
in the repo and vice versa.
Git reads the entire smudged file into memory to convert it into a
"clean" form to be used in-core. While this is inefficient, there's a
more insidious problem on some platforms due to inconsistency between
using unsigned long and size_t for the same type of data (size of a file
in bytes). On most 64-bit platforms, unsigned long is 64 bits, and
size_t is typedef'd to unsigned long. On Windows, however, unsigned long
is only 32 bits (and therefore on 64-bit Windows, size_t is typedef'd to
unsigned long long in order to be 64 bits).
Practically speaking, this means 64-bit Windows users of Git-LFS can't
handle files larger than 2^32 bytes. Other 64-bit platforms don't suffer
this limitation.
This commit introduces a test exposing the issue; future commits make it
pass. The test simulates the way Git-LFS works by having a tiny file
checked into the repository and expanding it to a huge file on checkout.
Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Matt Cooper <vtbassmatt@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/send-pack.c')
0 files changed, 0 insertions, 0 deletions