Revision b16a8277644e4b1d21c08d97de757105039dc7ae authored by Derrick Stolee on 16 September 2020, 18:07:52 UTC, committed by Junio C Hamano on 17 September 2020, 16:31:25 UTC
Commit e3696980 (diff: halt tree-diff early after max_changes,
2020-03-30) intended to create a mechanism to short-circuit a diff
calculation after a certain number of paths were modified. By
incrementing a "num_changes" counter throughout the recursive
ll_diff_tree_paths(), this was supposed to match the number of changes
that would be written into the changed-path Bloom filters.
Unfortunately, this was not implemented correctly and instead misses
simple cases like file modifications. This then does not stop very
large changed-path filters from being written (unless they add or remove
many files).

To start, change the implementation in ll_diff_tree_paths() to instead
use the global diff_queue_diff struct's 'nr' member as the count. This
is a way to simplify the logic instead of making more mistakes in the
complicated diff code.

This has a drawback: the diff_queue_diff struct only lists the paths
corresponding to blob changes, not their leading directories. Thus,
get_or_compute_bloom_filter() needs an additional check to see if the
hashmap with the leading directories becomes too large.

One reason why this was not caught by test cases was that the test in
t4216-log-bloom.sh that was supposed to check this "too many changes"
condition only checked this on the initial commit of a repository. The
old logic counted these values correctly. Update this test in a few
ways:

1. Use GIT_TEST_BLOOM_SETTINGS_MAX_CHANGED_PATHS to reduce the limit,
   allowing smaller commits to engage with this logic.

2. Create several interesting cases of edits, adds, removes, and mode
   changes (in the second commit). By testing both sides of the
   inequality with the *_MAX_CHANGED_PATHS variable, we can see that
   the count is exactly correct, so none of these changes are missed
   or over-counted.

3. Use the trace2 data value filter_found_large to verify that these
   commits are on the correct side of the limit.

Another way to verify the behavior is correct is through performance
tests. By testing on my local copies of the Git repository and the Linux
kernel repository, I could measure the effect of these short-circuits
when computing a fresh commit-graph file with changed-path Bloom filters
using the command

  GIT_TEST_BLOOM_SETTINGS_MAX_CHANGED_PATHS=N time \
    git commit-graph write --reachable --changed-paths

and reporting the wall time and resulting commit-graph size.

For Git, the results are

|        |      N=1       |       N=10     |      N=512     |
|--------|----------------|----------------|----------------|
| HEAD~1 | 10.90s  9.18MB | 11.11s  9.34MB | 11.31s  9.35MB |
| HEAD   |  9.21s  8.62MB | 11.11s  9.29MB | 11.29s  9.34MB |

For Linux, the results are

|        |       N=1      |     N=20      |     N=512     |
|--------|----------------|---------------|---------------|
| HEAD~1 | 61.28s  64.3MB | 76.9s  72.6MB | 77.6s  72.6MB |
| HEAD   | 49.44s  56.3MB | 68.7s  65.9MB | 69.2s  65.9MB |

