git/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 apply: move lockfile into apply_state 2017-10-06 10:07:18 +09:00
archive.c correct error messages for NULL packet_read_line() 2018-02-08 12:37:30 -08:00
bisect--helper.c bisect: mention "view" as an alternative to "visualize" 2017-11-13 10:51:14 +09:00
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 bundle: use prefix_filename with bundle path 2017-03-21 11:18:41 -07:00
cat-file.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
check-attr.c config: don't include config.h by default 2017-06-15 12:56:22 -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 config: don't include config.h by default 2017-06-15 12:56:22 -07:00
check-ref-format.c Merge branch 'jc/check-ref-format-oor' into maint 2017-11-15 12:04:57 +09:00
checkout-index.c parse-options: let OPT__FORCE take optional flags argument 2018-02-09 10:24:50 -08:00
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 credential: handle invalid arguments earlier 2017-05-30 14:45:03 +09:00
describe.c Merge branch 'sb/object-store-grafts' 2018-07-18 12:20:28 -07:00
diff-files.c submodule: remove gitmodules_config 2017-08-03 13:11:02 -07:00
diff-index.c Merge branch 'ma/builtin-unleak' 2017-10-07 16:27:55 +09:00
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 provide --color option for all ref-filter users 2017-10-04 11:35:29 +09:00
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 distinguish error versus short read from read_in_full() 2017-09-27 15:45:24 +09:00
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 Merge branch 'jk/trailers-parse' 2017-08-26 22:55:04 -07:00
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 prefix_filename: return newly allocated string 2017-03-21 11:18:41 -07:00
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 config: don't include config.h by default 2017-06-15 12:56:22 -07:00
merge-index.c Convert GIT_SHA1_HEXSZ used for allocation to GIT_MAX_HEXSZ 2017-03-26 22:08:21 -07:00
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 '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 config: don't include config.h by default 2017-06-15 12:56:22 -07:00
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 consistently use "fallthrough" comments in switches 2017-09-22 12:49:57 +09:00
remote-fd.c remote-{ext,fd}: print usage message on invalid arguments 2017-05-30 14:45:04 +09:00
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 avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
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 sequencer: improve config handling 2017-12-13 11:15:14 -08:00
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 config: don't include config.h by default 2017-06-15 12:56:22 -07:00
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 parse-options: let OPT__FORCE take optional flags argument 2018-02-09 10:24:50 -08:00
upload-archive.c upload-archive: handle "-h" option early 2017-05-30 14:45:04 +09:00
upload-pack.c Merge branch 'bw/protocol-v2' 2018-05-08 15:59:16 +09:00
var.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
verify-commit.c commit: add repository argument to lookup_commit 2018-06-29 10:43:39 -07:00
verify-pack.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
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