diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-10-27 23:03:16 +0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-27 23:03:16 +0400 |
commit | a76a326b2af925ab45d2cfffbb6d925763eb6e5d (patch) | |
tree | dc7edc297a107f6dcbdc85957a4108750f8a954a | |
parent | 8debf696380cad2283b4cfaea78962b8d5923149 (diff) | |
parent | 8f41c07f90da5e314cbc428f1e3e936563f7f39d (diff) |
Merge branch 'rs/maint-estimate-cache-size' into maint
* rs/maint-estimate-cache-size:
read-cache.c: fix index memory allocation
-rw-r--r-- | read-cache.c | 6 | ||||
-rwxr-xr-x | t/t7511-status-index.sh | 50 |
2 files changed, 53 insertions, 3 deletions
diff --git a/read-cache.c b/read-cache.c index 01a0e25051..5790a91044 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1249,9 +1249,9 @@ static void convert_from_disk(struct ondisk_cache_entry *ondisk, struct cache_en static inline size_t estimate_cache_size(size_t ondisk_size, unsigned int entries) { - long per_entry; - - per_entry = sizeof(struct cache_entry) - sizeof(struct ondisk_cache_entry); + size_t fix_size_mem = offsetof(struct cache_entry, name); + size_t fix_size_dsk = offsetof(struct ondisk_cache_entry, name); + long per_entry = (fix_size_mem - fix_size_dsk + 7) & ~7; /* * Alignment can cause differences. This should be "alignof", but diff --git a/t/t7511-status-index.sh b/t/t7511-status-index.sh new file mode 100755 index 0000000000..bca359dc1e --- /dev/null +++ b/t/t7511-status-index.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +test_description='git status with certain file name lengths' + +. ./test-lib.sh + +files="0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z" + +check() { + len=$1 + prefix=$2 + + for i in $files + do + : >$prefix$i + done + + test_expect_success "status, filename length $len" " + git add $prefix* && + git status + " + rm $prefix* .git/index +} + +check 1 +check 2 p +check 3 pr +check 4 pre +check 5 pref +check 6 prefi +check 7 prefix +check 8 prefix- +check 9 prefix-p +check 10 prefix-pr +check 11 prefix-pre +check 12 prefix-pref +check 13 prefix-prefi +check 14 prefix-prefix +check 15 prefix-prefix- +check 16 prefix-prefix-p +check 17 prefix-prefix-pr +check 18 prefix-prefix-pre +check 19 prefix-prefix-pref +check 20 prefix-prefix-prefi +check 21 prefix-prefix-prefix +check 22 prefix-prefix-prefix- +check 23 prefix-prefix-prefix-p +check 24 prefix-prefix-prefix-pr + +test_done |