git/builtin
Ævar Arnfjörð Bjarmason e5cdbd5f70 gc: convert to using the_hash_algo
There's been a lot of changing of the hardcoded "40" values to
the_hash_algo->hexsz, but we've so far missed this one where we
hardcoded 38 for the loose object file length.

This is because a SHA-1 like abcde[...] gets turned into
objects/ab/cde[...]. There's no reason to suppose the same won't be
the case for SHA-256, and reading between the lines in
hash-function-transition.txt the format is planned to be the same.

In the future we may want to further modify this code for the hash
function transition. There's a potential pathological case here where
we'll only consider the loose objects for the currently active hash,
but objects for that hash will share a directory storage with the
other hash.

Thus we could theoretically have e.g. 1k SHA-1 loose objects, and 1
million SHA-256 objects. Then not notice that we need to pack them
because we're currently using SHA-1, even though our FS may be
straining under the stress of such humongous directories.

So assuming that "gc" eventually learns to pack up both SHA-1 and
SHA-256 objects regardless of what the current the_hash_algo is,
perhaps this check should be changed to consider all files in
objects/17/ matching [0-9a-f] 38 or 62 characters in length (i.e. both
SHA-1 and SHA-256).

But none of that is something we need to worry about now, and
supporting both 38 and 62 characters depending on "the_hash_algo"
removes another case of SHA-1 hardcoding.

As noted in [1] I'm making no effort to somehow remove the hardcoding
for "2" as in "use the first two hexdigits for the directory
name". There's no indication that that'll ever change, and somehow
generalizing it here would be a drop in the ocean, so there's no point
in doing that. It also couldn't be done without coming up with some
generalized version of the magical "objects/17" directory. See [2] for
a discussion of that directory.

1. https://public-inbox.org/git/874l84ber7.fsf@evledraar.gmail.com/

