git-commit-vandalism/builtin
Jeff King f0eaf63819 sha1-file: use an object_directory for the main object dir
Our handling of alternate object directories is needlessly different
from the main object directory. As a result, many places in the code
basically look like this:

  do_something(r->objects->objdir);

  for (odb = r->objects->alt_odb_list; odb; odb = odb->next)
        do_something(odb->path);

That gets annoying when do_something() is non-trivial, and we've
resorted to gross hacks like creating fake alternates (see
find_short_object_filename()).

Instead, let's give each raw_object_store a unified list of
object_directory structs. The first will be the main store, and
everything after is an alternate. Very few callers even care about the
distinction, and can just loop over the whole list (and those who care
can just treat the first element differently).

A few observations:

  - we don't need r->objects->objectdir anymore, and can just
    mechanically convert that to r->objects->odb->path

  - object_directory's path field needs to become a real pointer rather
    than a FLEX_ARRAY, in order to fill it with expand_base_dir()

  - we'll call prepare_alt_odb() earlier in many functions (i.e.,
    outside of the loop). This may result in us calling it even when our
    function would be satisfied looking only at the main odb.

    But this doesn't matter in practice. It's not a very expensive
    operation in the first place, and in the majority of cases it will
    be a noop. We call it already (and cache its results) in
    prepare_packed_git(), and we'll generally check packs before loose
    objects. So essentially every program is going to call it
    immediately once per program.

    Arguably we should just prepare_alt_odb() immediately upon setting
    up the repository's object directory, which would save us sprinkling
    calls throughout the code base (and forgetting to do so has been a
    source of subtle bugs in the past). But I've stopped short of that
    here, since there are already a lot of other moving parts in this
    patch.

  - Most call sites just get shorter. The check_and_freshen() functions
    are an exception, because they have entry points to handle local and
    nonlocal directories separately.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-13 14:22:03 +09:00