Naturally, the improvement becomes much less as the limit grows, as
fewer commits satisfy the short-circuit.

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 9a7a9ed
History
File Mode Size
.github
Documentation
block-sha1
builtin
ci
compat
contrib
ewah
git-gui
gitk-git
gitweb
mergetools
negotiator
perl
po
ppc
refs
sha1collisiondetection @ 855827c
sha1dc
sha256
t
templates
trace2
vcs-svn
xdiff
.cirrus.yml -rw-r--r-- 312 bytes
.clang-format -rw-r--r-- 5.0 KB
.editorconfig -rw-r--r-- 288 bytes
.gitattributes -rw-r--r-- 544 bytes
.gitignore -rw-r--r-- 3.4 KB
.gitmodules -rw-r--r-- 153 bytes
.mailmap -rw-r--r-- 16.6 KB
.travis.yml -rw-r--r-- 1.0 KB
.tsan-suppressions -rw-r--r-- 689 bytes
CODE_OF_CONDUCT.md -rw-r--r-- 3.9 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 752 bytes
INSTALL -rw-r--r-- 9.8 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 100.6 KB
README.md -rw-r--r-- 3.2 KB
RelNotes l--------- 33 bytes
abspath.c -rw-r--r-- 6.4 KB
aclocal.m4 -rw-r--r-- 1.4 KB
add-interactive.c -rw-r--r-- 30.2 KB
add-interactive.h -rw-r--r-- 965 bytes
add-patch.c -rw-r--r-- 48.6 KB
advice.c -rw-r--r-- 9.6 KB
advice.h -rw-r--r-- 2.9 KB
alias.c -rw-r--r-- 2.1 KB
alias.h -rw-r--r-- 310 bytes
alloc.c -rw-r--r-- 3.2 KB
alloc.h -rw-r--r-- 527 bytes
apply.c -rw-r--r-- 130.5 KB
apply.h -rw-r--r-- 5.3 KB
archive-tar.c -rw-r--r-- 12.7 KB
archive-zip.c -rw-r--r-- 17.4 KB
archive.c -rw-r--r-- 15.4 KB
archive.h -rw-r--r-- 1.5 KB
argv-array.c -rw-r--r-- 2.2 KB
argv-array.h -rw-r--r-- 2.9 KB
attr.c -rw-r--r-- 28.3 KB
attr.h -rw-r--r-- 6.3 KB
banned.h -rw-r--r-- 796 bytes
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 28.5 KB
bisect.h -rw-r--r-- 2.1 KB
blame.c -rw-r--r-- 83.5 KB
blame.h -rw-r--r-- 5.6 KB
blob.c -rw-r--r-- 461 bytes
blob.h -rw-r--r-- 688 bytes
bloom.c -rw-r--r-- 7.8 KB
bloom.h -rw-r--r-- 3.0 KB
branch.c -rw-r--r-- 10.0 KB
branch.h -rw-r--r-- 3.0 KB
bugreport.c -rw-r--r-- 5.3 KB
builtin.h -rw-r--r-- 11.8 KB
bulk-checkin.c -rw-r--r-- 7.3 KB
bulk-checkin.h -rw-r--r-- 323 bytes
bundle.c -rw-r--r-- 13.1 KB
bundle.h -rw-r--r-- 866 bytes
cache-tree.c -rw-r--r-- 20.8 KB
cache-tree.h -rw-r--r-- 2.1 KB
cache.h -rw-r--r-- 67.5 KB
chdir-notify.c -rw-r--r-- 1.8 KB
chdir-notify.h -rw-r--r-- 2.5 KB
check-builtins.sh -rwxr-xr-x 596 bytes
check_bindir -rwxr-xr-x 374 bytes
checkout.c -rw-r--r-- 1.9 KB
checkout.h -rw-r--r-- 369 bytes
color.c -rw-r--r-- 9.6 KB
color.h -rw-r--r-- 4.8 KB
column.c -rw-r--r-- 9.4 KB
column.h -rw-r--r-- 1.4 KB
combine-diff.c -rw-r--r-- 42.2 KB
command-list.txt -rw-r--r-- 11.4 KB
commit-graph.c -rw-r--r-- 65.2 KB
commit-graph.h -rw-r--r-- 4.7 KB
commit-reach.c -rw-r--r-- 20.0 KB
commit-reach.h -rw-r--r-- 3.8 KB
commit-slab-decl.h -rw-r--r-- 1.4 KB
commit-slab-impl.h -rw-r--r-- 3.1 KB
commit-slab.h -rw-r--r-- 2.5 KB
commit.c -rw-r--r-- 40.7 KB
commit.h -rw-r--r-- 12.7 KB
common-main.c -rw-r--r-- 1.3 KB
config.c -rw-r--r-- 81.5 KB
config.h -rw-r--r-- 21.5 KB
config.mak.dev -rw-r--r-- 1.6 KB
config.mak.in -rw-r--r-- 540 bytes
config.mak.uname -rw-r--r-- 24.2 KB
configure.ac -rw-r--r-- 38.5 KB
connect.c -rw-r--r-- 34.9 KB
connect.h -rw-r--r-- 1.2 KB
connected.c -rw-r--r-- 4.4 KB
connected.h -rw-r--r-- 1.7 KB
convert.c -rw-r--r-- 49.3 KB
convert.h -rw-r--r-- 5.0 KB
copy.c -rw-r--r-- 1.3 KB
credential-cache--daemon.c -rw-r--r-- 6.9 KB
credential-cache.c -rw-r--r-- 3.2 KB
credential-store.c -rw-r--r-- 5.1 KB
credential.c -rw-r--r-- 12.1 KB
credential.h -rw-r--r-- 6.4 KB
csum-file.c -rw-r--r-- 4.1 KB
csum-file.h -rw-r--r-- 1.5 KB
ctype.c -rw-r--r-- 2.6 KB
daemon.c -rw-r--r-- 34.7 KB
date.c -rw-r--r-- 31.5 KB
decorate.c -rw-r--r-- 1.7 KB
decorate.h -rw-r--r-- 1.4 KB
delta-islands.c -rw-r--r-- 11.7 KB
delta-islands.h -rw-r--r-- 572 bytes
delta.h -rw-r--r-- 3.3 KB
detect-compiler -rwxr-xr-x 1016 bytes
diff-delta.c -rw-r--r-- 15.5 KB
diff-lib.c -rw-r--r-- 15.1 KB
diff-no-index.c -rw-r--r-- 7.2 KB
diff.c -rw-r--r-- 190.2 KB
diff.h -rw-r--r-- 19.3 KB
diffcore-break.c -rw-r--r-- 9.3 KB
diffcore-delta.c -rw-r--r-- 5.5 KB
diffcore-order.c -rw-r--r-- 2.4 KB
diffcore-pickaxe.c -rw-r--r-- 6.6 KB
diffcore-rename.c -rw-r--r-- 19.3 KB
diffcore.h -rw-r--r-- 6.6 KB
dir-iterator.c -rw-r--r-- 5.8 KB
dir-iterator.h -rw-r--r-- 4.3 KB
dir.c -rw-r--r-- 95.6 KB
dir.h -rw-r--r-- 16.4 KB
editor.c -rw-r--r-- 3.0 KB
entry.c -rw-r--r-- 14.1 KB
environment.c -rw-r--r-- 11.0 KB
exec-cmd.c -rw-r--r-- 8.0 KB
exec-cmd.h -rw-r--r-- 483 bytes
fast-import.c -rw-r--r-- 92.4 KB
fetch-negotiator.c -rw-r--r-- 503 bytes
fetch-negotiator.h -rw-r--r-- 1.6 KB
fetch-pack.c -rw-r--r-- 54.6 KB
fetch-pack.h -rw-r--r-- 2.9 KB
fmt-merge-msg.c -rw-r--r-- 17.5 KB
fmt-merge-msg.h -rw-r--r-- 420 bytes
fsck.c -rw-r--r-- 32.9 KB
fsck.h -rw-r--r-- 3.2 KB
fsmonitor.c -rw-r--r-- 10.5 KB
fsmonitor.h -rw-r--r-- 2.4 KB
fuzz-commit-graph.c -rw-r--r-- 465 bytes
fuzz-pack-headers.c -rw-r--r-- 309 bytes
fuzz-pack-idx.c -rw-r--r-- 277 bytes
generate-cmdlist.sh -rwxr-xr-x 1.5 KB
generate-configlist.sh -rwxr-xr-x 370 bytes
gettext.c -rw-r--r-- 5.6 KB
gettext.h -rw-r--r-- 2.2 KB
git-add--interactive.perl -rwxr-xr-x 45.9 KB
git-archimport.perl -rwxr-xr-x 36.1 KB
git-bisect.sh -rwxr-xr-x 8.2 KB
git-compat-util.h -rw-r--r-- 35.8 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.8 KB
git-cvsimport.perl -rwxr-xr-x 31.3 KB
git-cvsserver.perl -rwxr-xr-x 159.2 KB
git-difftool--helper.sh -rwxr-xr-x 2.2 KB
git-filter-branch.sh -rwxr-xr-x 16.0 KB
git-instaweb.sh -rwxr-xr-x 21.8 KB
git-merge-octopus.sh -rwxr-xr-x 2.4 KB
git-merge-one-file.sh -rwxr-xr-x 3.6 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 9.0 KB
git-mergetool.sh -rwxr-xr-x 10.1 KB
git-p4.py -rwxr-xr-x 165.0 KB
git-parse-remote.sh -rw-r--r-- 2.6 KB
git-quiltimport.sh -rwxr-xr-x 3.6 KB
git-rebase--preserve-merges.sh -rw-r--r-- 28.9 KB
git-request-pull.sh -rwxr-xr-x 4.0 KB
git-send-email.perl -rwxr-xr-x 56.9 KB
git-sh-i18n.sh -rw-r--r-- 2.4 KB
git-sh-setup.sh -rw-r--r-- 9.1 KB
git-submodule.sh -rwxr-xr-x 24.6 KB
git-svn.perl -rwxr-xr-x 63.1 KB
git-web--browse.sh -rwxr-xr-x 4.3 KB
git.c -rw-r--r-- 26.0 KB
git.rc -rw-r--r-- 635 bytes
gpg-interface.c -rw-r--r-- 11.5 KB
gpg-interface.h -rw-r--r-- 1.6 KB
graph.c -rw-r--r-- 40.0 KB
graph.h -rw-r--r-- 8.6 KB
grep.c -rw-r--r-- 53.8 KB
grep.h -rw-r--r-- 4.9 KB
hash.h -rw-r--r-- 5.3 KB
hashmap.c -rw-r--r-- 7.7 KB
hashmap.h -rw-r--r-- 17.9 KB
help.c -rw-r--r-- 17.9 KB
help.h -rw-r--r-- 3.1 KB
hex.c -rw-r--r-- 4.2 KB
http-backend.c -rw-r--r-- 18.9 KB
http-fetch.c -rw-r--r-- 3.3 KB
http-push.c -rw-r--r-- 50.2 KB
http-walker.c -rw-r--r-- 15.1 KB
http.c -rw-r--r-- 67.1 KB
http.h -rw-r--r-- 7.9 KB
ident.c -rw-r--r-- 15.5 KB
imap-send.c -rw-r--r-- 36.6 KB
interdiff.c -rw-r--r-- 660 bytes
interdiff.h -rw-r--r-- 119 bytes
iterator.h -rw-r--r-- 2.1 KB
json-writer.c -rw-r--r-- 8.5 KB
json-writer.h -rw-r--r-- 4.2 KB
khash.h -rw-r--r-- 12.9 KB
kwset.c -rw-r--r-- 20.6 KB
kwset.h -rw-r--r-- 2.5 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
line-log.c -rw-r--r-- 33.0 KB
line-log.h -rw-r--r-- 1.7 KB
line-range.c -rw-r--r-- 6.6 KB
line-range.h -rw-r--r-- 1.4 KB
linear-assignment.c -rw-r--r-- 4.1 KB
linear-assignment.h -rw-r--r-- 736 bytes
list-objects-filter-options.c -rw-r--r-- 9.8 KB
list-objects-filter-options.h -rw-r--r-- 3.7 KB
list-objects-filter.c -rw-r--r-- 19.0 KB
list-objects-filter.h -rw-r--r-- 3.2 KB
list-objects.c -rw-r--r-- 11.3 KB
list-objects.h -rw-r--r-- 762 bytes
list.h -rw-r--r-- 5.6 KB
ll-merge.c -rw-r--r-- 10.9 KB
ll-merge.h -rw-r--r-- 3.0 KB
lockfile.c -rw-r--r-- 5.6 KB
lockfile.h -rw-r--r-- 11.3 KB
log-tree.c -rw-r--r-- 27.8 KB
log-tree.h -rw-r--r-- 1.5 KB
ls-refs.c -rw-r--r-- 2.7 KB
ls-refs.h -rw-r--r-- 217 bytes
mailinfo.c -rw-r--r-- 27.8 KB
mailinfo.h -rw-r--r-- 1.0 KB
mailmap.c -rw-r--r-- 8.9 KB
mailmap.h -rw-r--r-- 292 bytes
match-trees.c -rw-r--r-- 8.5 KB
mem-pool.c -rw-r--r-- 3.1 KB
mem-pool.h -rw-r--r-- 1.4 KB
merge-blobs.c -rw-r--r-- 2.0 KB
merge-blobs.h -rw-r--r-- 232 bytes
merge-recursive.c -rw-r--r-- 116.1 KB
merge-recursive.h -rw-r--r-- 3.7 KB
merge.c -rw-r--r-- 2.8 KB
mergesort.c -rw-r--r-- 1.5 KB
mergesort.h -rw-r--r-- 574 bytes
midx.c -rw-r--r-- 37.4 KB
midx.h -rw-r--r-- 1.8 KB
name-hash.c -rw-r--r-- 18.8 KB
notes-cache.c -rw-r--r-- 2.3 KB
notes-cache.h -rw-r--r-- 541 bytes
notes-merge.c -rw-r--r-- 22.6 KB
notes-merge.h -rw-r--r-- 2.9 KB
notes-utils.c -rw-r--r-- 5.0 KB
notes-utils.h -rw-r--r-- 1.5 KB
notes.c -rw-r--r-- 37.3 KB
notes.h -rw-r--r-- 12.6 KB
object-store.h -rw-r--r-- 13.9 KB
object.c -rw-r--r-- 13.6 KB
object.h -rw-r--r-- 6.3 KB
oid-array.c -rw-r--r-- 1.9 KB
oid-array.h -rw-r--r-- 3.6 KB
oidmap.c -rw-r--r-- 1.4 KB
oidmap.h -rw-r--r-- 2.3 KB
oidset.c -rw-r--r-- 1.6 KB
oidset.h -rw-r--r-- 2.6 KB
pack-bitmap-write.c -rw-r--r-- 12.7 KB
pack-bitmap.c -rw-r--r-- 35.5 KB
pack-bitmap.h -rw-r--r-- 2.6 KB
pack-check.c -rw-r--r-- 5.5 KB
pack-objects.c -rw-r--r-- 5.0 KB
pack-objects.h -rw-r--r-- 12.2 KB
pack-revindex.c -rw-r--r-- 5.8 KB
pack-revindex.h -rw-r--r-- 322 bytes
pack-write.c -rw-r--r-- 10.6 KB
pack.h -rw-r--r-- 3.3 KB
packfile.c -rw-r--r-- 54.6 KB
packfile.h -rw-r--r-- 6.7 KB
pager.c -rw-r--r-- 5.1 KB
parse-options-cb.c -rw-r--r-- 6.4 KB
parse-options.c -rw-r--r-- 25.4 KB
parse-options.h -rw-r--r-- 13.0 KB
patch-delta.c -rw-r--r-- 2.4 KB
patch-ids.c -rw-r--r-- 3.4 KB
patch-ids.h -rw-r--r-- 704 bytes
path.c -rw-r--r-- 38.2 KB
path.h -rw-r--r-- 5.9 KB
pathspec.c -rw-r--r-- 18.2 KB
pathspec.h -rw-r--r-- 5.0 KB
pkt-line.c -rw-r--r-- 13.3 KB
pkt-line.h -rw-r--r-- 8.3 KB
preload-index.c -rw-r--r-- 3.8 KB
pretty.c -rw-r--r-- 49.0 KB
pretty.h -rw-r--r-- 3.7 KB
prio-queue.c -rw-r--r-- 2.0 KB
prio-queue.h -rw-r--r-- 1.6 KB
progress.c -rw-r--r-- 9.1 KB
progress.h -rw-r--r-- 768 bytes
promisor-remote.c -rw-r--r-- 5.5 KB
promisor-remote.h -rw-r--r-- 1.1 KB
prompt.c -rw-r--r-- 1.6 KB
prompt.h -rw-r--r-- 223 bytes
protocol.c -rw-r--r-- 2.5 KB
protocol.h -rw-r--r-- 1.1 KB
prune-packed.c -rw-r--r-- 959 bytes
prune-packed.h -rw-r--r-- 152 bytes
quote.c -rw-r--r-- 11.7 KB
quote.h -rw-r--r-- 3.1 KB
range-diff.c -rw-r--r-- 14.6 KB
range-diff.h -rw-r--r-- 486 bytes
reachable.c -rw-r--r-- 5.9 KB
reachable.h -rw-r--r-- 304 bytes
read-cache.c -rw-r--r-- 97.8 KB
rebase-interactive.c -rw-r--r-- 7.8 KB
rebase-interactive.h -rw-r--r-- 651 bytes
rebase.c -rw-r--r-- 1.0 KB
rebase.h -rw-r--r-- 244 bytes
ref-filter.c -rw-r--r-- 68.5 KB
ref-filter.h -rw-r--r-- 4.8 KB
reflog-walk.c -rw-r--r-- 8.2 KB
reflog-walk.h -rw-r--r-- 885 bytes
refs.c -rw-r--r-- 59.5 KB
refs.h -rw-r--r-- 31.7 KB
refspec.c -rw-r--r-- 4.9 KB
refspec.h -rw-r--r-- 2.1 KB
remote-curl.c -rw-r--r-- 40.0 KB
remote-testsvn.c -rw-r--r-- 8.3 KB
remote.c -rw-r--r-- 58.4 KB
remote.h -rw-r--r-- 9.9 KB
replace-object.c -rw-r--r-- 2.2 KB
replace-object.h -rw-r--r-- 1.4 KB
repo-settings.c -rw-r--r-- 2.6 KB
repository.c -rw-r--r-- 6.7 KB
repository.h -rw-r--r-- 5.5 KB
rerere.c -rw-r--r-- 32.2 KB
rerere.h -rw-r--r-- 1.4 KB
reset.c -rw-r--r-- 4.0 KB
reset.h -rw-r--r-- 565 bytes
resolve-undo.c -rw-r--r-- 4.4 KB
resolve-undo.h -rw-r--r-- 581 bytes
revision.c -rw-r--r-- 114.0 KB
revision.h -rw-r--r-- 12.5 KB
run-command.c -rw-r--r-- 41.1 KB
run-command.h -rw-r--r-- 16.5 KB
send-pack.c -rw-r--r-- 16.0 KB
send-pack.h -rw-r--r-- 893 bytes
sequencer.c -rw-r--r-- 149.7 KB
sequencer.h -rw-r--r-- 7.3 KB
serve.c -rw-r--r-- 7.0 KB
serve.h -rw-r--r-- 336 bytes
server-info.c -rw-r--r-- 7.5 KB
setup.c -rw-r--r-- 38.2 KB
sh-i18n--envsubst.c -rw-r--r-- 10.2 KB
sha1-file.c -rw-r--r-- 62.0 KB
sha1-lookup.c -rw-r--r-- 3.2 KB
sha1-lookup.h -rw-r--r-- 1.3 KB
sha1-name.c -rw-r--r-- 47.8 KB
sha1dc_git.c -rw-r--r-- 889 bytes
sha1dc_git.h -rw-r--r-- 618 bytes
shallow.c -rw-r--r-- 21.8 KB
shallow.h -rw-r--r-- 2.6 KB
shell.c -rw-r--r-- 4.5 KB
shortlog.h -rw-r--r-- 508 bytes
sideband.c -rw-r--r-- 5.4 KB
sideband.h -rw-r--r-- 903 bytes
sigchain.c -rw-r--r-- 1.1 KB
sigchain.h -rw-r--r-- 1.7 KB
split-index.c -rw-r--r-- 13.6 KB
split-index.h -rw-r--r-- 1.2 KB
stable-qsort.c -rw-r--r-- 1.2 KB
strbuf.c -rw-r--r-- 25.2 KB
strbuf.h -rw-r--r-- 23.9 KB
streaming.c -rw-r--r-- 12.4 KB
streaming.h -rw-r--r-- 513 bytes
string-list.c -rw-r--r-- 7.6 KB
string-list.h -rw-r--r-- 9.9 KB
sub-process.c -rw-r--r-- 5.5 KB
sub-process.h -rw-r--r-- 3.1 KB
submodule-config.c -rw-r--r-- 21.1 KB
submodule-config.h -rw-r--r-- 3.6 KB
submodule.c -rw-r--r-- 59.5 KB
submodule.h -rw-r--r-- 5.5 KB
symlinks.c -rw-r--r-- 9.3 KB
tag.c -rw-r--r-- 5.5 KB
tag.h -rw-r--r-- 727 bytes
tar.h -rw-r--r-- 693 bytes
tempfile.c -rw-r--r-- 8.3 KB
tempfile.h -rw-r--r-- 9.4 KB
thread-utils.c -rw-r--r-- 2.6 KB
thread-utils.h -rw-r--r-- 1.4 KB
tmp-objdir.c -rw-r--r-- 6.5 KB
tmp-objdir.h -rw-r--r-- 1.5 KB
trace.c -rw-r--r-- 11.9 KB
trace.h -rw-r--r-- 8.3 KB
trace2.c -rw-r--r-- 18.0 KB
trace2.h -rw-r--r-- 18.2 KB
trailer.c -rw-r--r-- 29.5 KB
trailer.h -rw-r--r-- 2.5 KB
transport-helper.c -rw-r--r-- 39.0 KB
transport-internal.h -rw-r--r-- 2.6 KB
transport.c -rw-r--r-- 36.7 KB
transport.h -rw-r--r-- 8.4 KB
tree-diff.c -rw-r--r-- 18.0 KB
tree-walk.c -rw-r--r-- 31.4 KB
tree-walk.h -rw-r--r-- 6.7 KB
tree.c -rw-r--r-- 6.3 KB
tree.h -rw-r--r-- 1.2 KB
unicode-width.h -rw-r--r-- 9.3 KB
unimplemented.sh -rw-r--r-- 101 bytes
unix-socket.c -rw-r--r-- 2.4 KB
unix-socket.h -rw-r--r-- 158 bytes
unpack-trees.c -rw-r--r-- 68.2 KB
unpack-trees.h -rw-r--r-- 3.0 KB
upload-pack.c -rw-r--r-- 41.7 KB
upload-pack.h -rw-r--r-- 499 bytes
url.c -rw-r--r-- 2.5 KB
url.h -rw-r--r-- 697 bytes
urlmatch.c -rw-r--r-- 18.4 KB
urlmatch.h -rw-r--r-- 2.6 KB
usage.c -rw-r--r-- 6.7 KB
userdiff.c -rw-r--r-- 11.4 KB
userdiff.h -rw-r--r-- 892 bytes
utf8.c -rw-r--r-- 19.9 KB
utf8.h -rw-r--r-- 3.6 KB
varint.c -rw-r--r-- 660 bytes
varint.h -rw-r--r-- 154 bytes
version.c -rw-r--r-- 718 bytes
version.h -rw-r--r-- 230 bytes
versioncmp.c -rw-r--r-- 5.2 KB
walker.c -rw-r--r-- 7.6 KB
walker.h -rw-r--r-- 1.1 KB
wildmatch.c -rw-r--r-- 7.8 KB
wildmatch.h -rw-r--r-- 264 bytes
worktree.c -rw-r--r-- 13.5 KB
worktree.h -rw-r--r-- 4.2 KB
wrap-for-bin.sh -rw-r--r-- 946 bytes
wrapper.c -rw-r--r-- 14.3 KB
write-or-die.c -rw-r--r-- 1.5 KB
ws.c -rw-r--r-- 9.4 KB
wt-status.c -rw-r--r-- 69.6 KB
wt-status.h -rw-r--r-- 4.7 KB
xdiff-interface.c -rw-r--r-- 7.5 KB
xdiff-interface.h -rw-r--r-- 2.0 KB
zlib.c -rw-r--r-- 6.1 KB

README.md

back to top