rugged 1.7.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +120 -63
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +99 -14
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +23 -24
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +94 -18
- data/vendor/libgit2/include/git2/repository.h +57 -21
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +43 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +24 -3
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +130 -44
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +186 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +92 -0
- data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +389 -298
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +99 -88
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +68 -90
- data/vendor/libgit2/src/libgit2/index.h +2 -2
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +34 -38
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +42 -37
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/midx.c +28 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +5 -4
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +32 -5
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +30 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +26 -7
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +121 -61
- data/vendor/libgit2/src/libgit2/repository.c +231 -51
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +4 -1
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/fs_path.c +15 -4
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +13 -7
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +2 -2
- data/vendor/libgit2/src/util/util.h +4 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- metadata +45 -28
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -293
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
#include "repository.h"
|
|
20
20
|
#include "blame_git.h"
|
|
21
21
|
|
|
22
|
-
|
|
23
22
|
static int hunk_byfinalline_search_cmp(const void *key, const void *entry)
|
|
24
23
|
{
|
|
25
24
|
git_blame_hunk *hunk = (git_blame_hunk*)entry;
|
|
@@ -81,9 +80,12 @@ static git_blame_hunk *new_hunk(
|
|
|
81
80
|
|
|
82
81
|
static void free_hunk(git_blame_hunk *hunk)
|
|
83
82
|
{
|
|
84
|
-
git__free((
|
|
83
|
+
git__free((char *)hunk->orig_path);
|
|
84
|
+
git__free((char *)hunk->summary);
|
|
85
85
|
git_signature_free(hunk->final_signature);
|
|
86
|
+
git_signature_free(hunk->final_committer);
|
|
86
87
|
git_signature_free(hunk->orig_signature);
|
|
88
|
+
git_signature_free(hunk->orig_committer);
|
|
87
89
|
git__free(hunk);
|
|
88
90
|
}
|
|
89
91
|
|
|
@@ -104,7 +106,10 @@ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk, git_blame *blame)
|
|
|
104
106
|
newhunk->boundary = hunk->boundary;
|
|
105
107
|
|
|
106
108
|
if (git_signature_dup(&newhunk->final_signature, hunk->final_signature) < 0 ||
|
|
107
|
-
|
|
109
|
+
git_signature_dup(&newhunk->final_committer, hunk->final_committer) < 0 ||
|
|
110
|
+
git_signature_dup(&newhunk->orig_signature, hunk->orig_signature) < 0 ||
|
|
111
|
+
git_signature_dup(&newhunk->orig_committer, hunk->orig_committer) < 0 ||
|
|
112
|
+
(newhunk->summary = git__strdup(hunk->summary)) == NULL) {
|
|
108
113
|
free_hunk(newhunk);
|
|
109
114
|
return NULL;
|
|
110
115
|
}
|
|
@@ -117,12 +122,12 @@ static git_blame_hunk *dup_hunk(git_blame_hunk *hunk, git_blame *blame)
|
|
|
117
122
|
static void shift_hunks_by(git_vector *v, size_t start_line, int shift_by)
|
|
118
123
|
{
|
|
119
124
|
size_t i;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
hunk->final_start_line_number += shift_by;
|
|
125
|
+
for (i = 0; i < v->length; i++) {
|
|
126
|
+
git_blame_hunk *hunk = (git_blame_hunk*)v->contents[i];
|
|
127
|
+
if(hunk->final_start_line_number < start_line){
|
|
128
|
+
continue;
|
|
125
129
|
}
|
|
130
|
+
hunk->final_start_line_number += shift_by;
|
|
126
131
|
}
|
|
127
132
|
}
|
|
128
133
|
|
|
@@ -139,10 +144,9 @@ git_blame *git_blame__alloc(
|
|
|
139
144
|
gbr->options = opts;
|
|
140
145
|
|
|
141
146
|
if (git_vector_init(&gbr->hunks, 8, hunk_cmp) < 0 ||
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
{
|
|
147
|
+
git_vector_init(&gbr->paths, 8, paths_cmp) < 0 ||
|
|
148
|
+
(gbr->path = git__strdup(path)) == NULL ||
|
|
149
|
+
git_vector_insert(&gbr->paths, git__strdup(path)) < 0) {
|
|
146
150
|
git_blame_free(gbr);
|
|
147
151
|
return NULL;
|
|
148
152
|
}
|
|
@@ -165,9 +169,11 @@ void git_blame_free(git_blame *blame)
|
|
|
165
169
|
|
|
166
170
|
git_vector_foreach(&blame->hunks, i, hunk)
|
|
167
171
|
free_hunk(hunk);
|
|
168
|
-
git_vector_free(&blame->hunks);
|
|
169
172
|
|
|
170
|
-
|
|
173
|
+
git_vector_dispose(&blame->hunks);
|
|
174
|
+
git_array_clear(blame->lines);
|
|
175
|
+
|
|
176
|
+
git_vector_dispose_deep(&blame->paths);
|
|
171
177
|
|
|
172
178
|
git_array_clear(blame->line_index);
|
|
173
179
|
|
|
@@ -178,31 +184,76 @@ void git_blame_free(git_blame *blame)
|
|
|
178
184
|
git__free(blame);
|
|
179
185
|
}
|
|
180
186
|
|
|
181
|
-
|
|
187
|
+
size_t git_blame_hunkcount(git_blame *blame)
|
|
182
188
|
{
|
|
183
189
|
GIT_ASSERT_ARG(blame);
|
|
184
|
-
|
|
190
|
+
|
|
191
|
+
return blame->hunks.length;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
size_t git_blame_linecount(git_blame *blame)
|
|
195
|
+
{
|
|
196
|
+
GIT_ASSERT_ARG(blame);
|
|
197
|
+
|
|
198
|
+
return git_array_size(blame->line_index);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
const git_blame_line *git_blame_line_byindex(
|
|
202
|
+
git_blame *blame,
|
|
203
|
+
size_t idx)
|
|
204
|
+
{
|
|
205
|
+
GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
|
|
206
|
+
GIT_ASSERT_WITH_RETVAL(idx > 0 && idx <= git_array_size(blame->line_index), NULL);
|
|
207
|
+
|
|
208
|
+
return git_array_get(blame->lines, idx - 1);
|
|
185
209
|
}
|
|
186
210
|
|
|
187
|
-
const git_blame_hunk *
|
|
211
|
+
const git_blame_hunk *git_blame_hunk_byindex(
|
|
212
|
+
git_blame *blame,
|
|
213
|
+
size_t index)
|
|
188
214
|
{
|
|
189
215
|
GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
|
|
190
|
-
return
|
|
216
|
+
return git_vector_get(&blame->hunks, index);
|
|
191
217
|
}
|
|
192
218
|
|
|
193
|
-
const git_blame_hunk *
|
|
219
|
+
const git_blame_hunk *git_blame_hunk_byline(
|
|
220
|
+
git_blame *blame,
|
|
221
|
+
size_t lineno)
|
|
194
222
|
{
|
|
195
223
|
size_t i, new_lineno = lineno;
|
|
196
224
|
|
|
197
225
|
GIT_ASSERT_ARG_WITH_RETVAL(blame, NULL);
|
|
198
226
|
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
|
|
227
|
+
if (git_vector_bsearch2(&i, &blame->hunks,
|
|
228
|
+
hunk_byfinalline_search_cmp, &new_lineno) != 0)
|
|
229
|
+
return NULL;
|
|
230
|
+
|
|
231
|
+
return git_blame_hunk_byindex(blame, i);
|
|
232
|
+
}
|
|
202
233
|
|
|
203
|
-
|
|
234
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
235
|
+
uint32_t git_blame_get_hunk_count(git_blame *blame)
|
|
236
|
+
{
|
|
237
|
+
size_t count = git_blame_hunkcount(blame);
|
|
238
|
+
GIT_ASSERT(count < UINT32_MAX);
|
|
239
|
+
return (uint32_t)count;
|
|
204
240
|
}
|
|
205
241
|
|
|
242
|
+
const git_blame_hunk *git_blame_get_hunk_byindex(
|
|
243
|
+
git_blame *blame,
|
|
244
|
+
uint32_t index)
|
|
245
|
+
{
|
|
246
|
+
return git_blame_hunk_byindex(blame, index);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const git_blame_hunk *git_blame_get_hunk_byline(
|
|
250
|
+
git_blame *blame,
|
|
251
|
+
size_t lineno)
|
|
252
|
+
{
|
|
253
|
+
return git_blame_hunk_byline(blame, lineno);
|
|
254
|
+
}
|
|
255
|
+
#endif
|
|
256
|
+
|
|
206
257
|
static int normalize_options(
|
|
207
258
|
git_blame_options *out,
|
|
208
259
|
const git_blame_options *in,
|
|
@@ -282,31 +333,55 @@ static int index_blob_lines(git_blame *blame)
|
|
|
282
333
|
const char *buf = blame->final_buf;
|
|
283
334
|
size_t len = blame->final_buf_size;
|
|
284
335
|
int num = 0, incomplete = 0, bol = 1;
|
|
336
|
+
git_blame_line *line = NULL;
|
|
285
337
|
size_t *i;
|
|
286
338
|
|
|
287
339
|
if (len && buf[len-1] != '\n')
|
|
288
340
|
incomplete++; /* incomplete line at the end */
|
|
341
|
+
|
|
289
342
|
while (len--) {
|
|
290
343
|
if (bol) {
|
|
291
344
|
i = git_array_alloc(blame->line_index);
|
|
292
345
|
GIT_ERROR_CHECK_ALLOC(i);
|
|
293
346
|
*i = buf - blame->final_buf;
|
|
347
|
+
|
|
348
|
+
GIT_ASSERT(line == NULL);
|
|
349
|
+
line = git_array_alloc(blame->lines);
|
|
350
|
+
GIT_ERROR_CHECK_ALLOC(line);
|
|
351
|
+
|
|
352
|
+
line->ptr = buf;
|
|
294
353
|
bol = 0;
|
|
295
354
|
}
|
|
355
|
+
|
|
296
356
|
if (*buf++ == '\n') {
|
|
357
|
+
GIT_ASSERT(line);
|
|
358
|
+
line->len = (buf - line->ptr) - 1;
|
|
359
|
+
line = NULL;
|
|
360
|
+
|
|
297
361
|
num++;
|
|
298
362
|
bol = 1;
|
|
299
363
|
}
|
|
300
364
|
}
|
|
365
|
+
|
|
301
366
|
i = git_array_alloc(blame->line_index);
|
|
302
367
|
GIT_ERROR_CHECK_ALLOC(i);
|
|
303
368
|
*i = buf - blame->final_buf;
|
|
369
|
+
|
|
370
|
+
if (!bol) {
|
|
371
|
+
GIT_ASSERT(line);
|
|
372
|
+
line->len = buf - line->ptr;
|
|
373
|
+
line = NULL;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
GIT_ASSERT(!line);
|
|
377
|
+
|
|
304
378
|
blame->num_lines = num + incomplete;
|
|
305
379
|
return blame->num_lines;
|
|
306
380
|
}
|
|
307
381
|
|
|
308
382
|
static git_blame_hunk *hunk_from_entry(git_blame__entry *e, git_blame *blame)
|
|
309
383
|
{
|
|
384
|
+
const char *summary;
|
|
310
385
|
git_blame_hunk *h = new_hunk(
|
|
311
386
|
e->lno+1, e->num_lines, e->s_lno+1, e->suspect->path,
|
|
312
387
|
blame);
|
|
@@ -316,9 +391,19 @@ static git_blame_hunk *hunk_from_entry(git_blame__entry *e, git_blame *blame)
|
|
|
316
391
|
|
|
317
392
|
git_oid_cpy(&h->final_commit_id, git_commit_id(e->suspect->commit));
|
|
318
393
|
git_oid_cpy(&h->orig_commit_id, git_commit_id(e->suspect->commit));
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
394
|
+
|
|
395
|
+
if (git_commit_author_with_mailmap(
|
|
396
|
+
&h->final_signature, e->suspect->commit, blame->mailmap) < 0 ||
|
|
397
|
+
git_commit_committer_with_mailmap(
|
|
398
|
+
&h->final_committer, e->suspect->commit, blame->mailmap) < 0 ||
|
|
399
|
+
git_signature_dup(&h->orig_signature, h->final_signature) < 0 ||
|
|
400
|
+
git_signature_dup(&h->orig_committer, h->final_committer) < 0 ||
|
|
401
|
+
(summary = git_commit_summary(e->suspect->commit)) == NULL ||
|
|
402
|
+
(h->summary = git__strdup(summary)) == NULL) {
|
|
403
|
+
free_hunk(h);
|
|
404
|
+
return NULL;
|
|
405
|
+
}
|
|
406
|
+
|
|
322
407
|
h->boundary = e->is_boundary ? 1 : 0;
|
|
323
408
|
return h;
|
|
324
409
|
}
|
|
@@ -347,12 +432,12 @@ static int blame_internal(git_blame *blame)
|
|
|
347
432
|
|
|
348
433
|
if ((error = load_blob(blame)) < 0 ||
|
|
349
434
|
(error = git_blame__get_origin(&o, blame, blame->final, blame->path)) < 0)
|
|
350
|
-
goto
|
|
435
|
+
goto on_error;
|
|
351
436
|
|
|
352
437
|
if (git_blob_rawsize(blame->final_blob) > SIZE_MAX) {
|
|
353
438
|
git_error_set(GIT_ERROR_NOMEMORY, "blob is too large to blame");
|
|
354
439
|
error = -1;
|
|
355
|
-
goto
|
|
440
|
+
goto on_error;
|
|
356
441
|
}
|
|
357
442
|
|
|
358
443
|
blame->final_buf = git_blob_rawcontent(blame->final_blob);
|
|
@@ -371,17 +456,19 @@ static int blame_internal(git_blame *blame)
|
|
|
371
456
|
|
|
372
457
|
blame->ent = ent;
|
|
373
458
|
|
|
374
|
-
error = git_blame__like_git(blame, blame->options.flags)
|
|
459
|
+
if ((error = git_blame__like_git(blame, blame->options.flags)) < 0)
|
|
460
|
+
goto on_error;
|
|
375
461
|
|
|
376
|
-
|
|
377
|
-
for (ent = blame->ent; ent; ) {
|
|
378
|
-
git_blame__entry *e = ent->next;
|
|
462
|
+
for (ent = blame->ent; ent; ent = ent->next) {
|
|
379
463
|
git_blame_hunk *h = hunk_from_entry(ent, blame);
|
|
380
|
-
|
|
381
464
|
git_vector_insert(&blame->hunks, h);
|
|
465
|
+
}
|
|
382
466
|
|
|
467
|
+
on_error:
|
|
468
|
+
for (ent = blame->ent; ent; ) {
|
|
469
|
+
git_blame__entry *next = ent->next;
|
|
383
470
|
git_blame__free_entry(ent);
|
|
384
|
-
ent =
|
|
471
|
+
ent = next;
|
|
385
472
|
}
|
|
386
473
|
|
|
387
474
|
return error;
|
|
@@ -444,21 +531,20 @@ static int buffer_hunk_cb(
|
|
|
444
531
|
|
|
445
532
|
GIT_UNUSED(delta);
|
|
446
533
|
|
|
447
|
-
wedge_line = (hunk->old_lines
|
|
534
|
+
wedge_line = (hunk->new_start >= hunk->old_start || hunk->old_lines==0) ? hunk->new_start : hunk->old_start;
|
|
448
535
|
blame->current_diff_line = wedge_line;
|
|
449
|
-
|
|
450
|
-
blame->current_hunk = (git_blame_hunk*)git_blame_get_hunk_byline(blame, wedge_line);
|
|
536
|
+
blame->current_hunk = (git_blame_hunk*)git_blame_hunk_byline(blame, wedge_line);
|
|
451
537
|
if (!blame->current_hunk) {
|
|
452
538
|
/* Line added at the end of the file */
|
|
453
539
|
blame->current_hunk = new_hunk(wedge_line, 0, wedge_line,
|
|
454
540
|
blame->path, blame);
|
|
541
|
+
blame->current_diff_line++;
|
|
455
542
|
GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
|
|
456
|
-
|
|
457
543
|
git_vector_insert(&blame->hunks, blame->current_hunk);
|
|
458
544
|
} else if (!hunk_starts_at_or_after_line(blame->current_hunk, wedge_line)){
|
|
459
545
|
/* If this hunk doesn't start between existing hunks, split a hunk up so it does */
|
|
460
546
|
blame->current_hunk = split_hunk_in_vector(&blame->hunks, blame->current_hunk,
|
|
461
|
-
wedge_line - blame->current_hunk->
|
|
547
|
+
wedge_line - blame->current_hunk->final_start_line_number, true,
|
|
462
548
|
blame);
|
|
463
549
|
GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
|
|
464
550
|
}
|
|
@@ -484,13 +570,12 @@ static int buffer_line_cb(
|
|
|
484
570
|
hunk_ends_at_or_before_line(blame->current_hunk, blame->current_diff_line)) {
|
|
485
571
|
/* Append to the current buffer-blame hunk */
|
|
486
572
|
blame->current_hunk->lines_in_hunk++;
|
|
487
|
-
shift_hunks_by(&blame->hunks, blame->current_diff_line
|
|
573
|
+
shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
|
|
488
574
|
} else {
|
|
489
575
|
/* Create a new buffer-blame hunk with this line */
|
|
490
576
|
shift_hunks_by(&blame->hunks, blame->current_diff_line, 1);
|
|
491
577
|
blame->current_hunk = new_hunk(blame->current_diff_line, 1, 0, blame->path, blame);
|
|
492
578
|
GIT_ERROR_CHECK_ALLOC(blame->current_hunk);
|
|
493
|
-
|
|
494
579
|
git_vector_insert_sorted(&blame->hunks, blame->current_hunk, NULL);
|
|
495
580
|
}
|
|
496
581
|
blame->current_diff_line++;
|
|
@@ -498,15 +583,16 @@ static int buffer_line_cb(
|
|
|
498
583
|
|
|
499
584
|
if (line->origin == GIT_DIFF_LINE_DELETION) {
|
|
500
585
|
/* Trim the line from the current hunk; remove it if it's now empty */
|
|
501
|
-
size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk
|
|
586
|
+
size_t shift_base = blame->current_diff_line + blame->current_hunk->lines_in_hunk;
|
|
502
587
|
|
|
503
588
|
if (--(blame->current_hunk->lines_in_hunk) == 0) {
|
|
504
589
|
size_t i;
|
|
505
|
-
|
|
590
|
+
size_t i_next;
|
|
506
591
|
if (!git_vector_search2(&i, &blame->hunks, ptrs_equal_cmp, blame->current_hunk)) {
|
|
507
592
|
git_vector_remove(&blame->hunks, i);
|
|
508
593
|
free_hunk(blame->current_hunk);
|
|
509
|
-
|
|
594
|
+
i_next = min( i , blame->hunks.length -1);
|
|
595
|
+
blame->current_hunk = (git_blame_hunk*)git_blame_hunk_byindex(blame, (uint32_t)i_next);
|
|
510
596
|
}
|
|
511
597
|
}
|
|
512
598
|
shift_hunks_by(&blame->hunks, shift_base, -1);
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
#include "odb.h"
|
|
15
15
|
#include "object.h"
|
|
16
16
|
#include "git2/oid.h"
|
|
17
|
+
#include "hashmap_oid.h"
|
|
18
|
+
|
|
19
|
+
GIT_HASHMAP_OID_FUNCTIONS(git_cache_oidmap, GIT_HASHMAP_INLINE, git_cached_obj *);
|
|
17
20
|
|
|
18
21
|
bool git_cache__enabled = true;
|
|
19
22
|
ssize_t git_cache__max_storage = (256 * 1024 * 1024);
|
|
@@ -45,9 +48,6 @@ int git_cache_init(git_cache *cache)
|
|
|
45
48
|
{
|
|
46
49
|
memset(cache, 0, sizeof(*cache));
|
|
47
50
|
|
|
48
|
-
if ((git_oidmap_new(&cache->map)) < 0)
|
|
49
|
-
return -1;
|
|
50
|
-
|
|
51
51
|
if (git_rwlock_init(&cache->lock)) {
|
|
52
52
|
git_error_set(GIT_ERROR_OS, "failed to initialize cache rwlock");
|
|
53
53
|
return -1;
|
|
@@ -60,15 +60,15 @@ int git_cache_init(git_cache *cache)
|
|
|
60
60
|
static void clear_cache(git_cache *cache)
|
|
61
61
|
{
|
|
62
62
|
git_cached_obj *evict = NULL;
|
|
63
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
63
64
|
|
|
64
65
|
if (git_cache_size(cache) == 0)
|
|
65
66
|
return;
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
while (git_cache_oidmap_iterate(&iter, NULL, &evict, &cache->map) == 0)
|
|
68
69
|
git_cached_obj_decref(evict);
|
|
69
|
-
});
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
git_cache_oidmap_clear(&cache->map);
|
|
72
72
|
git_atomic_ssize_add(&git_cache__current_storage, -cache->used_memory);
|
|
73
73
|
cache->used_memory = 0;
|
|
74
74
|
}
|
|
@@ -83,10 +83,15 @@ void git_cache_clear(git_cache *cache)
|
|
|
83
83
|
git_rwlock_wrunlock(&cache->lock);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
size_t git_cache_size(git_cache *cache)
|
|
87
|
+
{
|
|
88
|
+
return git_cache_oidmap_size(&cache->map);
|
|
89
|
+
}
|
|
90
|
+
|
|
86
91
|
void git_cache_dispose(git_cache *cache)
|
|
87
92
|
{
|
|
88
93
|
git_cache_clear(cache);
|
|
89
|
-
|
|
94
|
+
git_cache_oidmap_dispose(&cache->map);
|
|
90
95
|
git_rwlock_free(&cache->lock);
|
|
91
96
|
git__memzero(cache, sizeof(*cache));
|
|
92
97
|
}
|
|
@@ -94,8 +99,9 @@ void git_cache_dispose(git_cache *cache)
|
|
|
94
99
|
/* Called with lock */
|
|
95
100
|
static void cache_evict_entries(git_cache *cache)
|
|
96
101
|
{
|
|
97
|
-
size_t evict_count = git_cache_size(cache) / 2048
|
|
102
|
+
size_t evict_count = git_cache_size(cache) / 2048;
|
|
98
103
|
ssize_t evicted_memory = 0;
|
|
104
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
99
105
|
|
|
100
106
|
if (evict_count < 8)
|
|
101
107
|
evict_count = 8;
|
|
@@ -106,17 +112,16 @@ static void cache_evict_entries(git_cache *cache)
|
|
|
106
112
|
return;
|
|
107
113
|
}
|
|
108
114
|
|
|
109
|
-
i = 0;
|
|
110
115
|
while (evict_count > 0) {
|
|
111
|
-
git_cached_obj *evict;
|
|
112
116
|
const git_oid *key;
|
|
117
|
+
git_cached_obj *evict;
|
|
113
118
|
|
|
114
|
-
if (
|
|
119
|
+
if (git_cache_oidmap_iterate(&iter, &key, &evict, &cache->map) != 0)
|
|
115
120
|
break;
|
|
116
121
|
|
|
117
122
|
evict_count--;
|
|
118
123
|
evicted_memory += evict->size;
|
|
119
|
-
|
|
124
|
+
git_cache_oidmap_remove(&cache->map, key);
|
|
120
125
|
git_cached_obj_decref(evict);
|
|
121
126
|
}
|
|
122
127
|
|
|
@@ -132,12 +137,12 @@ static bool cache_should_store(git_object_t object_type, size_t object_size)
|
|
|
132
137
|
|
|
133
138
|
static void *cache_get(git_cache *cache, const git_oid *oid, unsigned int flags)
|
|
134
139
|
{
|
|
135
|
-
git_cached_obj *entry;
|
|
140
|
+
git_cached_obj *entry = NULL;
|
|
136
141
|
|
|
137
142
|
if (!git_cache__enabled || git_rwlock_rdlock(&cache->lock) < 0)
|
|
138
143
|
return NULL;
|
|
139
144
|
|
|
140
|
-
if ((entry
|
|
145
|
+
if (git_cache_oidmap_get(&entry, &cache->map, oid) == 0) {
|
|
141
146
|
if (flags && entry->flags != flags) {
|
|
142
147
|
entry = NULL;
|
|
143
148
|
} else {
|
|
@@ -172,8 +177,8 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
|
|
|
172
177
|
cache_evict_entries(cache);
|
|
173
178
|
|
|
174
179
|
/* not found */
|
|
175
|
-
if ((stored_entry
|
|
176
|
-
if (
|
|
180
|
+
if (git_cache_oidmap_get(&stored_entry, &cache->map, &entry->oid) != 0) {
|
|
181
|
+
if (git_cache_oidmap_put(&cache->map, &entry->oid, entry) == 0) {
|
|
177
182
|
git_cached_obj_incref(entry);
|
|
178
183
|
cache->used_memory += entry->size;
|
|
179
184
|
git_atomic_ssize_add(&git_cache__current_storage, (ssize_t)entry->size);
|
|
@@ -187,7 +192,7 @@ static void *cache_store(git_cache *cache, git_cached_obj *entry)
|
|
|
187
192
|
entry = stored_entry;
|
|
188
193
|
} else if (stored_entry->flags == GIT_CACHE_STORE_RAW &&
|
|
189
194
|
entry->flags == GIT_CACHE_STORE_PARSED) {
|
|
190
|
-
if (
|
|
195
|
+
if (git_cache_oidmap_put(&cache->map, &entry->oid, entry) == 0) {
|
|
191
196
|
git_cached_obj_decref(stored_entry);
|
|
192
197
|
git_cached_obj_incref(entry);
|
|
193
198
|
} else {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#include "git2/odb.h"
|
|
15
15
|
|
|
16
16
|
#include "thread.h"
|
|
17
|
-
#include "
|
|
17
|
+
#include "hashmap_oid.h"
|
|
18
18
|
|
|
19
19
|
enum {
|
|
20
20
|
GIT_CACHE_STORE_ANY = 0,
|
|
@@ -30,10 +30,12 @@ typedef struct {
|
|
|
30
30
|
git_atomic32 refcount;
|
|
31
31
|
} git_cached_obj;
|
|
32
32
|
|
|
33
|
+
GIT_HASHMAP_OID_STRUCT(git_cache_oidmap, git_cached_obj *);
|
|
34
|
+
|
|
33
35
|
typedef struct {
|
|
34
|
-
|
|
35
|
-
git_rwlock
|
|
36
|
-
ssize_t
|
|
36
|
+
git_cache_oidmap map;
|
|
37
|
+
git_rwlock lock;
|
|
38
|
+
ssize_t used_memory;
|
|
37
39
|
} git_cache;
|
|
38
40
|
|
|
39
41
|
extern bool git_cache__enabled;
|
|
@@ -45,6 +47,7 @@ int git_cache_set_max_object_size(git_object_t type, size_t size);
|
|
|
45
47
|
int git_cache_init(git_cache *cache);
|
|
46
48
|
void git_cache_dispose(git_cache *cache);
|
|
47
49
|
void git_cache_clear(git_cache *cache);
|
|
50
|
+
size_t git_cache_size(git_cache *cache);
|
|
48
51
|
|
|
49
52
|
void *git_cache_store_raw(git_cache *cache, git_odb_object *entry);
|
|
50
53
|
void *git_cache_store_parsed(git_cache *cache, git_object *entry);
|
|
@@ -53,11 +56,6 @@ git_odb_object *git_cache_get_raw(git_cache *cache, const git_oid *oid);
|
|
|
53
56
|
git_object *git_cache_get_parsed(git_cache *cache, const git_oid *oid);
|
|
54
57
|
void *git_cache_get_any(git_cache *cache, const git_oid *oid);
|
|
55
58
|
|
|
56
|
-
GIT_INLINE(size_t) git_cache_size(git_cache *cache)
|
|
57
|
-
{
|
|
58
|
-
return (size_t)git_oidmap_size(cache->map);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
59
|
GIT_INLINE(void) git_cached_obj_incref(void *_obj)
|
|
62
60
|
{
|
|
63
61
|
git_cached_obj *obj = _obj;
|