..
add.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
am.c Merge branch 'nd/status-refresh-progress' 2018-10-19 13:34:03 +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 archive: initialize archivers earlier 2018-10-26 10:17:59 +09:00
bisect--helper.c bisect: mention "view" as an alternative to "visualize" 2017-11-13 10:51:14 +09:00
blame.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
branch.c Merge branch 'tq/branch-style-fix' 2018-10-30 15:43:43 +09:00
bundle.c
cat-file.c diff.c: remove the_index dependency in textconv() functions 2018-09-21 09:48:10 -07:00
check-attr.c Make git_check_attr() a void function 2018-09-12 15:15:34 -07:00
check-ignore.c check-ignore: fix mix of directories and other file types 2018-02-12 13:09:35 -08:00
check-mailmap.c
check-ref-format.c Merge branch 'jc/check-ref-format-oor' into maint 2017-11-15 12:04:57 +09:00
checkout-index.c Merge branch 'rs/opt-updates' 2018-08-27 14:33:43 -07:00
checkout.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
clean.c dir.c: remove an implicit dependency on the_index in pathspec code 2018-08-13 14:14:42 -07:00
clone.c Merge branch 'nd/clone-case-smashing-warning' 2018-09-17 13:53:47 -07:00
column.c column: fix off-by-one default width 2018-05-13 10:45:05 +09:00
commit-graph.c Merge branch 'ds/commit-graph-leakfix' 2018-10-19 13:34:07 +09:00
commit-tree.c commit: add repository argument to lookup_commit 2018-06-29 10:43:39 -07:00
commit.c Merge branch 'nd/status-refresh-progress' 2018-10-19 13:34:03 +09:00
config.c Merge branch 'nd/i18n' 2018-08-15 15:08:23 -07: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 'nd/the-index' 2018-10-19 13:34:02 +09:00
diff-files.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
diff-index.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
diff-tree.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
diff.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
difftool.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
fast-export.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
fetch-pack.c builtin/fetch-pack: remove constants with parse_oid_hex 2018-10-15 12:53:15 +09:00
fetch.c Merge branch 'jt/avoid-ls-refs' 2018-10-19 13:34:07 +09:00
fmt-merge-msg.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
for-each-ref.c provide --color option for all ref-filter users 2017-10-04 11:35:29 +09:00
fsck.c sha1-file: use an object_directory for the main object dir 2018-11-13 14:22:03 +09:00
gc.c Merge branch 'jn/gc-auto' 2018-10-16 16:16:02 +09:00
get-tar-commit-id.c distinguish error versus short read from read_in_full() 2017-09-27 15:45:24 +09:00
grep.c sha1-file: use an object_directory for the main object dir 2018-11-13 14:22:03 +09:00
hash-object.c sha1-file.c: remove implicit dependency on the_index 2018-09-21 09:48:11 -07:00
help.c Merge branch 'rv/alias-help' 2018-10-26 14:22:13 +09:00
index-pack.c convert "hashcmp() != 0" to "!hasheq()" 2018-08-29 11:32:49 -07:00
init-db.c pass st.st_size as hint for strbuf_readlink() 2018-07-24 10:19:29 -07:00
interpret-trailers.c interpret-trailers: allow suppressing "---" divider 2018-08-23 10:08:51 -07:00
log.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
ls-files.c ls-files: correct index argument to get_convert_attr_ascii() 2018-08-13 14:14:43 -07:00
ls-remote.c ls-remote: release memory instead of UNLEAK 2018-10-19 11:28:12 +09:00
ls-tree.c object-store: move object access functions to object-store.h 2018-05-16 11:42:03 +09: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
merge-index.c
merge-ours.c Merge branch 'bw/diff-opt-impl-to-bitfields' 2017-11-09 14:31:27 +09:00
merge-recursive.c builtin/merge-recursive: make hash independent 2018-07-16 14:27:39 -07:00
merge-tree.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
merge.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
mktag.c object-store: move object access functions to object-store.h 2018-05-16 11:42:03 +09:00
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 Merge branch 'ma/lockfile-cleanup' 2018-05-30 14:04:05 +09:00
name-rev.c tag: add repository argument to deref_tag 2018-06-29 10:43:39 -07:00
notes.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
pack-objects.c Merge branch 'md/exclude-promisor-objects-fix' 2018-11-06 15:50:21 +09:00
pack-redundant.c treewide: use get_all_packs 2018-08-20 15:31:40 -07:00
pack-refs.c refs: add repository argument to get_main_ref_store 2018-04-12 11:38:56 +09:00
patch-id.c
prune-packed.c for_each_*_object: move declarations to object-store.h 2018-08-14 12:29:57 -07:00
prune.c Merge branch 'md/exclude-promisor-objects-fix' 2018-11-06 15:50:21 +09:00
pull.c submodule.c: remove some of the_repository references 2018-10-22 11:55:33 +09:00
push.c Merge branch 'rs/opt-updates' 2018-08-27 14:33:43 -07:00
range-diff.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
read-tree.c Merge branch 'rs/parse-opt-lithelp' 2018-08-17 13:09:56 -07:00
rebase--interactive.c rebase -i: move rebase--helper modes to rebase--interactive 2018-10-09 10:44:10 +09:00
rebase.c rebase: apply cocci patch 2018-11-02 11:04:59 +09:00
receive-pack.c Merge branch 'jc/receive-deny-current-branch-fix' 2018-10-30 15:43:46 +09:00
reflog.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
remote-ext.c consistently use "fallthrough" comments in switches 2017-09-22 12:49:57 +09:00
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/shallow-and-fetch-prune' 2018-11-06 15:50:18 +09:00
replace.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
rerere.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
reset.c diff.c: reduce implicit dependency on the_index 2018-09-21 09:48:10 -07:00
rev-list.c Merge branch 'md/exclude-promisor-objects-fix' 2018-11-06 15:50:21 +09:00
rev-parse.c commit.h: remove method declarations 2018-07-20 15:38:54 -07:00
revert.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
rm.c convert "oidcmp() != 0" to "!oideq()" 2018-08-29 11:32:49 -07:00
send-pack.c Merge branch 'rs/opt-updates' 2018-08-27 14:33:43 -07:00
serve.c serve: introduce git-serve 2018-03-15 12:01:08 -07:00
shortlog.c revision.c: remove implicit dependency on the_index 2018-09-21 09:51:19 -07:00
show-branch.c convert "hashcmp() != 0" to "!hasheq()" 2018-08-29 11:32:49 -07:00
show-index.c make show-index a builtin 2018-05-29 00:28:22 +09:00
show-ref.c object-store: move object access functions to object-store.h 2018-05-16 11:42:03 +09:00
stripspace.c
submodule--helper.c rename "alternate_object_database" to "object_directory" 2018-11-13 14:22:02 +09:00
symbolic-ref.c refs: rename constant REF_NODEREF to REF_NO_DEREF 2017-11-06 10:31:08 +09:00
tag.c convert "oidcmp() != 0" to "!oideq()" 2018-08-29 11:32:49 -07:00
unpack-file.c object-store: move object access functions to object-store.h 2018-05-16 11:42:03 +09:00
unpack-objects.c convert "hashcmp() != 0" to "!hasheq()" 2018-08-29 11:32:49 -07:00
update-index.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
update-ref.c update-ref: allow --no-deref with --stdin 2018-09-12 15:17:17 -07:00
update-server-info.c parse-options: let OPT__FORCE take optional flags argument 2018-02-09 10:24:50 -08:00
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 ref-filter: use "struct object_id" consistently 2018-04-09 06:14:45 +09:00
worktree.c worktree: delete .git/worktrees if empty after 'remove' 2018-08-30 09:28:02 -07:00
write-tree.c Merge branch 'rs/parse-opt-lithelp' 2018-08-17 13:09:56 -07:00