rugged 1.7.2 → 1.9.4
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/ext/rugged/extconf.rb +4 -4
- data/ext/rugged/rugged.c +12 -1
- data/ext/rugged/rugged_blame.c +22 -6
- data/ext/rugged/rugged_blob.c +24 -9
- data/ext/rugged/rugged_branch.c +10 -7
- data/ext/rugged/rugged_branch_collection.c +8 -6
- data/ext/rugged/rugged_commit.c +7 -6
- data/ext/rugged/rugged_config.c +20 -11
- data/ext/rugged/rugged_diff.c +26 -12
- data/ext/rugged/rugged_diff_hunk.c +2 -1
- data/ext/rugged/rugged_index.c +39 -29
- data/ext/rugged/rugged_note.c +7 -6
- data/ext/rugged/rugged_object.c +3 -2
- data/ext/rugged/rugged_patch.c +23 -9
- data/ext/rugged/rugged_rebase.c +22 -10
- data/ext/rugged/rugged_reference.c +22 -13
- data/ext/rugged/rugged_reference_collection.c +9 -7
- data/ext/rugged/rugged_remote.c +23 -12
- data/ext/rugged/rugged_remote_collection.c +11 -9
- data/ext/rugged/rugged_repo.c +60 -45
- data/ext/rugged/rugged_revwalk.c +22 -12
- data/ext/rugged/rugged_submodule.c +23 -20
- data/ext/rugged/rugged_submodule_collection.c +20 -9
- data/ext/rugged/rugged_tag.c +6 -4
- data/ext/rugged/rugged_tag_collection.c +7 -5
- data/ext/rugged/rugged_tree.c +27 -15
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +3 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -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 +30 -19
- 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 +3 -3
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
- 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 +134 -4
- 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 +100 -15
- 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 +50 -3
- 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 -25
- 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 +12 -3
- 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 +113 -25
- 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 +25 -4
- 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 +46 -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 +3 -4
- 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 +31 -5
- 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 +55 -21
- 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 +17 -5
- 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 +192 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +93 -1
- data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +390 -299
- 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 +101 -89
- 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 +195 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/delta.c +5 -1
- 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 +13 -20
- 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_stats.c +19 -12
- 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/fetchhead.c +1 -1
- 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 +76 -98
- data/vendor/libgit2/src/libgit2/index.h +5 -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 +36 -40
- 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 +43 -38
- data/vendor/libgit2/src/libgit2/merge.h +4 -0
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
- data/vendor/libgit2/src/libgit2/message.c +1 -1
- data/vendor/libgit2/src/libgit2/midx.c +30 -18
- 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 +7 -10
- data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
- 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 +36 -10
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +33 -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 +41 -13
- 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 +125 -62
- data/vendor/libgit2/src/libgit2/remote.h +0 -1
- data/vendor/libgit2/src/libgit2/repository.c +235 -54
- 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/socket.c +30 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +118 -68
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +4 -2
- 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/auth_sspi.c +2 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/git.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 +124 -81
- 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 +16 -8
- data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
- 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 +386 -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 +7 -10
- 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 +81 -10
- data/vendor/libgit2/src/util/fs_path.h +29 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +24 -7
- 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/builtin.c +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +148 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +425 -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 +17 -11
- 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 +223 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/runtime.c +2 -2
- 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 +20 -8
- data/vendor/libgit2/src/util/str.h +5 -3
- 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 +706 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +18 -5
- data/vendor/libgit2/src/util/util.h +5 -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/path_w32.c +81 -5
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +522 -0
- metadata +60 -32
- 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
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
#include "futils.h"
|
|
12
12
|
#include "map.h"
|
|
13
13
|
#include "runtime.h"
|
|
14
|
-
#include "strmap.h"
|
|
15
14
|
#include "pack.h"
|
|
16
15
|
|
|
17
16
|
#define DEFAULT_WINDOW_SIZE \
|
|
@@ -29,33 +28,27 @@ size_t git_mwindow__window_size = DEFAULT_WINDOW_SIZE;
|
|
|
29
28
|
size_t git_mwindow__mapped_limit = DEFAULT_MAPPED_LIMIT;
|
|
30
29
|
size_t git_mwindow__file_limit = DEFAULT_FILE_LIMIT;
|
|
31
30
|
|
|
32
|
-
/* Mutex to control access to `git_mwindow__mem_ctl` and `
|
|
33
|
-
git_mutex
|
|
31
|
+
/* Mutex to control access to `git_mwindow__mem_ctl` and `git_mwindow__pack_cache`. */
|
|
32
|
+
git_mutex git_mwindow__mutex;
|
|
34
33
|
|
|
35
|
-
/* Whenever you want to read or modify this, grab `
|
|
34
|
+
/* Whenever you want to read or modify this, grab `git_mwindow__mutex` */
|
|
36
35
|
git_mwindow_ctl git_mwindow__mem_ctl;
|
|
37
36
|
|
|
38
37
|
/* Global list of mwindow files, to open packs once across repos */
|
|
39
|
-
|
|
38
|
+
GIT_HASHMAP_STR_FUNCTIONS(git_mwindow_packmap, , struct git_pack_file *);
|
|
39
|
+
git_mwindow_packmap git_mwindow__pack_cache;
|
|
40
40
|
|
|
41
41
|
static void git_mwindow_global_shutdown(void)
|
|
42
42
|
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
git_mutex_free(&git__mwindow_mutex);
|
|
46
|
-
|
|
47
|
-
git__pack_cache = NULL;
|
|
48
|
-
git_strmap_free(tmp);
|
|
43
|
+
git_mutex_free(&git_mwindow__mutex);
|
|
44
|
+
git_mwindow_packmap_dispose(&git_mwindow__pack_cache);
|
|
49
45
|
}
|
|
50
46
|
|
|
51
47
|
int git_mwindow_global_init(void)
|
|
52
48
|
{
|
|
53
49
|
int error;
|
|
54
50
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if ((error = git_mutex_init(&git__mwindow_mutex)) < 0 ||
|
|
58
|
-
(error = git_strmap_new(&git__pack_cache)) < 0)
|
|
51
|
+
if ((error = git_mutex_init(&git_mwindow__mutex)) < 0)
|
|
59
52
|
return error;
|
|
60
53
|
|
|
61
54
|
return git_runtime_shutdown_register(git_mwindow_global_shutdown);
|
|
@@ -73,31 +66,34 @@ int git_mwindow_get_pack(
|
|
|
73
66
|
if ((error = git_packfile__name(&packname, path)) < 0)
|
|
74
67
|
return error;
|
|
75
68
|
|
|
76
|
-
if (git_mutex_lock(&
|
|
69
|
+
if (git_mutex_lock(&git_mwindow__mutex) < 0) {
|
|
77
70
|
git_error_set(GIT_ERROR_OS, "failed to lock mwindow mutex");
|
|
78
71
|
return -1;
|
|
79
72
|
}
|
|
80
73
|
|
|
81
|
-
|
|
74
|
+
error = git_mwindow_packmap_get(&pack, &git_mwindow__pack_cache, packname);
|
|
82
75
|
git__free(packname);
|
|
83
76
|
|
|
84
|
-
if (
|
|
77
|
+
if (error == 0) {
|
|
85
78
|
git_atomic32_inc(&pack->refcount);
|
|
86
|
-
git_mutex_unlock(&
|
|
79
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
87
80
|
*out = pack;
|
|
88
81
|
return 0;
|
|
82
|
+
} else if (error != GIT_ENOTFOUND) {
|
|
83
|
+
return error;
|
|
89
84
|
}
|
|
90
85
|
|
|
91
86
|
/* If we didn't find it, we need to create it */
|
|
92
87
|
if ((error = git_packfile_alloc(&pack, path, oid_type)) < 0) {
|
|
93
|
-
git_mutex_unlock(&
|
|
88
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
94
89
|
return error;
|
|
95
90
|
}
|
|
96
91
|
|
|
97
92
|
git_atomic32_inc(&pack->refcount);
|
|
98
93
|
|
|
99
|
-
error =
|
|
100
|
-
git_mutex_unlock(&
|
|
94
|
+
error = git_mwindow_packmap_put(&git_mwindow__pack_cache, pack->pack_name, pack);
|
|
95
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
96
|
+
|
|
101
97
|
if (error < 0) {
|
|
102
98
|
git_packfile_free(pack, false);
|
|
103
99
|
return error;
|
|
@@ -112,21 +108,18 @@ int git_mwindow_put_pack(struct git_pack_file *pack)
|
|
|
112
108
|
int count, error;
|
|
113
109
|
struct git_pack_file *pack_to_delete = NULL;
|
|
114
110
|
|
|
115
|
-
if ((error = git_mutex_lock(&
|
|
111
|
+
if ((error = git_mutex_lock(&git_mwindow__mutex)) < 0)
|
|
116
112
|
return error;
|
|
117
113
|
|
|
118
|
-
/* put before get would be a corrupted state */
|
|
119
|
-
GIT_ASSERT(git__pack_cache);
|
|
120
|
-
|
|
121
114
|
/* if we cannot find it, the state is corrupted */
|
|
122
|
-
GIT_ASSERT(
|
|
115
|
+
GIT_ASSERT(git_mwindow_packmap_contains(&git_mwindow__pack_cache, pack->pack_name));
|
|
123
116
|
|
|
124
117
|
count = git_atomic32_dec(&pack->refcount);
|
|
125
118
|
if (count == 0) {
|
|
126
|
-
|
|
119
|
+
git_mwindow_packmap_remove(&git_mwindow__pack_cache, pack->pack_name);
|
|
127
120
|
pack_to_delete = pack;
|
|
128
121
|
}
|
|
129
|
-
git_mutex_unlock(&
|
|
122
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
130
123
|
git_packfile_free(pack_to_delete, false);
|
|
131
124
|
|
|
132
125
|
return 0;
|
|
@@ -134,7 +127,7 @@ int git_mwindow_put_pack(struct git_pack_file *pack)
|
|
|
134
127
|
|
|
135
128
|
/*
|
|
136
129
|
* Free all the windows in a sequence, typically because we're done
|
|
137
|
-
* with the file. Needs to hold the
|
|
130
|
+
* with the file. Needs to hold the git_mwindow__mutex.
|
|
138
131
|
*/
|
|
139
132
|
static int git_mwindow_free_all_locked(git_mwindow_file *mwf)
|
|
140
133
|
{
|
|
@@ -152,7 +145,7 @@ static int git_mwindow_free_all_locked(git_mwindow_file *mwf)
|
|
|
152
145
|
}
|
|
153
146
|
|
|
154
147
|
if (ctl->windowfiles.length == 0) {
|
|
155
|
-
|
|
148
|
+
git_vector_dispose(&ctl->windowfiles);
|
|
156
149
|
ctl->windowfiles.contents = NULL;
|
|
157
150
|
}
|
|
158
151
|
|
|
@@ -176,14 +169,14 @@ int git_mwindow_free_all(git_mwindow_file *mwf)
|
|
|
176
169
|
{
|
|
177
170
|
int error;
|
|
178
171
|
|
|
179
|
-
if (git_mutex_lock(&
|
|
172
|
+
if (git_mutex_lock(&git_mwindow__mutex)) {
|
|
180
173
|
git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
|
|
181
174
|
return -1;
|
|
182
175
|
}
|
|
183
176
|
|
|
184
177
|
error = git_mwindow_free_all_locked(mwf);
|
|
185
178
|
|
|
186
|
-
git_mutex_unlock(&
|
|
179
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
187
180
|
|
|
188
181
|
return error;
|
|
189
182
|
}
|
|
@@ -405,7 +398,7 @@ unsigned char *git_mwindow_open(
|
|
|
405
398
|
git_mwindow_ctl *ctl = &git_mwindow__mem_ctl;
|
|
406
399
|
git_mwindow *w = *cursor;
|
|
407
400
|
|
|
408
|
-
if (git_mutex_lock(&
|
|
401
|
+
if (git_mutex_lock(&git_mwindow__mutex)) {
|
|
409
402
|
git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
|
|
410
403
|
return NULL;
|
|
411
404
|
}
|
|
@@ -427,7 +420,7 @@ unsigned char *git_mwindow_open(
|
|
|
427
420
|
if (!w) {
|
|
428
421
|
w = new_window_locked(mwf->fd, mwf->size, offset);
|
|
429
422
|
if (w == NULL) {
|
|
430
|
-
git_mutex_unlock(&
|
|
423
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
431
424
|
return NULL;
|
|
432
425
|
}
|
|
433
426
|
w->next = mwf->windows;
|
|
@@ -447,7 +440,7 @@ unsigned char *git_mwindow_open(
|
|
|
447
440
|
if (left)
|
|
448
441
|
*left = (unsigned int)(w->window_map.len - offset);
|
|
449
442
|
|
|
450
|
-
git_mutex_unlock(&
|
|
443
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
451
444
|
return (unsigned char *) w->window_map.data + offset;
|
|
452
445
|
}
|
|
453
446
|
|
|
@@ -459,14 +452,14 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
|
|
|
459
452
|
size_t i;
|
|
460
453
|
git_mwindow_file *closed_file = NULL;
|
|
461
454
|
|
|
462
|
-
if (git_mutex_lock(&
|
|
455
|
+
if (git_mutex_lock(&git_mwindow__mutex)) {
|
|
463
456
|
git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
|
|
464
457
|
return -1;
|
|
465
458
|
}
|
|
466
459
|
|
|
467
460
|
if (ctl->windowfiles.length == 0 &&
|
|
468
461
|
(error = git_vector_init(&ctl->windowfiles, 8, NULL)) < 0) {
|
|
469
|
-
git_mutex_unlock(&
|
|
462
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
470
463
|
goto cleanup;
|
|
471
464
|
}
|
|
472
465
|
|
|
@@ -486,7 +479,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
|
|
|
486
479
|
}
|
|
487
480
|
|
|
488
481
|
error = git_vector_insert(&ctl->windowfiles, mwf);
|
|
489
|
-
git_mutex_unlock(&
|
|
482
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
490
483
|
if (error < 0)
|
|
491
484
|
goto cleanup;
|
|
492
485
|
|
|
@@ -505,7 +498,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
|
|
|
505
498
|
}
|
|
506
499
|
|
|
507
500
|
cleanup:
|
|
508
|
-
|
|
501
|
+
git_vector_dispose(&closed_files);
|
|
509
502
|
return error;
|
|
510
503
|
}
|
|
511
504
|
|
|
@@ -515,30 +508,30 @@ void git_mwindow_file_deregister(git_mwindow_file *mwf)
|
|
|
515
508
|
git_mwindow_file *cur;
|
|
516
509
|
size_t i;
|
|
517
510
|
|
|
518
|
-
if (git_mutex_lock(&
|
|
511
|
+
if (git_mutex_lock(&git_mwindow__mutex))
|
|
519
512
|
return;
|
|
520
513
|
|
|
521
514
|
git_vector_foreach(&ctl->windowfiles, i, cur) {
|
|
522
515
|
if (cur == mwf) {
|
|
523
516
|
git_vector_remove(&ctl->windowfiles, i);
|
|
524
|
-
git_mutex_unlock(&
|
|
517
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
525
518
|
return;
|
|
526
519
|
}
|
|
527
520
|
}
|
|
528
|
-
git_mutex_unlock(&
|
|
521
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
529
522
|
}
|
|
530
523
|
|
|
531
524
|
void git_mwindow_close(git_mwindow **window)
|
|
532
525
|
{
|
|
533
526
|
git_mwindow *w = *window;
|
|
534
527
|
if (w) {
|
|
535
|
-
if (git_mutex_lock(&
|
|
528
|
+
if (git_mutex_lock(&git_mwindow__mutex)) {
|
|
536
529
|
git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
|
|
537
530
|
return;
|
|
538
531
|
}
|
|
539
532
|
|
|
540
533
|
w->inuse_cnt--;
|
|
541
|
-
git_mutex_unlock(&
|
|
534
|
+
git_mutex_unlock(&git_mwindow__mutex);
|
|
542
535
|
*window = NULL;
|
|
543
536
|
}
|
|
544
537
|
}
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
#include "map.h"
|
|
14
14
|
#include "vector.h"
|
|
15
|
+
#include "hashmap_str.h"
|
|
16
|
+
|
|
17
|
+
GIT_HASHMAP_STR_STRUCT(git_mwindow_packmap, struct git_pack_file *);
|
|
18
|
+
GIT_HASHMAP_STR_PROTOTYPES(git_mwindow_packmap, struct git_pack_file *);
|
|
15
19
|
|
|
16
20
|
typedef struct git_mwindow {
|
|
17
21
|
struct git_mwindow *next;
|
|
@@ -526,7 +526,7 @@ static int git_object__short_id(git_str *out, const git_object *obj)
|
|
|
526
526
|
git_oid id;
|
|
527
527
|
git_odb *odb;
|
|
528
528
|
size_t oid_hexsize;
|
|
529
|
-
int len
|
|
529
|
+
int len, error;
|
|
530
530
|
|
|
531
531
|
GIT_ASSERT_ARG(out);
|
|
532
532
|
GIT_ASSERT_ARG(obj);
|
|
@@ -536,12 +536,13 @@ static int git_object__short_id(git_str *out, const git_object *obj)
|
|
|
536
536
|
git_oid_clear(&id, repo->oid_type);
|
|
537
537
|
oid_hexsize = git_oid_hexsize(repo->oid_type);
|
|
538
538
|
|
|
539
|
-
if ((error =
|
|
539
|
+
if ((error = git_repository__abbrev_length(&len, repo)) < 0)
|
|
540
540
|
return error;
|
|
541
541
|
|
|
542
|
-
if (
|
|
543
|
-
|
|
544
|
-
|
|
542
|
+
if ((size_t)len == oid_hexsize) {
|
|
543
|
+
if ((error = git_oid_cpy(&id, &obj->cached.oid)) < 0) {
|
|
544
|
+
return error;
|
|
545
|
+
}
|
|
545
546
|
}
|
|
546
547
|
|
|
547
548
|
if ((error = git_repository_odb(&odb, repo)) < 0)
|
|
@@ -790,12 +790,8 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
|
|
|
790
790
|
if (*alternate == '\0' || *alternate == '#')
|
|
791
791
|
continue;
|
|
792
792
|
|
|
793
|
-
/*
|
|
794
|
-
|
|
795
|
-
* folder. However, relative paths are only allowed in
|
|
796
|
-
* the current repository.
|
|
797
|
-
*/
|
|
798
|
-
if (*alternate == '.' && !alternate_depth) {
|
|
793
|
+
/* Relative path: build based on the current `objects` folder. */
|
|
794
|
+
if (*alternate == '.') {
|
|
799
795
|
if ((result = git_str_joinpath(&alternates_path, objects_dir, alternate)) < 0)
|
|
800
796
|
break;
|
|
801
797
|
alternate = git_str_cstr(&alternates_path);
|
|
@@ -915,7 +911,7 @@ static void odb_free(git_odb *db)
|
|
|
915
911
|
git_mutex_unlock(&db->lock);
|
|
916
912
|
|
|
917
913
|
git_commit_graph_free(db->cgraph);
|
|
918
|
-
|
|
914
|
+
git_vector_dispose(&db->backends);
|
|
919
915
|
git_cache_dispose(&db->own_cache);
|
|
920
916
|
git_mutex_free(&db->lock);
|
|
921
917
|
|
|
@@ -1609,7 +1605,7 @@ int git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payload)
|
|
|
1609
1605
|
}
|
|
1610
1606
|
|
|
1611
1607
|
cleanup:
|
|
1612
|
-
|
|
1608
|
+
git_vector_dispose(&backends);
|
|
1613
1609
|
|
|
1614
1610
|
return error;
|
|
1615
1611
|
}
|
|
@@ -1796,7 +1792,8 @@ void git_odb_stream_free(git_odb_stream *stream)
|
|
|
1796
1792
|
if (stream == NULL)
|
|
1797
1793
|
return;
|
|
1798
1794
|
|
|
1799
|
-
|
|
1795
|
+
if (stream->hash_ctx)
|
|
1796
|
+
git_hash_ctx_cleanup(stream->hash_ctx);
|
|
1800
1797
|
git__free(stream->hash_ctx);
|
|
1801
1798
|
stream->free(stream);
|
|
1802
1799
|
}
|
|
@@ -1922,7 +1919,7 @@ void git_odb_backend_data_free(git_odb_backend *backend, void *data)
|
|
|
1922
1919
|
git__free(data);
|
|
1923
1920
|
}
|
|
1924
1921
|
|
|
1925
|
-
int git_odb_refresh(
|
|
1922
|
+
int git_odb_refresh(git_odb *db)
|
|
1926
1923
|
{
|
|
1927
1924
|
size_t i;
|
|
1928
1925
|
int error;
|
|
@@ -276,8 +276,8 @@ done:
|
|
|
276
276
|
static int read_loose_standard(git_rawobj *out, git_str *obj)
|
|
277
277
|
{
|
|
278
278
|
git_zstream zstream = GIT_ZSTREAM_INIT;
|
|
279
|
-
unsigned char head[MAX_HEADER_LEN], *body = NULL;
|
|
280
|
-
size_t decompressed, head_len,
|
|
279
|
+
unsigned char head[MAX_HEADER_LEN], *body = NULL, *body_out;
|
|
280
|
+
size_t decompressed, head_len, body_remain, alloc_size;
|
|
281
281
|
obj_hdr hdr;
|
|
282
282
|
int error;
|
|
283
283
|
|
|
@@ -285,16 +285,16 @@ static int read_loose_standard(git_rawobj *out, git_str *obj)
|
|
|
285
285
|
(error = git_zstream_set_input(&zstream, git_str_cstr(obj), git_str_len(obj))) < 0)
|
|
286
286
|
goto done;
|
|
287
287
|
|
|
288
|
-
decompressed = sizeof(head);
|
|
289
|
-
|
|
290
288
|
/*
|
|
291
289
|
* inflate the initial part of the compressed buffer in order to
|
|
292
|
-
* parse the header
|
|
293
|
-
* remainder into the body buffer.
|
|
290
|
+
* parse the header and read the largest header possible. later, we'll
|
|
291
|
+
* push the remainder into the body buffer.
|
|
294
292
|
*/
|
|
293
|
+
decompressed = sizeof(head);
|
|
295
294
|
if ((error = git_zstream_get_output(head, &decompressed, &zstream)) < 0 ||
|
|
296
295
|
(error = parse_header(&hdr, &head_len, head, decompressed)) < 0)
|
|
297
296
|
goto done;
|
|
297
|
+
GIT_ASSERT(head_len <= decompressed);
|
|
298
298
|
|
|
299
299
|
if (!git_object_typeisloose(hdr.type)) {
|
|
300
300
|
git_error_set(GIT_ERROR_ODB, "failed to inflate disk object");
|
|
@@ -311,16 +311,24 @@ static int read_loose_standard(git_rawobj *out, git_str *obj)
|
|
|
311
311
|
error = -1;
|
|
312
312
|
goto done;
|
|
313
313
|
}
|
|
314
|
+
body_out = body;
|
|
315
|
+
body_remain = hdr.size;
|
|
314
316
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
317
|
+
decompressed -= head_len;
|
|
318
|
+
if (decompressed > body_remain) {
|
|
319
|
+
git_error_set(GIT_ERROR_ODB, "malformed object: body was longer than specified in header");
|
|
320
|
+
error = -1;
|
|
321
|
+
goto done;
|
|
322
|
+
}
|
|
323
|
+
if (decompressed)
|
|
324
|
+
memcpy(body_out, head + head_len, decompressed);
|
|
325
|
+
body_out += decompressed;
|
|
326
|
+
body_remain -= decompressed;
|
|
320
327
|
|
|
321
|
-
decompressed =
|
|
322
|
-
if ((error = git_zstream_get_output(
|
|
328
|
+
decompressed = body_remain;
|
|
329
|
+
if ((error = git_zstream_get_output(body_out, &decompressed, &zstream)) < 0)
|
|
323
330
|
goto done;
|
|
331
|
+
body_out += decompressed;
|
|
324
332
|
|
|
325
333
|
if (!git_zstream_done(&zstream)) {
|
|
326
334
|
git_error_set(GIT_ERROR_ZLIB, "failed to finish zlib inflation: stream aborted prematurely");
|
|
@@ -328,7 +336,9 @@ static int read_loose_standard(git_rawobj *out, git_str *obj)
|
|
|
328
336
|
goto done;
|
|
329
337
|
}
|
|
330
338
|
|
|
331
|
-
|
|
339
|
+
/* object bodies that are too short are silently zero-padded */
|
|
340
|
+
GIT_ASSERT(body_out <= body + hdr.size);
|
|
341
|
+
*body_out = '\0';
|
|
332
342
|
|
|
333
343
|
out->data = body;
|
|
334
344
|
out->len = hdr.size;
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
#include "hash.h"
|
|
13
13
|
#include "odb.h"
|
|
14
14
|
#include "array.h"
|
|
15
|
-
#include "oidmap.h"
|
|
16
15
|
#include "pack-objects.h"
|
|
17
16
|
|
|
18
17
|
#include "git2/odb_backend.h"
|
|
@@ -29,9 +28,11 @@ struct memobject {
|
|
|
29
28
|
char data[GIT_FLEX_ARRAY];
|
|
30
29
|
};
|
|
31
30
|
|
|
31
|
+
GIT_HASHMAP_OID_SETUP(git_odb_mempack_oidmap, struct memobject *);
|
|
32
|
+
|
|
32
33
|
struct memory_packer_db {
|
|
33
34
|
git_odb_backend parent;
|
|
34
|
-
|
|
35
|
+
git_odb_mempack_oidmap objects;
|
|
35
36
|
git_array_t(struct memobject *) commits;
|
|
36
37
|
};
|
|
37
38
|
|
|
@@ -41,7 +42,7 @@ static int impl__write(git_odb_backend *_backend, const git_oid *oid, const void
|
|
|
41
42
|
struct memobject *obj = NULL;
|
|
42
43
|
size_t alloc_len;
|
|
43
44
|
|
|
44
|
-
if (
|
|
45
|
+
if (git_odb_mempack_oidmap_contains(&db->objects, oid))
|
|
45
46
|
return 0;
|
|
46
47
|
|
|
47
48
|
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, sizeof(struct memobject), len);
|
|
@@ -53,7 +54,7 @@ static int impl__write(git_odb_backend *_backend, const git_oid *oid, const void
|
|
|
53
54
|
obj->len = len;
|
|
54
55
|
obj->type = type;
|
|
55
56
|
|
|
56
|
-
if (
|
|
57
|
+
if (git_odb_mempack_oidmap_put(&db->objects, &obj->oid, obj) < 0)
|
|
57
58
|
return -1;
|
|
58
59
|
|
|
59
60
|
if (type == GIT_OBJECT_COMMIT) {
|
|
@@ -69,16 +70,17 @@ static int impl__exists(git_odb_backend *backend, const git_oid *oid)
|
|
|
69
70
|
{
|
|
70
71
|
struct memory_packer_db *db = (struct memory_packer_db *)backend;
|
|
71
72
|
|
|
72
|
-
return
|
|
73
|
+
return git_odb_mempack_oidmap_contains(&db->objects, oid);
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
static int impl__read(void **buffer_p, size_t *len_p, git_object_t *type_p, git_odb_backend *backend, const git_oid *oid)
|
|
76
77
|
{
|
|
77
78
|
struct memory_packer_db *db = (struct memory_packer_db *)backend;
|
|
78
79
|
struct memobject *obj;
|
|
80
|
+
int error;
|
|
79
81
|
|
|
80
|
-
if ((
|
|
81
|
-
return
|
|
82
|
+
if ((error = git_odb_mempack_oidmap_get(&obj, &db->objects, oid)) != 0)
|
|
83
|
+
return error;
|
|
82
84
|
|
|
83
85
|
*len_p = obj->len;
|
|
84
86
|
*type_p = obj->type;
|
|
@@ -93,9 +95,10 @@ static int impl__read_header(size_t *len_p, git_object_t *type_p, git_odb_backen
|
|
|
93
95
|
{
|
|
94
96
|
struct memory_packer_db *db = (struct memory_packer_db *)backend;
|
|
95
97
|
struct memobject *obj;
|
|
98
|
+
int error;
|
|
96
99
|
|
|
97
|
-
if ((
|
|
98
|
-
return
|
|
100
|
+
if ((error = git_odb_mempack_oidmap_get(&obj, &db->objects, oid)) != 0)
|
|
101
|
+
return error;
|
|
99
102
|
|
|
100
103
|
*len_p = obj->len;
|
|
101
104
|
*type_p = obj->type;
|
|
@@ -132,6 +135,29 @@ cleanup:
|
|
|
132
135
|
return err;
|
|
133
136
|
}
|
|
134
137
|
|
|
138
|
+
int git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb)
|
|
139
|
+
{
|
|
140
|
+
struct memory_packer_db *db = (struct memory_packer_db *)backend;
|
|
141
|
+
const git_oid *oid;
|
|
142
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_INIT;
|
|
143
|
+
int err;
|
|
144
|
+
|
|
145
|
+
while (true) {
|
|
146
|
+
err = git_odb_mempack_oidmap_iterate(&iter, &oid, NULL, &db->objects);
|
|
147
|
+
|
|
148
|
+
if (err == GIT_ITEROVER)
|
|
149
|
+
break;
|
|
150
|
+
else if (err != 0)
|
|
151
|
+
return err;
|
|
152
|
+
|
|
153
|
+
err = git_packbuilder_insert(pb, oid, NULL);
|
|
154
|
+
if (err != 0)
|
|
155
|
+
return err;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return 0;
|
|
159
|
+
}
|
|
160
|
+
|
|
135
161
|
int git_mempack_dump(
|
|
136
162
|
git_buf *pack,
|
|
137
163
|
git_repository *repo,
|
|
@@ -144,14 +170,13 @@ int git_mempack_reset(git_odb_backend *_backend)
|
|
|
144
170
|
{
|
|
145
171
|
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
|
|
146
172
|
struct memobject *object = NULL;
|
|
173
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
147
174
|
|
|
148
|
-
|
|
175
|
+
while (git_odb_mempack_oidmap_iterate(&iter, NULL, &object, &db->objects) == 0)
|
|
149
176
|
git__free(object);
|
|
150
|
-
});
|
|
151
177
|
|
|
152
178
|
git_array_clear(db->commits);
|
|
153
|
-
|
|
154
|
-
git_oidmap_clear(db->objects);
|
|
179
|
+
git_odb_mempack_oidmap_clear(&db->objects);
|
|
155
180
|
|
|
156
181
|
return 0;
|
|
157
182
|
}
|
|
@@ -161,7 +186,7 @@ static void impl__free(git_odb_backend *_backend)
|
|
|
161
186
|
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
|
|
162
187
|
|
|
163
188
|
git_mempack_reset(_backend);
|
|
164
|
-
|
|
189
|
+
git_odb_mempack_oidmap_dispose(&db->objects);
|
|
165
190
|
git__free(db);
|
|
166
191
|
}
|
|
167
192
|
|
|
@@ -174,9 +199,6 @@ int git_mempack_new(git_odb_backend **out)
|
|
|
174
199
|
db = git__calloc(1, sizeof(struct memory_packer_db));
|
|
175
200
|
GIT_ERROR_CHECK_ALLOC(db);
|
|
176
201
|
|
|
177
|
-
if (git_oidmap_new(&db->objects) < 0)
|
|
178
|
-
return -1;
|
|
179
|
-
|
|
180
202
|
db->parent.version = GIT_ODB_BACKEND_VERSION;
|
|
181
203
|
db->parent.read = &impl__read;
|
|
182
204
|
db->parent.write = &impl__write;
|
|
@@ -187,3 +209,13 @@ int git_mempack_new(git_odb_backend **out)
|
|
|
187
209
|
*out = (git_odb_backend *)db;
|
|
188
210
|
return 0;
|
|
189
211
|
}
|
|
212
|
+
|
|
213
|
+
int git_mempack_object_count(size_t *out, git_odb_backend *_backend)
|
|
214
|
+
{
|
|
215
|
+
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
|
|
216
|
+
|
|
217
|
+
GIT_ASSERT_ARG(_backend);
|
|
218
|
+
|
|
219
|
+
*out = (size_t)git_odb_mempack_oidmap_size(&db->objects);
|
|
220
|
+
return 0;
|
|
221
|
+
}
|
|
@@ -743,10 +743,10 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
|
|
|
743
743
|
|
|
744
744
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
745
745
|
opts.odb = odb;
|
|
746
|
+
opts.oid_type = backend->opts.oid_type;
|
|
746
747
|
|
|
747
748
|
error = git_indexer_new(&writepack->indexer,
|
|
748
749
|
backend->pack_folder,
|
|
749
|
-
backend->opts.oid_type,
|
|
750
750
|
&opts);
|
|
751
751
|
#else
|
|
752
752
|
error = git_indexer_new(&writepack->indexer,
|
|
@@ -796,13 +796,21 @@ static int pack_backend__writemidx(git_odb_backend *_backend)
|
|
|
796
796
|
size_t i;
|
|
797
797
|
int error = 0;
|
|
798
798
|
|
|
799
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
800
|
+
git_midx_writer_options midx_opts = GIT_MIDX_WRITER_OPTIONS_INIT;
|
|
801
|
+
#endif
|
|
802
|
+
|
|
799
803
|
GIT_ASSERT_ARG(_backend);
|
|
800
804
|
|
|
801
805
|
backend = (struct pack_backend *)_backend;
|
|
802
806
|
|
|
807
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
808
|
+
midx_opts.oid_type = backend->opts.oid_type;
|
|
809
|
+
#endif
|
|
810
|
+
|
|
803
811
|
error = git_midx_writer_new(&w, backend->pack_folder
|
|
804
812
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
805
|
-
,
|
|
813
|
+
, &midx_opts
|
|
806
814
|
#endif
|
|
807
815
|
);
|
|
808
816
|
|
|
@@ -863,8 +871,8 @@ static void pack_backend__free(git_odb_backend *_backend)
|
|
|
863
871
|
git_mwindow_put_pack(p);
|
|
864
872
|
|
|
865
873
|
git_midx_free(backend->midx);
|
|
866
|
-
|
|
867
|
-
|
|
874
|
+
git_vector_dispose(&backend->midx_packs);
|
|
875
|
+
git_vector_dispose(&backend->packs);
|
|
868
876
|
git__free(backend->pack_folder);
|
|
869
877
|
git__free(backend);
|
|
870
878
|
}
|
|
@@ -883,7 +891,7 @@ static int pack_backend__alloc(
|
|
|
883
891
|
}
|
|
884
892
|
|
|
885
893
|
if (git_vector_init(&backend->packs, initial_size, packfile_sort__cb) < 0) {
|
|
886
|
-
|
|
894
|
+
git_vector_dispose(&backend->midx_packs);
|
|
887
895
|
git__free(backend);
|
|
888
896
|
return -1;
|
|
889
897
|
}
|