Files
git/Documentation
Derrick Stolee 190a65f9db sparse-checkout: respect core.ignoreCase in cone mode
When a user uses the sparse-checkout feature in cone mode, they
add patterns using "git sparse-checkout set <dir1> <dir2> ..."
or by using "--stdin" to provide the directories line-by-line over
stdin. This behaviour naturally looks a lot like the way a user
would type "git add <dir1> <dir2> ..."

If core.ignoreCase is enabled, then "git add" will match the input
using a case-insensitive match. Do the same for the sparse-checkout
feature.

Perform case-insensitive checks while updating the skip-worktree
bits during unpack_trees(). This is done by changing the hash
algorithm and hashmap comparison methods to optionally use case-
insensitive methods.

When this is enabled, there is a small performance cost in the
hashing algorithm. To tease out the worst possible case, the
following was run on a repo with a deep directory structure:

	git ls-tree -d -r --name-only HEAD |
		git sparse-checkout set --stdin

The 'set' command was timed with core.ignoreCase disabled or
enabled. For the repo with a deep history, the numbers were

	core.ignoreCase=false: 62s
	core.ignoreCase=true:  74s (+19.3%)

For reproducibility, the equivalent test on the Linux kernel
repository had these numbers:

	core.ignoreCase=false: 3.1s
	core.ignoreCase=true:  3.6s (+16%)

Now, this is not an entirely fair comparison, as most users
will define their sparse cone using more shallow directories,
and the performance improvement from eb42feca97 ("unpack-trees:
hash less in cone mode" 2019-11-21) can remove most of the
hash cost. For a more realistic test, drop the "-r" from the
ls-tree command to store only the first-level directories.
In that case, the Linux kernel repository takes 0.2-0.25s in
each case, and the deep repository takes one second, plus or
minus 0.05s, in each case.

Thus, we _can_ demonstrate a cost to this change, but it is
unlikely to matter to any reasonable sparse-checkout cone.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-12-13 12:01:02 -08:00
..
2019-11-22 16:11:44 +09:00
2019-11-10 18:02:17 +09:00
2019-05-09 00:37:27 +09:00
2019-10-15 13:48:00 +09:00
2018-06-25 13:22:36 -07:00
2019-11-22 16:11:43 +09:00
2019-01-23 11:37:29 -08:00
2019-08-07 12:37:33 -07:00
2019-01-23 11:37:29 -08:00
2019-08-11 17:40:07 -07:00
2019-08-11 17:40:07 -07:00
2019-04-02 13:57:00 +09:00
2019-08-11 17:40:07 -07:00
2019-08-05 12:39:39 -07:00
2019-01-23 11:37:29 -08:00
2019-03-18 14:45:21 +09:00
2019-07-11 15:16:48 -07:00
2019-08-06 13:05:39 -07:00
2019-04-02 13:57:00 +09:00
2018-12-26 14:59:37 -08:00
2019-05-07 13:04:48 +09:00
2019-05-07 13:04:48 +09:00
2019-05-07 13:04:48 +09:00
2019-04-02 13:57:00 +09:00
2019-11-10 18:02:11 +09:00