swh:1:snp:bb8853bfef8fcf2b1d37fd6404912c7606c98e48
Revision b66c77a64e696eb5e5994a58c0d50073f8e93bf1 authored by Jeff King on 22 September 2021, 22:11:53 UTC, committed by Junio C Hamano on 23 September 2021, 04:24:58 UTC
When HTTP/2 is in use, we fail to correctly redact "Authorization" (and other) headers in our GIT_TRACE_CURL output. We get the headers in our CURLOPT_DEBUGFUNCTION callback, curl_trace(). It passes them along to curl_dump_header(), which in turn checks redact_sensitive_header(). We see the headers as a text buffer like: Host: ... Authorization: Basic ... After breaking it into lines, we match each header using skip_prefix(). This is case-sensitive, even though HTTP headers are case-insensitive. This has worked reliably in the past because these headers are generated by curl itself, which is predictable in what it sends. But when HTTP/2 is in use, instead we get a lower-case "authorization:" header, and we fail to match it. The fix is simple: we should match with skip_iprefix(). Testing is more complicated, though. We do have a test for the redacting feature, but we don't hit the problem case because our test Apache setup does not understand HTTP/2. You can reproduce the issue by applying this on top of the test change in this patch: diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index afa91e38b0..19267c7107 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -29,6 +29,9 @@ ErrorLog error.log LoadModule setenvif_module modules/mod_setenvif.so </IfModule> +LoadModule http2_module modules/mod_http2.so +Protocols h2c + <IfVersion < 2.4> LockFile accept.lock </IfVersion> @@ -64,8 +67,8 @@ LockFile accept.lock <IfModule !mod_access_compat.c> LoadModule access_compat_module modules/mod_access_compat.so </IfModule> -<IfModule !mod_mpm_prefork.c> - LoadModule mpm_prefork_module modules/mod_mpm_prefork.so +<IfModule !mod_mpm_event.c> + LoadModule mpm_event_module modules/mod_mpm_event.so </IfModule> <IfModule !mod_unixd.c> LoadModule unixd_module modules/mod_unixd.so diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh index 1c2a444ae7..ff74f0ae8a 100755 --- a/t/t5551-http-fetch-smart.sh +++ b/t/t5551-http-fetch-smart.sh @@ -24,6 +24,10 @@ test_expect_success 'create http-accessible bare repository' ' git push public main:main ' +test_expect_success 'prefer http/2' ' + git config --global http.version HTTP/2 +' + setup_askpass_helper test_expect_success 'clone http repository' ' but this has a few issues: - it's not necessarily portable. The http2 apache module might not be available on all systems. Further, the http2 module isn't compatible with the prefork mpm, so we have to switch to something else. But we don't necessarily know what's available. It would be nice if we could have conditional config, but IfModule only tells us if a module is already loaded, not whether it is available at all. This might be a non-issue. The http tests are already optional, and modern-enough systems may just have both of these. But... - if we do this, then we'd no longer be testing HTTP/1.1 at all. I'm not sure how much that matters since it's all handled by curl under the hood, but I'd worry that some detail leaks through. We'd probably want two scripts running similar tests, one with HTTP/2 and one with HTTP/1.1. - speaking of which, a later test fails with the patch above! The problem is that it is making sure we used a chunked transfer-encoding by looking for that header in the trace. But HTTP/2 doesn't support that, as it has its own streaming mechanisms (the overall operation works fine; we just don't see the header in the trace). Furthermore, even with the changes above, this test still does not detect the current failure, because we see _both_ HTTP/1.1 and HTTP/2 requests, which confuse it. Quoting only the interesting bits from the resulting trace file, we first see: => Send header: GET /auth/smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 => Send header: Connection: Upgrade, HTTP2-Settings => Send header: Upgrade: h2c => Send header: HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA <= Recv header: HTTP/1.1 401 Unauthorized <= Recv header: Date: Wed, 22 Sep 2021 20:03:32 GMT <= Recv header: Server: Apache/2.4.49 (Debian) <= Recv header: WWW-Authenticate: Basic realm="git-auth" So the client asks for HTTP/2, but Apache does not do the upgrade for the 401 response. Then the client repeats with credentials: => Send header: GET /auth/smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 => Send header: Authorization: Basic <redacted> => Send header: Connection: Upgrade, HTTP2-Settings => Send header: Upgrade: h2c => Send header: HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA <= Recv header: HTTP/1.1 101 Switching Protocols <= Recv header: Upgrade: h2c <= Recv header: Connection: Upgrade <= Recv header: HTTP/2 200 <= Recv header: content-type: application/x-git-upload-pack-advertisement So the client does properly redact there, because we're speaking HTTP/1.1, and the server indicates it can do the upgrade. And then the client will make further requests using HTTP/2: => Send header: POST /auth/smart/repo.git/git-upload-pack HTTP/2 => Send header: authorization: Basic dXNlckBob3N0OnBhc3NAaG9zdA== => Send header: content-type: application/x-git-upload-pack-request And there we can see that the credential is _not_ redacted. This part of the test is what gets confused: # Ensure that there is no "Basic" followed by a base64 string, but that # the auth details are redacted ! grep "Authorization: Basic [0-9a-zA-Z+/]" trace && grep "Authorization: Basic <redacted>" trace The first grep does not match the un-redacted HTTP/2 header, because it insists on an uppercase "A". And the second one does find the HTTP/1.1 header. So as far as the test is concerned, everything is OK, but it failed to notice the un-redacted lines. We can make this test (and the other related ones) more robust by adding "-i" to grep case-insensitively. This isn't really doing anything for now, since we're not actually speaking HTTP/2, but it future-proofs the tests for a day when we do (either we add explicit HTTP/2 test support, or it's eventually enabled by default by our Apache+curl test setup). And it doesn't hurt in the meantime for the tests to be more careful. The change to use "grep -i", coupled with the changes to use HTTP/2 shown above, causes the test to fail with the current code, and pass after this patch is applied. And finally, there's one other way to demonstrate the issue (and how I actually found it originally). Looking at GIT_TRACE_CURL output against github.com, you'll see the unredacted output, even if you didn't set http.version. That's because setting it is only necessary for curl to send the extra headers in its HTTP/1.1 request that say "Hey, I speak HTTP/2; upgrade if you do, too". But for a production site speaking https, the server advertises via ALPN, a TLS extension, that it supports HTTP/2, and the client can immediately start using it. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 225bc32
Tip revision: 19981daefd7c147444462739375462b49412ce33 authored by Junio C Hamano on 05 April 2024, 17:49:37 UTC
The fifteenth batch
The fifteenth batch
Tip revision: 19981da
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 | ||
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-- | 575 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-- | 5.8 KB |
COPYING | -rw-r--r-- | 18.3 KB |
GIT-VERSION-GEN | -rwxr-xr-x | 752 bytes |
INSTALL | -rw-r--r-- | 9.9 KB |
LGPL-2.1 | -rw-r--r-- | 26.2 KB |
Makefile | -rw-r--r-- | 103.6 KB |
README.md | -rw-r--r-- | 3.2 KB |
RelNotes | l--------- | 33 bytes |
SECURITY.md | -rw-r--r-- | 1.9 KB |
abspath.c | -rw-r--r-- | 7.2 KB |
aclocal.m4 | -rw-r--r-- | 1.4 KB |
add-interactive.c | -rw-r--r-- | 30.4 KB |
add-interactive.h | -rw-r--r-- | 965 bytes |
add-patch.c | -rw-r--r-- | 50.1 KB |
advice.c | -rw-r--r-- | 10.3 KB |
advice.h | -rw-r--r-- | 3.1 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-- | 131.3 KB |
apply.h | -rw-r--r-- | 5.3 KB |
archive-tar.c | -rw-r--r-- | 12.3 KB |
archive-zip.c | -rw-r--r-- | 17.1 KB |
archive.c | -rw-r--r-- | 17.9 KB |
archive.h | -rw-r--r-- | 1.5 KB |
attr.c | -rw-r--r-- | 28.4 KB |
attr.h | -rw-r--r-- | 6.3 KB |
banned.h | -rw-r--r-- | 1.1 KB |
base85.c | -rw-r--r-- | 2.8 KB |
bisect.c | -rw-r--r-- | 30.1 KB |
bisect.h | -rw-r--r-- | 2.2 KB |
blame.c | -rw-r--r-- | 83.4 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-- | 8.0 KB |
bloom.h | -rw-r--r-- | 3.0 KB |
branch.c | -rw-r--r-- | 10.1 KB |
branch.h | -rw-r--r-- | 3.0 KB |
builtin.h | -rw-r--r-- | 12.3 KB |
bulk-checkin.c | -rw-r--r-- | 7.3 KB |
bulk-checkin.h | -rw-r--r-- | 323 bytes |
bundle.c | -rw-r--r-- | 15.1 KB |
bundle.h | -rw-r--r-- | 1.0 KB |
cache-tree.c | -rw-r--r-- | 22.5 KB |
cache-tree.h | -rw-r--r-- | 2.2 KB |
cache.h | -rw-r--r-- | 66.6 KB |
cbtree.c | -rw-r--r-- | 4.2 KB |
cbtree.h | -rw-r--r-- | 1.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 |
chunk-format.c | -rw-r--r-- | 4.1 KB |
chunk-format.h | -rw-r--r-- | 1.9 KB |
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.9 KB |
command-list.txt | -rw-r--r-- | 11.5 KB |
commit-graph.c | -rw-r--r-- | 68.1 KB |
commit-graph.h | -rw-r--r-- | 5.1 KB |
commit-reach.c | -rw-r--r-- | 23.8 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-- | 42.2 KB |
commit.h | -rw-r--r-- | 13.4 KB |
common-main.c | -rw-r--r-- | 1.3 KB |
config.c | -rw-r--r-- | 85.9 KB |
config.h | -rw-r--r-- | 22.2 KB |
config.mak.dev | -rw-r--r-- | 1.7 KB |
config.mak.in | -rw-r--r-- | 540 bytes |
config.mak.uname | -rw-r--r-- | 24.2 KB |
configure.ac | -rw-r--r-- | 37.5 KB |
connect.c | -rw-r--r-- | 35.7 KB |
connect.h | -rw-r--r-- | 1.2 KB |
connected.c | -rw-r--r-- | 4.3 KB |
connected.h | -rw-r--r-- | 1.7 KB |
convert.c | -rw-r--r-- | 49.3 KB |
convert.h | -rw-r--r-- | 7.2 KB |
copy.c | -rw-r--r-- | 1.3 KB |
credential.c | -rw-r--r-- | 12.1 KB |
credential.h | -rw-r--r-- | 6.4 KB |
csum-file.c | -rw-r--r-- | 5.4 KB |
csum-file.h | -rw-r--r-- | 1.9 KB |
ctype.c | -rw-r--r-- | 2.6 KB |
daemon.c | -rw-r--r-- | 34.6 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-- | 18.6 KB |
diff-merges.c | -rw-r--r-- | 3.9 KB |
diff-merges.h | -rw-r--r-- | 693 bytes |
diff-no-index.c | -rw-r--r-- | 7.2 KB |
diff.c | -rw-r--r-- | 193.5 KB |
diff.h | -rw-r--r-- | 21.4 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-- | 7.1 KB |
diffcore-rename.c | -rw-r--r-- | 50.0 KB |
diffcore-rotate.c | -rw-r--r-- | 1.0 KB |
diffcore.h | -rw-r--r-- | 7.4 KB |
dir-iterator.c | -rw-r--r-- | 5.8 KB |
dir-iterator.h | -rw-r--r-- | 4.3 KB |
dir.c | -rw-r--r-- | 98.4 KB |
dir.h | -rw-r--r-- | 16.8 KB |
editor.c | -rw-r--r-- | 3.0 KB |
entry.c | -rw-r--r-- | 14.7 KB |
entry.h | -rw-r--r-- | 1.8 KB |
environment.c | -rw-r--r-- | 10.9 KB |
environment.h | -rw-r--r-- | 246 bytes |
exec-cmd.c | -rw-r--r-- | 8.0 KB |
exec-cmd.h | -rw-r--r-- | 475 bytes |
fetch-negotiator.c | -rw-r--r-- | 609 bytes |
fetch-negotiator.h | -rw-r--r-- | 1.6 KB |
fetch-pack.c | -rw-r--r-- | 58.1 KB |
fetch-pack.h | -rw-r--r-- | 3.1 KB |
fmt-merge-msg.c | -rw-r--r-- | 17.8 KB |
fmt-merge-msg.h | -rw-r--r-- | 420 bytes |
fsck.c | -rw-r--r-- | 33.9 KB |
fsck.h | -rw-r--r-- | 6.7 KB |
fsmonitor.c | -rw-r--r-- | 13.0 KB |
fsmonitor.h | -rw-r--r-- | 2.9 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-- | 3.2 KB |
gettext.h | -rw-r--r-- | 2.0 KB |
git-add--interactive.perl | -rwxr-xr-x | 46.6 KB |
git-archimport.perl | -rwxr-xr-x | 36.1 KB |
git-bisect.sh | -rwxr-xr-x | 3.8 KB |
git-compat-util.h | -rw-r--r-- | 36.7 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.4 KB |
git-filter-branch.sh | -rwxr-xr-x | 15.5 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.5 KB |
git-mergetool.sh | -rwxr-xr-x | 11.3 KB |
git-p4.py | -rwxr-xr-x | 165.3 KB |
git-quiltimport.sh | -rwxr-xr-x | 3.6 KB |
git-rebase--preserve-merges.sh | -rw-r--r-- | 28.6 KB |
git-request-pull.sh | -rwxr-xr-x | 4.0 KB |
git-send-email.perl | -rwxr-xr-x | 59.9 KB |
git-sh-i18n.sh | -rw-r--r-- | 2.0 KB |
git-sh-setup.sh | -rw-r--r-- | 9.1 KB |
git-submodule.sh | -rwxr-xr-x | 18.8 KB |
git-svn.perl | -rwxr-xr-x | 63.2 KB |
git-web--browse.sh | -rwxr-xr-x | 4.3 KB |
git.c | -rw-r--r-- | 27.4 KB |
git.rc | -rw-r--r-- | 635 bytes |
gpg-interface.c | -rw-r--r-- | 11.8 KB |
gpg-interface.h | -rw-r--r-- | 1.9 KB |
graph.c | -rw-r--r-- | 40.0 KB |
graph.h | -rw-r--r-- | 8.6 KB |
grep.c | -rw-r--r-- | 48.2 KB |
grep.h | -rw-r--r-- | 5.0 KB |
hash-lookup.c | -rw-r--r-- | 3.2 KB |
hash-lookup.h | -rw-r--r-- | 1.3 KB |
hash.h | -rw-r--r-- | 9.2 KB |
hashmap.c | -rw-r--r-- | 8.4 KB |
hashmap.h | -rw-r--r-- | 19.8 KB |
help.c | -rw-r--r-- | 18.4 KB |
help.h | -rw-r--r-- | 3.2 KB |
hex.c | -rw-r--r-- | 4.4 KB |
http-backend.c | -rw-r--r-- | 18.9 KB |
http-fetch.c | -rw-r--r-- | 3.9 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.4 KB |
http.h | -rw-r--r-- | 7.9 KB |
ident.c | -rw-r--r-- | 15.9 KB |
imap-send.c | -rw-r--r-- | 36.9 KB |
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.8 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-- | 11.0 KB |
list-objects-filter-options.h | -rw-r--r-- | 4.0 KB |
list-objects-filter.c | -rw-r--r-- | 21.8 KB |
list-objects-filter.h | -rw-r--r-- | 3.2 KB |
list-objects.c | -rw-r--r-- | 12.0 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-- | 28.2 KB |
log-tree.h | -rw-r--r-- | 1.5 KB |
ls-refs.c | -rw-r--r-- | 4.4 KB |
ls-refs.h | -rw-r--r-- | 276 bytes |
mailinfo.c | -rw-r--r-- | 28.6 KB |
mailinfo.h | -rw-r--r-- | 1.3 KB |
mailmap.c | -rw-r--r-- | 8.6 KB |
mailmap.h | -rw-r--r-- | 272 bytes |
match-trees.c | -rw-r--r-- | 8.5 KB |
mem-pool.c | -rw-r--r-- | 3.5 KB |
mem-pool.h | -rw-r--r-- | 1.6 KB |
merge-blobs.c | -rw-r--r-- | 2.0 KB |
merge-blobs.h | -rw-r--r-- | 232 bytes |
merge-ort-wrappers.c | -rw-r--r-- | 1.4 KB |
merge-ort-wrappers.h | -rw-r--r-- | 638 bytes |
merge-ort.c | -rw-r--r-- | 148.0 KB |
merge-ort.h | -rw-r--r-- | 2.3 KB |
merge-recursive.c | -rw-r--r-- | 117.7 KB |
merge-recursive.h | -rw-r--r-- | 3.6 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-- | 39.8 KB |
midx.h | -rw-r--r-- | 2.2 KB |
name-hash.c | -rw-r--r-- | 19.1 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.4 KB |
notes.h | -rw-r--r-- | 12.6 KB |
object-file.c | -rw-r--r-- | 64.5 KB |
object-name.c | -rw-r--r-- | 48.1 KB |
object-store.h | -rw-r--r-- | 15.3 KB |
object.c | -rw-r--r-- | 14.1 KB |
object.h | -rw-r--r-- | 7.2 KB |
oid-array.c | -rw-r--r-- | 1.8 KB |
oid-array.h | -rw-r--r-- | 4.3 KB |
oidmap.c | -rw-r--r-- | 1.5 KB |
oidmap.h | -rw-r--r-- | 2.3 KB |
oidset.c | -rw-r--r-- | 1.8 KB |
oidset.h | -rw-r--r-- | 3.0 KB |
oidtree.c | -rw-r--r-- | 2.5 KB |
oidtree.h | -rw-r--r-- | 584 bytes |
pack-bitmap-write.c | -rw-r--r-- | 16.6 KB |
pack-bitmap.c | -rw-r--r-- | 39.5 KB |
pack-bitmap.h | -rw-r--r-- | 3.1 KB |
pack-check.c | -rw-r--r-- | 5.2 KB |
pack-objects.c | -rw-r--r-- | 4.9 KB |
pack-objects.h | -rw-r--r-- | 8.3 KB |
pack-revindex.c | -rw-r--r-- | 12.3 KB |
pack-revindex.h | -rw-r--r-- | 4.3 KB |
pack-write.c | -rw-r--r-- | 14.0 KB |
pack.h | -rw-r--r-- | 3.8 KB |
packfile.c | -rw-r--r-- | 58.1 KB |
packfile.h | -rw-r--r-- | 7.1 KB |
pager.c | -rw-r--r-- | 5.2 KB |
parallel-checkout.c | -rw-r--r-- | 18.2 KB |
parallel-checkout.h | -rw-r--r-- | 3.2 KB |
parse-options-cb.c | -rw-r--r-- | 6.4 KB |
parse-options.c | -rw-r--r-- | 26.1 KB |
parse-options.h | -rw-r--r-- | 13.1 KB |
patch-delta.c | -rw-r--r-- | 2.4 KB |
patch-ids.c | -rw-r--r-- | 3.7 KB |
patch-ids.h | -rw-r--r-- | 1.2 KB |
path.c | -rw-r--r-- | 38.3 KB |
path.h | -rw-r--r-- | 5.9 KB |
pathspec.c | -rw-r--r-- | 18.7 KB |
pathspec.h | -rw-r--r-- | 5.5 KB |
pkt-line.c | -rw-r--r-- | 14.5 KB |
pkt-line.h | -rw-r--r-- | 8.5 KB |
preload-index.c | -rw-r--r-- | 4.0 KB |
pretty.c | -rw-r--r-- | 51.5 KB |
pretty.h | -rw-r--r-- | 4.5 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.2 KB |
progress.h | -rw-r--r-- | 768 bytes |
promisor-remote.c | -rw-r--r-- | 6.3 KB |
promisor-remote.h | -rw-r--r-- | 1.4 KB |
prompt.c | -rw-r--r-- | 1.6 KB |
prompt.h | -rw-r--r-- | 223 bytes |
protocol-caps.c | -rw-r--r-- | 2.5 KB |
protocol-caps.h | -rw-r--r-- | 236 bytes |
protocol.c | -rw-r--r-- | 2.4 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-- | 12.2 KB |
quote.h | -rw-r--r-- | 3.8 KB |
range-diff.c | -rw-r--r-- | 15.8 KB |
range-diff.h | -rw-r--r-- | 711 bytes |
reachable.c | -rw-r--r-- | 5.4 KB |
reachable.h | -rw-r--r-- | 304 bytes |
read-cache.c | -rw-r--r-- | 99.4 KB |
rebase-interactive.c | -rw-r--r-- | 8.0 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-- | 71.9 KB |
ref-filter.h | -rw-r--r-- | 4.7 KB |
reflog-walk.c | -rw-r--r-- | 8.1 KB |
reflog-walk.h | -rw-r--r-- | 885 bytes |
refs.c | -rw-r--r-- | 60.5 KB |
refs.h | -rw-r--r-- | 32.2 KB |
refspec.c | -rw-r--r-- | 6.4 KB |
refspec.h | -rw-r--r-- | 2.4 KB |
remote-curl.c | -rw-r--r-- | 40.1 KB |
remote.c | -rw-r--r-- | 65.6 KB |
remote.h | -rw-r--r-- | 10.7 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-- | 3.3 KB |
repository.c | -rw-r--r-- | 7.1 KB |
repository.h | -rw-r--r-- | 5.8 KB |
rerere.c | -rw-r--r-- | 31.9 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.5 KB |
resolve-undo.h | -rw-r--r-- | 581 bytes |
revision.c | -rw-r--r-- | 115.3 KB |
revision.h | -rw-r--r-- | 12.6 KB |
run-command.c | -rw-r--r-- | 41.5 KB |
run-command.h | -rw-r--r-- | 17.2 KB |
send-pack.c | -rw-r--r-- | 19.4 KB |
send-pack.h | -rw-r--r-- | 893 bytes |
sequencer.c | -rw-r--r-- | 162.3 KB |
sequencer.h | -rw-r--r-- | 7.5 KB |
serve.c | -rw-r--r-- | 7.5 KB |
serve.h | -rw-r--r-- | 328 bytes |
server-info.c | -rw-r--r-- | 7.5 KB |
setup.c | -rw-r--r-- | 39.2 KB |
sh-i18n--envsubst.c | -rw-r--r-- | 10.2 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-- | 627 bytes |
sideband.c | -rw-r--r-- | 6.6 KB |
sideband.h | -rw-r--r-- | 1.0 KB |
sigchain.c | -rw-r--r-- | 1.1 KB |
sigchain.h | -rw-r--r-- | 1.7 KB |
simple-ipc.h | -rw-r--r-- | 6.7 KB |
sparse-index.c | -rw-r--r-- | 9.2 KB |
sparse-index.h | -rw-r--r-- | 773 bytes |
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.2 KB |
streaming.h | -rw-r--r-- | 513 bytes |
string-list.c | -rw-r--r-- | 7.9 KB |
string-list.h | -rw-r--r-- | 10.1 KB |
strmap.c | -rw-r--r-- | 4.3 KB |
strmap.h | -rw-r--r-- | 6.8 KB |
strvec.c | -rw-r--r-- | 2.0 KB |
strvec.h | -rw-r--r-- | 2.8 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.2 KB |
submodule-config.h | -rw-r--r-- | 3.6 KB |
submodule.c | -rw-r--r-- | 59.4 KB |
submodule.h | -rw-r--r-- | 5.5 KB |
symlinks.c | -rw-r--r-- | 9.7 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-- | 31.0 KB |
trailer.h | -rw-r--r-- | 3.8 KB |
transport-helper.c | -rw-r--r-- | 41.6 KB |
transport-internal.h | -rw-r--r-- | 2.2 KB |
transport.c | -rw-r--r-- | 40.4 KB |
transport.h | -rw-r--r-- | 9.2 KB |
tree-diff.c | -rw-r--r-- | 18.0 KB |
tree-walk.c | -rw-r--r-- | 32.3 KB |
tree-walk.h | -rw-r--r-- | 6.7 KB |
tree.c | -rw-r--r-- | 3.7 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.7 KB |
unix-socket.h | -rw-r--r-- | 370 bytes |
unix-stream-server.c | -rw-r--r-- | 2.9 KB |
unix-stream-server.h | -rw-r--r-- | 760 bytes |
unpack-trees.c | -rw-r--r-- | 72.9 KB |
unpack-trees.h | -rw-r--r-- | 3.1 KB |
upload-pack.c | -rw-r--r-- | 45.4 KB |
upload-pack.h | -rw-r--r-- | 491 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.5 KB |
userdiff.c | -rw-r--r-- | 13.6 KB |
userdiff.h | -rw-r--r-- | 1.3 KB |
utf8.c | -rw-r--r-- | 20.0 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.7 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-- | 19.6 KB |
worktree.h | -rw-r--r-- | 5.9 KB |
wrap-for-bin.sh | -rw-r--r-- | 946 bytes |
wrapper.c | -rw-r--r-- | 14.6 KB |
write-or-die.c | -rw-r--r-- | 1.6 KB |
ws.c | -rw-r--r-- | 9.4 KB |
wt-status.c | -rw-r--r-- | 71.5 KB |
wt-status.h | -rw-r--r-- | 4.8 KB |
xdiff-interface.c | -rw-r--r-- | 7.5 KB |
xdiff-interface.h | -rw-r--r-- | 2.7 KB |
zlib.c | -rw-r--r-- | 6.1 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...