git-commit-vandalism/builtin
Jeff King 3949053617 pack-objects: fix off-by-one in delta-island tree-depth computation
When delta-islands are in use, we need to record the deepest path at
which we find each tree and blob. Our loop to do so counts slashes, so
"foo" is depth 0, "foo/bar" is depth 1, and so on.

However, this neglects root trees, which are represented by the empty
string. Those also have depth 0, but are at a layer above "foo". Thus,
"foo" should be 1, "foo/bar" at 2, and so on. We use this depth to
topo-sort the trees in resolve_tree_islands(). As a result, we may fail
to visit a root tree before the sub-trees it contains, and therefore not
correctly pass down the island marks.

That in turn could lead to missing some delta opportunities (objects are
in the same island, but we didn't realize it) or creating unwanted
cross-island deltas (one object is in an island another isn't, but we
don't realize). In practice, it seems to have only a small effect.  Some
experiments on the real-world git/git fork network at GitHub showed an
improvement of only 0.14% in the resulting clone size.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-21 13:50:28 +09:00
..
add.c Merge branch 'ma/lockfile-cleanup' 2018-05-30 14:04:05 +09:00
am.c Merge branch 'en/dirty-merge-fixes' 2018-08-02 15:30:45 -07:00
annotate.c
apply.c
archive.c
bisect--helper.c
blame.c Merge branch 'is/parsing-line-range' 2018-08-02 15:30:41 -07:00
branch.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
bundle.c
cat-file.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
check-attr.c
check-ignore.c
check-mailmap.c
check-ref-format.c
checkout-index.c
checkout.c Merge branch 'jm/cache-entry-from-mem-pool' 2018-08-02 15:30:43 -07:00
clean.c help: add --config to list all available config 2018-05-29 14:51:28 +09:00
clone.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
column.c column: fix off-by-one default width 2018-05-13 10:45:05 +09:00
commit-graph.c commit-graph: add free_commit_graph 2018-07-17 15:47:48 -07:00
commit-tree.c commit: add repository argument to lookup_commit 2018-06-29 10:43:39 -07:00
commit.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
config.c Merge branch 'tb/config-default' 2018-07-24 14:50:46 -07:00
count-objects.c packfile: convert has_sha1_pack to object_id 2018-05-02 13:59:49 +09:00
credential.c
describe.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
diff-files.c
diff-index.c
diff-tree.c commit: add repository argument to lookup_commit 2018-06-29 10:43:39 -07:00
diff.c tag: add repository argument to deref_tag 2018-06-29 10:43:39 -07:00
difftool.c Merge branch 'jm/cache-entry-from-mem-pool' 2018-08-02 15:30:43 -07:00
fast-export.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
fetch-pack.c Merge branch 'bw/protocol-v2' 2018-05-08 15:59:16 +09:00
fetch.c Merge branch 'jt/fetch-nego-tip' 2018-08-02 15:30:43 -07:00
fmt-merge-msg.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
for-each-ref.c
fsck.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
gc.c Merge branch 'kg/gc-auto-windows-workaround' 2018-08-02 15:30:43 -07:00
get-tar-commit-id.c
grep.c Merge branch 'tb/grep-only-matching' 2018-08-02 15:30:44 -07:00
hash-object.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
help.c Merge branch 'nd/command-list' 2018-06-01 15:06:37 +09:00
index-pack.c blob: add repository argument to lookup_blob 2018-06-29 10:43:38 -07:00
init-db.c Merge branch 'rd/init-typo' 2018-06-01 15:06:40 +09:00
interpret-trailers.c
log.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
ls-files.c Merge branch 'nd/use-opt-int-set-f' 2018-06-01 15:06:38 +09:00
ls-remote.c Merge branch 'bw/server-options' 2018-05-23 14:38:15 +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 mailinfo & mailsplit: check for EOF while parsing 2017-05-08 12:18:19 +09:00
merge-base.c commit: add repository argument to lookup_commit 2018-06-29 10:43:39 -07:00
merge-file.c
merge-index.c
merge-ours.c
merge-recursive.c builtin/merge-recursive: make hash independent 2018-07-16 14:27:39 -07:00
merge-tree.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
merge.c Merge branch 'js/rebase-merge-octopus' 2018-08-02 15:30:44 -07:00
mktag.c object-store: move object access functions to object-store.h 2018-05-16 11:42:03 +09:00
mktree.c object-store: move object access functions to object-store.h 2018-05-16 11:42:03 +09: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 pack-objects: fix off-by-one in delta-island tree-depth computation 2018-11-21 13:50:28 +09:00
pack-redundant.c pack-redundant: convert linked lists to use struct object_id 2018-05-02 13:59:50 +09: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 packfile: convert has_sha1_pack to object_id 2018-05-02 13:59:49 +09:00
prune.c object: add repository argument to lookup_object 2018-06-29 10:43:38 -07:00
pull.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
push.c transport: convert transport_push to take a struct refspec 2018-05-18 06:19:44 +09:00
read-tree.c lock_file: move static locks into functions 2018-05-10 14:55:40 +09:00
rebase--helper.c rebase -i: introduce --rebase-merges=[no-]rebase-cousins 2018-04-26 12:28:43 +09:00
receive-pack.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
reflog.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
remote-ext.c
remote-fd.c
remote.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
repack.c repack: add delta-islands support 2018-08-16 10:51:17 -07:00
replace.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
rerere.c
reset.c Merge branch 'jm/cache-entry-from-mem-pool' 2018-08-02 15:30:43 -07:00
rev-list.c Merge branch 'sb/object-store-lookup' 2018-08-02 15:30:42 -07:00
rev-parse.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
revert.c
rm.c Merge branch 'ma/lockfile-cleanup' 2018-05-30 14:04:05 +09:00
send-pack.c Merge branch 'ms/send-pack-honor-config' 2018-06-28 12:53:30 -07:00
serve.c serve: introduce git-serve 2018-03-15 12:01:08 -07:00
shortlog.c Merge branch 'ps/contains-id-error-message' 2018-04-10 16:28:20 +09:00
show-branch.c commit: add repository argument to lookup_commit_reference 2018-06-29 10:43:39 -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 Merge branch 'ao/config-from-gitmodules' 2018-07-18 12:20:31 -07:00
symbolic-ref.c refs: rename constant REF_NODEREF to REF_NO_DEREF 2017-11-06 10:31:08 +09:00
tag.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -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 Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
update-index.c Merge branch 'jm/cache-entry-from-mem-pool' 2018-08-02 15:30:43 -07:00
update-ref.c update-ref --stdin: use skip_prefix() 2018-06-04 12:26:01 +09:00
update-server-info.c
upload-archive.c
upload-pack.c Merge branch 'bw/protocol-v2' 2018-05-08 15:59:16 +09: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 checkout: pass the "num_matches" up to callers 2018-06-11 09:41:01 -07:00
write-tree.c cache-tree: convert write_*_as_tree to object_id 2018-03-14 09:23:47 -07:00