Log

Author Commit Date CI Message
lhchavez 83265b3e 2020-12-18T06:50:22 zlib: Add support for building with Chromium's zlib implementation This change builds libgit2 using Chromium's zlib implementation by invoking cmake with `-DUSE_BUNDLED_ZLIB=ON -DUSE_CHROMIUM_ZLIB=ON`, which is ~10% faster than the bundled zlib for the core::zstream suite. This version of zlib has some optimizations: a) Decompression (Intel+ARM): inflate_fast, adler32, crc32, etc. b) Compression (Intel): fill_window, longest_match, hash function, etc. Due to the introduction of SIMD optimizations, and to get the maximum performance out of this fork of zlib, this requires an x86_64 processor with SSE4.2 and CLMUL (anything Westmere or later, ~2010). The Chromium zlib implementation also supports ARM with NEON, but it has not been enabled in this patch. Performance =========== TL;DR: Running just `./libgit2_clar -score::zstream` 100 times in a loop took 0:56.30 before and 0:50.67 after (~10% reduction!). The bundled and system zlib implementations on an Ubuntu Focal system perform relatively similar (the bundled one is marginally better due to the compiler being able to inline some functions), so only the bundled and Chromium zlibs were compared. For a more balanced comparison (to ensure that nothing regressed overall), `libgit2_clar` under `perf` was also run, and the zlib-related functions were compared. Bundled ------- ```shell cmake \ -DUSE_BUNDLED_ZLIB=ON \ -DUSE_CHROMIUM_ZLIB=OFF \ -DCMAKE_BUILD_TYPE="RelWithDebInfo" \ -DCMAKE_C_FLAGS="-fPIC -fno-omit-frame-pointer" \ -GNinja \ .. ninja perf record --call-graph=dwarf ./libgit2_clar perf report --children ``` ``` Samples: 87K of event 'cycles', Event count (approx.): 75923450603 Children Self Command Shared Objec Symbol + 4.14% 0.01% libgit2_clar libgit2_clar [.] git_zstream_get_output_chunk + 2.91% 0.00% libgit2_clar libgit2_clar [.] git_zstream_get_output + 0.69% 0.00% libgit2_clar libgit2_clar [.] git_zstream_get_output (inlined) 0.17% 0.00% libgit2_clar libgit2_clar [.] git_zstream_init 0.02% 0.00% libgit2_clar libgit2_clar [.] git_zstream_reset 0.00% 0.00% libgit2_clar libgit2_clar [.] git_zstream_eos 0.00% 0.00% libgit2_clar libgit2_clar [.] git_zstream_done 0.00% 0.00% libgit2_clar libgit2_clar [.] git_zstream_free (inlined) Samples: 87K of event 'cycles', Event count (approx.): 75923450603 Children Self Command Shared Objec Symbol + 3.12% 0.01% libgit2_clar libgit2_clar [.] deflate + 2.65% 1.48% libgit2_clar libgit2_clar [.] deflate_slow + 1.60% 0.55% libgit2_clar libgit2_clar [.] inflate + 0.53% 0.00% libgit2_clar libgit2_clar [.] write_deflate 0.49% 0.36% libgit2_clar libgit2_clar [.] inflate_fast 0.46% 0.02% libgit2_clar libgit2_clar [.] deflate_fast 0.19% 0.19% libgit2_clar libgit2_clar [.] inflate_table 0.16% 0.01% libgit2_clar libgit2_clar [.] inflateInit_ 0.15% 0.00% libgit2_clar libgit2_clar [.] inflateInit2_ (inlined) 0.10% 0.00% libgit2_clar libgit2_clar [.] deflateInit_ 0.10% 0.00% libgit2_clar libgit2_clar [.] deflateInit2_ 0.03% 0.00% libgit2_clar libgit2_clar [.] deflateReset (inlined) 0.02% 0.00% libgit2_clar libgit2_clar [.] deflateReset 0.02% 0.00% libgit2_clar libgit2_clar [.] inflateEnd 0.02% 0.00% libgit2_clar libgit2_clar [.] deflateEnd 0.01% 0.00% libgit2_clar libgit2_clar [.] deflateResetKeep 0.01% 0.01% libgit2_clar libgit2_clar [.] inflateReset2 0.01% 0.00% libgit2_clar libgit2_clar [.] deflateReset (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateStateCheck (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateReset (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateStateCheck (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] deflateStateCheck (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateResetKeep (inlined) ``` Chromium -------- ```shell cmake \ -DUSE_BUNDLED_ZLIB=ON \ -DUSE_CHROMIUM_ZLIB=ON \ -DCMAKE_BUILD_TYPE="RelWithDebInfo" \ -DCMAKE_C_FLAGS="-fPIC -fno-omit-frame-pointer" \ -GNinja \ .. ninja perf record --call-graph=dwarf ./libgit2_clar perf report --children ``` ``` Samples: 97K of event 'cycles', Event count (approx.): 80862210917 Children Self Command Shared Objec Symbol + 3.31% 0.00% libgit2_clar libgit2_clar [.] git_zstream_get_output_chunk + 2.27% 0.01% libgit2_clar libgit2_clar [.] git_zstream_get_output + 0.55% 0.00% libgit2_clar libgit2_clar [.] git_zstream_get_output (inlined) 0.18% 0.00% libgit2_clar libgit2_clar [.] git_zstream_init 0.02% 0.00% libgit2_clar libgit2_clar [.] git_zstream_reset 0.00% 0.00% libgit2_clar libgit2_clar [.] git_zstream_free (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] git_zstream_done 0.00% 0.00% libgit2_clar libgit2_clar [.] git_zstream_free Samples: 97K of event 'cycles', Event count (approx.): 80862210917 Children Self Command Shared Objec Symbol + 2.55% 0.01% libgit2_clar libgit2_clar [.] deflate + 2.25% 1.41% libgit2_clar libgit2_clar [.] deflate_slow + 1.10% 0.52% libgit2_clar libgit2_clar [.] inflate 0.36% 0.00% libgit2_clar libgit2_clar [.] write_deflate 0.30% 0.03% libgit2_clar libgit2_clar [.] deflate_fast 0.28% 0.15% libgit2_clar libgit2_clar [.] inflate_fast_chunk_ 0.19% 0.19% libgit2_clar libgit2_clar [.] inflate_table 0.17% 0.01% libgit2_clar libgit2_clar [.] inflateInit_ 0.16% 0.00% libgit2_clar libgit2_clar [.] inflateInit2_ (inlined) 0.15% 0.00% libgit2_clar libgit2_clar [.] deflateInit_ 0.15% 0.00% libgit2_clar libgit2_clar [.] deflateInit2_ 0.11% 0.01% libgit2_clar libgit2_clar [.] adler32_z 0.09% 0.09% libgit2_clar libgit2_clar [.] adler32_simd_ 0.05% 0.00% libgit2_clar libgit2_clar [.] deflateReset (inlined) 0.05% 0.00% libgit2_clar libgit2_clar [.] deflate_read_buf 0.03% 0.00% libgit2_clar libgit2_clar [.] inflateEnd 0.02% 0.00% libgit2_clar libgit2_clar [.] deflateReset 0.01% 0.00% libgit2_clar libgit2_clar [.] deflateEnd 0.01% 0.01% libgit2_clar libgit2_clar [.] inflateReset2 0.01% 0.00% libgit2_clar libgit2_clar [.] inflateReset (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] adler32 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateResetKeep (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] deflateResetKeep 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateStateCheck (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateStateCheck (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] inflateStateCheck (inlined) 0.00% 0.00% libgit2_clar libgit2_clar [.] deflateStateCheck (inlined) ```
Edward Thomson fe41e582 2020-12-23T12:32:58 Merge pull request #5741 from libgit2/ethomson/ipv6 Handle ipv6 addresses
Edward Thomson 1c3f29a9 2020-12-23T12:20:02 Merge pull request #5750 from arroz/missing_hostkey_types Add support for additional SSH hostkey types.
Edward Thomson 27301cd0 2020-12-17T20:53:11 net: function to identify ipv6 addresses in URLs
Edward Thomson 780ad7a9 2020-12-17T14:09:45 urlparse: use consistent ipv6 address rules IPv6 addresses should be used identically internally; we should not denote them with brackets in one operating system and without them in another.
Paul Wolfgang (DC-AE/ESF1) ab3e8565 2019-07-01T19:59:01 urlparse: Add IPv4 and IPv6 based tests
Edward Thomson 953dee20 2020-12-17T20:51:37 net: is_default_port is a bool
Edward Thomson b7ffc63b 2020-12-17T18:38:01 winhttp: handle ipv6 addresses
Edward Thomson 2807de5c 2020-12-17T15:18:31 http: handle ipv6 addresses
Edward Thomson 381991a1 2020-12-23T10:47:23 Merge pull request #5749 from lhchavez/gcc-10 Fix the `-DENABLE_WERROR=ON` build for gcc 10.2
Miguel Arroz 8dc0ba75 2020-12-21T21:31:50 Change libssh2 version to 1.9.0 on focal
Miguel Arroz 3433acd9 2020-12-21T21:27:58 Wrap newer hostkeys in #ifdefs This allows the library to be built using a pre-1.9.0 version of libssh2.
Miguel Arroz ed7b20e7 2020-12-21T17:26:34 Add support for additional hostkey types. Specifically: ECDSA_256, ECDSA_384, ECDSA_521 and ED25519.
lhchavez 212ae9a7 2020-12-21T06:48:48 Fix the `-DENABLE_WERROR=ON` build for gcc 10.2 This change makes it possible to build with newer versions of gcc without warnings. There were two warnings issued: * gcc 8 added [`-Wstringop-truncation`](https://developers.redhat.com/blog/2018/05/24/detecting-string-truncation-with-gcc-8/), which warns if a call to `strncpy(3)` is prone to accidentally truncating the destination string, since `strncpy(3)` does NOT add a terminating `NULL` if the destination buffer is not large enough to hold the input. This change uses the pattern suggested in https://us-cert.cisa.gov/bsi/articles/knowledge/coding-practices/strncpy-and-strncat to fix the locations flagged by gcc. * There was a potentially uninitialized access of `dest` in `fs_copy`.
Edward Thomson f4b473fa 2020-12-20T21:25:22 Merge pull request #5746 from libgit2/ethomson/configmapcache repository: use intptr_t's in the config map cache
Edward Thomson 1b708683 2020-12-20T20:42:40 config_cache: cleanup config map lookup
Edward Thomson f52f593e 2020-12-20T16:33:42 repository: use intptr_t's in the config map cache Since we're using atomic primitives to read and write into the config map cache, we need to read/write something pointer-sized. Use an `intptr_t` for the config map cache.
Edward Thomson 70ed3087 2020-12-20T11:34:44 Merge pull request #5744 from lhchavez/last-multiply-int64-overflow-change-i-swear Add tests for `git__multiply_int64_overflow`
lhchavez 5ab0736b 2020-12-19T09:30:26 Add tests for `git__multiply_int64_overflow` As it turns out, the implementation of `git__multiply_int64_overflow` is full of edge cases and tricky arithmetic. That means that it should have unit tests. As a result, a bug in `git__strntol64` was found (and fixed!) in clang+32-bit.
Edward Thomson a67e5e08 2020-12-19T09:57:11 Merge pull request #5743 from lhchavez/fix-clang-32-bit-tests Third attempt to fix the 32-bit version of `git__multiply_int64_overf…
lhchavez e9b98cd5 2020-12-18T19:43:13 Third attempt to fix the 32-bit version of `git__multiply_int64_overflow` This change should now fix the issue for realsies. `./libgit2_clar -score::strtol` passes on a 32-bit Docker.
Edward Thomson c76e9f22 2020-12-18T17:57:46 Merge pull request #5742 from lhchavez/fix-clang-32-bit-build Avoid using `__builtin_mul_overflow` with the clang+32-bit combo
Edward Thomson be85c7e8 2020-12-18T15:11:12 ci: only run codeql nightly
lhchavez 7f8ae019 2020-12-18T07:03:21 Avoid using `__builtin_mul_overflow` with the clang+32-bit combo This causes clang to produce an undefined reference to `__mulodi4`. This could be fixed by statically linking some compiler-rt libraries to provide this symbol, but let's first stop the bleeding since doing the correct long-term fix requires some non-trivial CMake knowledge which I lack.
Edward Thomson 530d37be 2020-12-16T13:30:39 Merge pull request #5709 from libgit2/ethomson/codeql ci: run codeql
Edward Thomson 7d1c5d69 2020-11-24T00:30:05 ci: run codeql
Edward Thomson 1865806e 2020-12-16T00:16:10 Merge pull request #5740 from libgit2/ethomson/zlib pack: continue zlib while we can make progress
Edward Thomson 93f61c5a 2020-12-15T23:03:03 pack: continue zlib while we can make progress Continue the zlib stream as long as we can make progress; stop when we stop getting output _or_ when zlib stops taking input from us.
Edward Thomson 4ab9567f 2020-12-14T17:47:24 Merge pull request #4418 from libgit2/cmn/rc4 Re-enable the RC4 test
Edward Thomson 589b8129 2020-12-14T10:43:07 badssl: RC4 should not fail with ECERTIFICATE Using RC4 is not a _certificate_ problem, it's a cipher problem. The SSL implementation should and will fail with an unrecoverable error (-1). There's no opportunity to accept/continue.
Carlos Martín Nieto 89ffa98e 2017-11-18T15:51:08 badssl: re-enable RC4 test This used to fail with an error indicating a mis-use of OpenSSL on platforms using it due to poor error handling. Re-enable it even if this isn't the right error code to use for now.
Edward Thomson d185ab24 2020-12-13T15:18:12 Merge pull request #5727 from lhchavez/make-git-diff-fast Cache the parsed submodule config when diffing
Edward Thomson 851e778e 2020-12-13T13:46:16 Merge pull request #5735 from lhchavez/faster-strntol64 Make git__strntol64() ~70%* faster
Edward Thomson 86a1cdd3 2020-12-13T13:44:56 Merge pull request #5384 from ianhattendorf/fix/winhttp-client-cert winhttp: support optional client cert
Edward Thomson 21fe183e 2020-12-13T13:21:11 README: show v1.1 build status
lhchavez e99e833f 2020-12-12T16:51:15 Make git__strntol64() ~70%* faster This change uses compiler intrinsics to detect overflows instead of using divisions to detect potential overflow. This makes the code faster and makes it easier to read as a bonus side-effect! Some of the things this quickens: * Config parsing. * Tree parsing. * Smart protocol negotiation. \* Measured by running `libgit2_clar` with `-fno-optimize-sibling-calls -fno-omit-frame-pointer` under `perf(1)`: ```shell $ perf diff --symbols=git__strntol64 --compute=ratio \ --percentage=absolute baseline.data perf.data \# Event 'cycles' \# \# Baseline Ratio Shared Object \# ........ .............. ............. \# 0.25% 0.321836 libgit2_clar ```
lhchavez 1ab2f577 2020-12-11T05:13:16 Fix an oops
lhchavez 6cd0c853 2020-12-11T05:08:45 Small refactor to make thing tidier Also repurposed an unused function and deleted another one.
lhchavez 41da4e16 2020-12-10T19:52:01 Cache the parsed submodule config when diffing This change makes that anything that calls `git_diff__from_iterators` (any of the `git_diff_xxx` functions) only need to parse the `.gitmodules` file once. This can be avoided by calling `git_repository_submodule_cache_all(...)`, but we can do that safely for the user with no change in semantics. Fixes: #5725
Edward Thomson 03ea04bf 2020-12-09T20:52:30 Merge pull request #5724 from vringar/patch-2 git.git-authors: Replacing his/her with their
Stefan Zabka 5bce4841 2020-12-09T21:47:42 git.git-authors: Replacing his/her with their
Edward Thomson b661e9aa 2020-12-09T14:03:42 Merge pull request #5578 from libgit2/ethomson/friendlier_getting_started Friendlier getting started in the lack of git_libgit2_init
Edward Thomson 08f28ff5 2020-07-10T08:57:05 alloc: set up an allocator that fails before library init We require the library to be initialized with git_libgit2_init before it is functional. However, if a user tries to uses the library without doing so - as they might when getting started with the library for the first time - we will likely crash. This commit introduces some guard rails - now instead of having _no_ allocator by default, we'll have an allocator that always fails, and never tries to set an error message (since the thread-local state is set up by git_libgit2_init). We've modified the error retrieval function to (try to) ensure that the library has been initialized before getting the thread-local error message. (Unfortunately, we cannot determine if the thread local storage has actually been configured, this does require initialization by git_libgit2_init. But a naive attempt should be good enough for most cases.)
Edward Thomson 6c51014d 2020-07-11T14:24:17 libgit2: provide init_count of the library A function to provide the initialization count of the library; this is subject to race conditions but is useful for a naive determination as to whether the library has been initialized or not.
Edward Thomson a5cb2cc9 2020-12-09T13:25:23 Merge pull request #5720 from libgit2/ethomson/tlsdata Thread-local storage: a generic internal library (with no allocations)
Tyler Ang-Wanek 20ce17f0 2020-08-06T16:24:27 Replace global storage TLS with new interface
Edward Thomson fd2d4759 2020-12-05T22:22:38 threads: git_tls_data to git_tlsdata Use a no-allocation approach to the TLS data abstraction.
Edward Thomson 42d5f110 2020-12-08T14:33:31 win32: provide macros for calling conventions Provide more clarity for Win32 calling conventions - now that we always compile to __cdecl on Win32, we'll define that as the the libgit2 calling convention. Also offer NTAPI (__stdcall) calling conventions for things that need callbacks from NTAPI code (eg fiber-local storage).
Tyler Ang-Wanek 971b7187 2020-08-06T16:24:18 Implement generic TLS interface This adds a generic TLS interface for anyone to store TLS data. It is designed to work regardless of whether threading support is built into the library or not. Nobody in the library should directly interface with the data on the TLS struct, so it's been built to be opaque even in the library. Requires the allocator to be initialized before use.
Edward Thomson 404dd024 2020-12-05T15:57:48 threads: rename thread files to thread.[ch]
Edward Thomson ab772974 2020-12-05T15:49:30 threads: give atomic functions the git_atomic prefix
Edward Thomson 37763d38 2020-12-05T15:26:59 threads: rename git_atomic to git_atomic32 Clarify the `git_atomic` type and functions now that we have a 64 bit version as well (`git_atomic64`).
Edward Thomson 9800728a 2020-12-05T16:08:34 util: move git_online_cpus into util The number of CPUs is useful information for creating a thread pool or a number of workers, but it's not really about threading directly. Evict it from the thread file
Edward Thomson 1adb8410 2020-12-05T22:47:24 Merge pull request #5719 from libgit2/ethomson/nothreads Thread-free implementation
Edward Thomson 8f305326 2020-12-05T21:41:39 ci: run a threadsafe build in nightly
Edward Thomson 0450e313 2020-12-05T22:03:59 tests: ifdef out unused function in no-thread builds
Edward Thomson fe07ef8a 2020-12-05T21:38:29 packbuilder: use git__noop on non-threaded systems Our git_packbuilder__cache_lock function returns a value; use git__noop.
Edward Thomson 8413c0f9 2020-12-05T21:32:48 util: move git__noop into the util header The git__noop function is more largely useful; move it into the util header. (And reduce the number of underscores.)
Edward Thomson 87e4597c 2020-11-29T09:40:39 Merge pull request #5593 from lhchavez/fix-mwindow-thread-unsafety Make the pack and mwindow implementations data-race-free
Edward Thomson 5699ef81 2020-11-29T09:39:10 Merge pull request #5595 from lhchavez/odb-race-free Make the odb race-free
lhchavez 322c15ee 2020-08-01T18:24:41 Make the pack and mwindow implementations data-race-free This change fixes a packfile heap corruption that can happen when interacting with multiple packfiles concurrently across multiple threads. This is exacerbated by setting a lower mwindow open file limit. This change: * Renames most of the internal methods in pack.c to clearly indicate that they expect to be called with a certain lock held, making reasoning about the state of locks a bit easier. * Splits the `git_pack_file` lock in two: the one in `git_pack_file` only protects the `index_map`. The protection to `git_mwindow_file` is now in that struct. * Explicitly checks for freshness of the `git_pack_file` in `git_packfile_unpack_header`: this allows the mwindow implementation to close files whenever there is enough cache pressure, and `git_packfile_unpack_header` will reopen the packfile if needed. * After a call to `p_munmap()`, the `data` and `len` fields are poisoned with `NULL` to make use-after-frees more evident and crash rather than being open to the possibility of heap corruption. * Adds a test case to prevent this from regressing in the future. Fixes: #5591
lhchavez 4ae41f9c 2020-08-02T16:26:25 Make the odb race-free This change adds all the necessary locking to the odb to avoid races in the backends. Part of: #5592
Edward Thomson ef6de8d5 2020-11-27T14:46:38 Merge pull request #5704 from lhchavez/ssh-raw-certificate Also add the raw hostkey to `git_cert_hostkey`
Edward Thomson 079a40ca 2020-11-27T14:36:12 Merge pull request #5715 from lhchavez/fix-non-debug-build Fix the `ENABLE_WERROR=ON` build in Groovy Gorilla (gcc 10.2)
lhchavez 5db304f0 2020-11-27T06:17:57 Fix the non-debug build in Groovy Gorilla (gcc 10.2) The release build has been failing with the following error: ```shell FAILED: src/CMakeFiles/git2internal.dir/hash.c.o /usr/bin/cc -DHAVE_QSORT_R_GNU -DSHA1DC_CUSTOM_INCLUDE_SHA1_C=\"common.h\" -DSHA1DC_CUSTOM_INCLUDE_UBC_CHECK_C=\"common.h\" -DSHA1DC_NO_STANDARD_INCLUDES=1 -D_FILE_OFFSET_BITS=64 -Isrc -I../src -I../include -I../deps/pcre -I../deps/http-parser -D_GNU_SOURCE -fsanitize=thread -fno-optimize-sibling-calls -fno-omit-frame-pointer -Werror -Wall -Wextra -fvisibility= hidden -fPIC -Wno-documentation-deprecated-sync -Wno-missing-field-initializers -Wstrict-aliasing -Wstrict-prototypes -Wdeclaration-after-statement -Wshift-count-overflow -Wunused-const-variable -Wunused-function -Wint-conversion -Wformat -Wformat-security -Wmissing-declarations -g -D_DEBUG -O0 -std=gnu90 -MD -MT src/CMakeFiles/git2internal.dir/hash.c.o -MF s rc/CMakeFiles/git2internal.dir/hash.c.o.d -o src/CMakeFiles/git2internal.dir/hash.c.o -c ../src/hash.c ../src/hash.c: In function ‘git_hash_init’: ../src/hash.c:47:1: error: control reaches end of non-void function [-Werror=return-type] 47 | } | ^ ../src/hash.c: In function ‘git_hash_update’: ../src/hash.c:58:1: error: control reaches end of non-void function [-Werror=return-type] 58 | } | ^ ../src/hash.c: In function ‘git_hash_final’: ../src/hash.c:68:1: error: control reaches end of non-void function [-Werror=return-type] 68 | } | ^ ../src/hash.c: At top level: cc1: note: unrecognized command-line option ‘-Wno-documentation-deprecated-sync’ may have been intended to silence earlier diagnostics cc1: all warnings being treated as errors [11/533] Building C object src/CMakeFiles/git2internal.dir/odb_pack.c.o ninja: build stopped: subcommand failed. ``` The compiler _should_ be able to figure out that there is no way to reach the end of the non-void function since `GIT_ASSERT(0)` expands to either `assert()` or an unconditional `return -1;` (after doing constant folding and stuff, depending on the debug level). But it's not doing so at the moment, so let's help it.
lhchavez 29fe5f61 2020-11-22T18:25:00 Also add the raw hostkey to `git_cert_hostkey` `git_cert_x509` has the raw encoded certificate. Let's do the same for the SSH certificate for symmetry.
Edward Thomson 4fadd594 2020-11-27T12:00:57 Merge pull request #5447 (lhchavez:git-odb-options)
lhchavez f847fa7b 2020-02-16T02:00:56 midx: Support multi-pack-index files in odb_pack.c This change adds support for reading multi-pack-index files from the packfile odb backend. This also makes git_pack_file objects open their backing failes lazily in more scenarios, since the multi-pack-index can avoid having to open them in some cases (yay!). This change also refreshes the documentation found in src/odb_pack.c to match the updated code. Part of: #5399
Edward Thomson fa618a59 2020-11-27T11:36:58 Merge pull request #5327 from libgit2/ethomson/assert Introduce GIT_ASSERT macros
Edward Thomson c6ebdb29 2020-11-22T09:43:06 win32: use GIT_ASSERT
Edward Thomson 4f5f1127 2020-11-22T00:01:09 transports: use GIT_ASSERT
Edward Thomson 07a3c992 2020-11-21T23:52:39 streams: use GIT_ASSERT
Edward Thomson 3ff56dae 2020-11-21T23:35:09 hash: use GIT_ASSERT
Edward Thomson cac36006 2020-04-05T22:30:20 zstream: use GIT_ASSERT
Edward Thomson 0165e885 2020-04-05T22:29:56 worktree: use GIT_ASSERT
Edward Thomson 64e2b6ef 2020-04-05T22:28:19 vector: use GIT_ASSERT
Edward Thomson 63baed37 2020-04-05T22:23:54 tsort: remove assertion
Edward Thomson 8613133b 2020-04-05T22:21:30 tree: use GIT_ASSERT
Edward Thomson 2ab26a98 2020-04-05T22:17:41 transport: use GIT_ASSERT
Edward Thomson d42e4d5f 2020-04-05T22:16:57 transaction: use GIT_ASSERT
Edward Thomson 9083a0e6 2020-04-05T22:15:21 trace: use GIT_ASSERT
Edward Thomson e1af2e55 2020-04-05T22:15:06 tag: use GIT_ASSERT
Edward Thomson fc983542 2020-04-05T22:12:57 sysdir: use GIT_ASSERT
Edward Thomson c06e7987 2020-04-05T22:12:20 submodule: use GIT_ASSERT
Edward Thomson 203832c3 2020-11-21T23:04:04 strarray: use GIT_ASSERT
Edward Thomson 1e3c2d9c 2020-04-05T22:07:11 status: use GIT_ASSERT
Edward Thomson 9522de90 2020-04-05T22:06:25 stash: use GIT_ASSERT
Edward Thomson 9cf2c9dc 2020-04-05T22:05:40 signature: use GIT_ASSERT
Edward Thomson 42594f3f 2020-04-05T22:00:36 signature: use GIT_ASSERT
Edward Thomson ef6b12b0 2020-04-05T21:58:40 revwalk: use GIT_ASSERT
Edward Thomson 5bd139e9 2020-04-05T21:57:22 revparse: use GIT_ASSERT
Edward Thomson 055fbf6d 2020-04-05T21:55:59 revert: use GIT_ASSERT
Edward Thomson 59f46913 2020-04-05T21:55:13 reset: use GIT_ASSERT
Edward Thomson 36adde56 2020-04-05T21:17:42 repository: use GIT_ASSERT
Edward Thomson d4196c06 2020-04-05T19:42:16 remote: use GIT_ASSERT
Edward Thomson 89ee31a8 2020-04-05T19:35:19 refspec: use GIT_ASSERT
Edward Thomson 7f0cabd1 2020-04-05T19:33:22 refs: use GIT_ASSERT
Edward Thomson 7d75e1c7 2020-04-05T19:28:13 reflog: use GIT_ASSERT
Edward Thomson 98a4f278 2020-04-05T21:38:42 refdb_fs: use GIT_ASSERT
Edward Thomson 8d66d57f 2020-04-05T19:20:01 refdb: use GIT_ASSERT