2. https://public-inbox.org/git/87k1mta9x5.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-03-18 15:09:39 +09:00
..
add.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
am.c Merge branch 'nd/completion-more-parameters' 2019-03-07 09:59:58 +09:00
annotate.c
apply.c apply.c: make init_apply_state() take a struct repository 2018-08-13 14:14:44 -07:00
archive.c pack-protocol.txt: accept error packets in any context 2019-01-02 13:05:30 -08:00
bisect--helper.c Fix typos in translatable strings for v2.21.0 2019-02-11 12:58:06 -08:00
blame.c Merge branch 'nd/diff-parseopt' 2019-03-07 09:59:52 +09:00
branch.c Merge branch 'du/branch-show-current' 2019-03-07 09:59:54 +09:00
bundle.c create_bundle(): drop unused "header" parameter 2019-01-24 12:35:44 -08:00
cat-file.c Merge branch 'jk/loose-object-cache-oid' 2019-02-06 22:05:27 -08:00
check-attr.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
check-ignore.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
check-mailmap.c
check-ref-format.c
checkout-index.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
checkout.c Merge branch 'jh/trace2' 2019-03-07 09:59:56 +09:00
clean.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
clone.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
column.c
commit-graph.c commit-graph: rename "large edges" to "extra edges" 2019-01-22 11:33:46 -08:00
commit-tree.c commit-tree: add missing --gpg-sign flag 2019-01-22 11:08:35 -08:00
commit.c Merge branch 'nd/completion-more-parameters' 2019-03-07 09:59:58 +09:00
config.c Merge branch 'jk/save-getenv-result' 2019-01-29 12:47:54 -08:00
count-objects.c rename "alternate_object_database" to "object_directory" 2018-11-13 14:22:02 +09:00
credential.c
describe.c Merge branch 'ss/describe-dirty-in-the-right-directory' 2019-02-06 22:05:29 -08:00
diff-files.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
diff-index.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
diff-tree.c Merge branch 'en/combined-all-paths' 2019-03-07 09:59:54 +09:00
diff.c Merge branch 'jk/diff-no-index-initialize' 2019-03-07 09:59:59 +09:00
difftool.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
fast-export.c Merge branch 'en/fast-export-import' 2019-01-04 13:33:33 -08:00
fetch-pack.c Merge branch 'jt/fetch-v2-sideband' 2019-02-05 14:26:11 -08:00
fetch.c Fix typos in translatable strings for v2.21.0 2019-02-11 12:58:06 -08:00
fmt-merge-msg.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
for-each-ref.c
fsck.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
gc.c gc: convert to using the_hash_algo 2019-03-18 15:09:39 +09:00
get-tar-commit-id.c
grep.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
hash-object.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
help.c completion: add more parameter value completion 2019-02-20 12:31:56 -08:00
index-pack.c convert has_sha1_file() callers to has_object_file() 2019-01-08 09:41:06 -08:00
init-db.c Merge branch 'jk/save-getenv-result' 2019-01-29 12:47:54 -08:00
interpret-trailers.c assert NOARG/NONEG behavior of parse-options callbacks 2018-11-06 12:56:29 +09:00
log.c completion: add more parameter value completion 2019-02-20 12:31:56 -08:00
ls-files.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
ls-remote.c Merge branch 'jk/proto-v2-ref-prefix-fix' 2018-11-13 22:37:17 +09:00
ls-tree.c Merge branch 'nd/attr-pathspec-in-tree-walk' 2019-01-14 15:29:28 -08:00
mailinfo.c
mailsplit.c
merge-base.c Merge branch 'pk/rebase-in-c-4-opts' 2018-11-02 11:04:55 +09:00
merge-file.c assert NOARG/NONEG behavior of parse-options callbacks 2018-11-06 12:56:29 +09:00
merge-index.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
merge-ours.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
merge-recursive.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
merge-tree.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
merge.c Merge branch 'nd/diff-parseopt' 2019-03-07 09:59:52 +09:00
mktag.c
mktree.c builtin/mktree: remove hard-coded constant 2018-10-15 12:53:15 +09:00
multi-pack-index.c multi-pack-index: add 'verify' verb 2018-09-17 13:49:38 -07:00
mv.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
name-rev.c tag: add repository argument to deref_tag 2018-06-29 10:43:39 -07:00
notes.c Merge branch 'nd/the-index' into md/list-objects-filter-by-depth 2019-01-15 15:38:29 -08:00
pack-objects.c trace2:data: pack-objects: add trace2 regions 2019-02-22 15:28:21 -08:00
pack-redundant.c Merge branch 'sc/pack-redundant' 2019-03-07 09:59:54 +09:00
pack-refs.c
patch-id.c
prune-packed.c Merge branch 'rj/prune-packed-excess-args' 2019-03-07 09:59:55 +09:00
prune.c prune: check SEEN flag for reachability 2019-02-14 15:25:33 -08:00
pull.c completion: add more parameter value completion 2019-02-20 12:31:56 -08:00
push.c Merge branch 'nd/style-opening-brace' 2019-01-18 13:49:52 -08:00
range-diff.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
read-tree.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
rebase--interactive.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
rebase.c trace2:data: add subverb for rebase 2019-02-22 15:28:21 -08:00
receive-pack.c Merge branch 'ab/receive-pack-use-after-free-fix' 2019-03-07 09:59:57 +09:00
reflog.c Merge branch 'jk/loose-object-cache-oid' 2019-02-06 22:05:27 -08:00
remote-ext.c
remote-fd.c
remote.c Merge branch 'ms/remote-error-message-update' 2018-09-24 10:30:52 -07:00
repack.c Merge branch 'js/gc-repack-close-before-remove' 2019-01-18 13:49:57 -08:00
replace.c completion: add more parameter value completion 2019-02-20 12:31:56 -08:00
rerere.c Merge branch 'nd/the-index' into md/list-objects-filter-by-depth 2019-01-15 15:38:29 -08:00
reset.c trace2:data: add subverb to reset command 2019-02-22 15:28:21 -08:00
rev-list.c Merge branch 'ds/push-sparse-tree-walk' 2019-02-06 22:05:25 -08:00
rev-parse.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
revert.c Merge branch 'nd/the-index' 2019-01-04 13:33:33 -08:00
rm.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
send-pack.c pack-protocol.txt: accept error packets in any context 2019-01-02 13:05:30 -08:00
serve.c
shortlog.c Merge branch 'nd/show-gitcomp-compilation-fix' into maint 2018-12-15 12:24:33 +09:00
show-branch.c assert NOARG/NONEG behavior of parse-options callbacks 2018-11-06 12:56:29 +09:00
show-index.c make show-index a builtin 2018-05-29 00:28:22 +09:00
show-ref.c convert has_sha1_file() callers to has_object_file() 2019-01-08 09:41:06 -08:00
stripspace.c stripspace: allow -s/-c outside git repository 2018-12-26 15:41:47 -08:00
submodule--helper.c trace2: create new combined trace facility 2019-02-22 15:27:59 -08:00
symbolic-ref.c
tag.c assert NOARG/NONEG behavior of parse-options callbacks 2018-11-06 12:56:29 +09:00
unpack-file.c
unpack-objects.c convert "hashcmp() != 0" to "!hasheq()" 2018-08-29 11:32:49 -07:00
update-index.c Merge branch 'nd/diff-parseopt' 2019-03-07 09:59:52 +09:00
update-ref.c update-ref: allow --no-deref with --stdin 2018-09-12 15:17:17 -07:00
update-server-info.c
upload-archive.c archive: initialize archivers earlier 2018-10-26 10:17:59 +09:00
upload-pack.c check_replace_refs: rename to read_replace_refs 2018-07-18 15:45:14 -07:00
var.c
verify-commit.c commit: add repository argument to lookup_commit 2018-06-29 10:43:39 -07:00
verify-pack.c
verify-tag.c
worktree.c trace2:data: add trace2 hook classification 2019-02-22 15:28:21 -08:00
write-tree.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00