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
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
#include "git2/oid.h"
|
|
11
11
|
#include "repository.h"
|
|
12
|
-
#include "
|
|
12
|
+
#include "runtime.h"
|
|
13
13
|
#include <string.h>
|
|
14
14
|
#include <limits.h>
|
|
15
15
|
|
|
@@ -22,6 +22,8 @@ const git_oid git_oid__empty_tree_sha1 =
|
|
|
22
22
|
{ 0x4b, 0x82, 0x5d, 0xc6, 0x42, 0xcb, 0x6e, 0xb9, 0xa0, 0x60,
|
|
23
23
|
0xe5, 0x4b, 0xf8, 0xd6, 0x92, 0x88, 0xfb, 0xee, 0x49, 0x04 });
|
|
24
24
|
|
|
25
|
+
static const unsigned char git_oid_zero[GIT_OID_MAX_SIZE] = {0};
|
|
26
|
+
|
|
25
27
|
static int oid_error_invalid(const char *msg)
|
|
26
28
|
{
|
|
27
29
|
git_error_set(GIT_ERROR_INVALID, "unable to parse OID - %s", msg);
|
|
@@ -153,15 +155,42 @@ int git_oid_pathfmt(char *str, const git_oid *oid)
|
|
|
153
155
|
return 0;
|
|
154
156
|
}
|
|
155
157
|
|
|
158
|
+
static git_tlsdata_key thread_str_key;
|
|
159
|
+
|
|
160
|
+
static void GIT_SYSTEM_CALL thread_str_free(void *s)
|
|
161
|
+
{
|
|
162
|
+
char *str = (char *)s;
|
|
163
|
+
git__free(str);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
static void thread_str_global_shutdown(void)
|
|
167
|
+
{
|
|
168
|
+
char *str = git_tlsdata_get(thread_str_key);
|
|
169
|
+
git_tlsdata_set(thread_str_key, NULL);
|
|
170
|
+
|
|
171
|
+
git__free(str);
|
|
172
|
+
git_tlsdata_dispose(thread_str_key);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
int git_oid_global_init(void)
|
|
176
|
+
{
|
|
177
|
+
if (git_tlsdata_init(&thread_str_key, thread_str_free) != 0)
|
|
178
|
+
return -1;
|
|
179
|
+
|
|
180
|
+
return git_runtime_shutdown_register(thread_str_global_shutdown);
|
|
181
|
+
}
|
|
182
|
+
|
|
156
183
|
char *git_oid_tostr_s(const git_oid *oid)
|
|
157
184
|
{
|
|
158
|
-
git_threadstate *threadstate = git_threadstate_get();
|
|
159
185
|
char *str;
|
|
160
186
|
|
|
161
|
-
if (
|
|
162
|
-
|
|
187
|
+
if ((str = git_tlsdata_get(thread_str_key)) == NULL) {
|
|
188
|
+
if ((str = git__malloc(GIT_OID_MAX_HEXSIZE + 1)) == NULL)
|
|
189
|
+
return NULL;
|
|
190
|
+
|
|
191
|
+
git_tlsdata_set(thread_str_key, str);
|
|
192
|
+
}
|
|
163
193
|
|
|
164
|
-
str = threadstate->oid_fmt;
|
|
165
194
|
git_oid_nfmt(str, git_oid_hexsize(git_oid_type(oid)) + 1, oid);
|
|
166
195
|
return str;
|
|
167
196
|
}
|
|
@@ -291,7 +320,7 @@ int git_oid_streq(const git_oid *oid_a, const char *str)
|
|
|
291
320
|
int git_oid_is_zero(const git_oid *oid_a)
|
|
292
321
|
{
|
|
293
322
|
const unsigned char *a = oid_a->id;
|
|
294
|
-
size_t size = git_oid_size(git_oid_type(oid_a))
|
|
323
|
+
size_t size = git_oid_size(git_oid_type(oid_a));
|
|
295
324
|
|
|
296
325
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
297
326
|
if (!oid_a->type)
|
|
@@ -300,10 +329,7 @@ int git_oid_is_zero(const git_oid *oid_a)
|
|
|
300
329
|
return 0;
|
|
301
330
|
#endif
|
|
302
331
|
|
|
303
|
-
|
|
304
|
-
if (*a != 0)
|
|
305
|
-
return 0;
|
|
306
|
-
return 1;
|
|
332
|
+
return git_oid_raw_cmp(a, git_oid_zero, size) == 0 ? 1 : 0;
|
|
307
333
|
}
|
|
308
334
|
|
|
309
335
|
#ifndef GIT_DEPRECATE_HARD
|
|
@@ -66,6 +66,15 @@ GIT_INLINE(size_t) git_oid_hexsize(git_oid_t type)
|
|
|
66
66
|
return 0;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
GIT_INLINE(bool) git_oid_type_is_valid(git_oid_t type)
|
|
70
|
+
{
|
|
71
|
+
return (type == GIT_OID_SHA1
|
|
72
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
73
|
+
|| type == GIT_OID_SHA256
|
|
74
|
+
#endif
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
69
78
|
GIT_INLINE(const char *) git_oid_type_name(git_oid_t type)
|
|
70
79
|
{
|
|
71
80
|
switch (type) {
|
|
@@ -270,4 +279,6 @@ int git_oid__fromstrn(
|
|
|
270
279
|
|
|
271
280
|
int git_oid__fromraw(git_oid *out, const unsigned char *raw, git_oid_t type);
|
|
272
281
|
|
|
282
|
+
int git_oid_global_init(void);
|
|
283
|
+
|
|
273
284
|
#endif
|
|
@@ -64,6 +64,9 @@ struct walk_object {
|
|
|
64
64
|
/* Size of the buffer to feed to zlib */
|
|
65
65
|
#define COMPRESS_BUFLEN (1024 * 1024)
|
|
66
66
|
|
|
67
|
+
GIT_HASHMAP_OID_FUNCTIONS(git_packbuilder_pobjectmap, GIT_HASHMAP_INLINE, git_pobject *);
|
|
68
|
+
GIT_HASHMAP_OID_FUNCTIONS(git_packbuilder_walk_objectmap, GIT_HASHMAP_INLINE, struct walk_object *);
|
|
69
|
+
|
|
67
70
|
static unsigned name_hash(const char *name)
|
|
68
71
|
{
|
|
69
72
|
unsigned c, hash = 0;
|
|
@@ -139,9 +142,7 @@ int git_packbuilder_new(git_packbuilder **out, git_repository *repo)
|
|
|
139
142
|
hash_algorithm = git_oid_algorithm(pb->oid_type);
|
|
140
143
|
GIT_ASSERT(hash_algorithm);
|
|
141
144
|
|
|
142
|
-
if (
|
|
143
|
-
git_oidmap_new(&pb->walk_objects) < 0 ||
|
|
144
|
-
git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
|
|
145
|
+
if (git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
|
|
145
146
|
goto on_error;
|
|
146
147
|
|
|
147
148
|
pb->repo = repo;
|
|
@@ -192,10 +193,10 @@ static int rehash(git_packbuilder *pb)
|
|
|
192
193
|
git_pobject *po;
|
|
193
194
|
size_t i;
|
|
194
195
|
|
|
195
|
-
|
|
196
|
+
git_packbuilder_pobjectmap_clear(&pb->object_ix);
|
|
196
197
|
|
|
197
198
|
for (i = 0, po = pb->object_list; i < pb->nr_objects; i++, po++) {
|
|
198
|
-
if (
|
|
199
|
+
if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0)
|
|
199
200
|
return -1;
|
|
200
201
|
}
|
|
201
202
|
|
|
@@ -214,7 +215,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
|
|
|
214
215
|
|
|
215
216
|
/* If the object already exists in the hash table, then we don't
|
|
216
217
|
* have any work to do */
|
|
217
|
-
if (
|
|
218
|
+
if (git_packbuilder_pobjectmap_contains(&pb->object_ix, oid))
|
|
218
219
|
return 0;
|
|
219
220
|
|
|
220
221
|
if (pb->nr_objects >= pb->nr_alloc) {
|
|
@@ -246,7 +247,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
|
|
|
246
247
|
git_oid_cpy(&po->id, oid);
|
|
247
248
|
po->hash = name_hash(name);
|
|
248
249
|
|
|
249
|
-
if (
|
|
250
|
+
if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0) {
|
|
250
251
|
git_error_set_oom();
|
|
251
252
|
return -1;
|
|
252
253
|
}
|
|
@@ -515,7 +516,7 @@ static int cb_tag_foreach(const char *name, git_oid *oid, void *data)
|
|
|
515
516
|
|
|
516
517
|
GIT_UNUSED(name);
|
|
517
518
|
|
|
518
|
-
if ((po
|
|
519
|
+
if (git_packbuilder_pobjectmap_get(&po, &pb->object_ix, oid) != 0)
|
|
519
520
|
return 0;
|
|
520
521
|
|
|
521
522
|
po->tagged = 1;
|
|
@@ -932,6 +933,9 @@ static int report_delta_progress(
|
|
|
932
933
|
{
|
|
933
934
|
int ret;
|
|
934
935
|
|
|
936
|
+
if (pb->failure)
|
|
937
|
+
return pb->failure;
|
|
938
|
+
|
|
935
939
|
if (pb->progress_cb) {
|
|
936
940
|
uint64_t current_time = git_time_monotonic();
|
|
937
941
|
uint64_t elapsed = current_time - pb->last_progress_report_time;
|
|
@@ -943,8 +947,10 @@ static int report_delta_progress(
|
|
|
943
947
|
GIT_PACKBUILDER_DELTAFICATION,
|
|
944
948
|
count, pb->nr_objects, pb->progress_cb_payload);
|
|
945
949
|
|
|
946
|
-
if (ret)
|
|
950
|
+
if (ret) {
|
|
951
|
+
pb->failure = ret;
|
|
947
952
|
return git_error_set_after_callback(ret);
|
|
953
|
+
}
|
|
948
954
|
}
|
|
949
955
|
}
|
|
950
956
|
|
|
@@ -976,7 +982,10 @@ static int find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
976
982
|
}
|
|
977
983
|
|
|
978
984
|
pb->nr_deltified += 1;
|
|
979
|
-
report_delta_progress(pb, pb->nr_deltified, false)
|
|
985
|
+
if ((error = report_delta_progress(pb, pb->nr_deltified, false)) < 0) {
|
|
986
|
+
GIT_ASSERT(git_packbuilder__progress_unlock(pb) == 0);
|
|
987
|
+
goto on_error;
|
|
988
|
+
}
|
|
980
989
|
|
|
981
990
|
po = *list++;
|
|
982
991
|
(*list_size)--;
|
|
@@ -1124,6 +1133,10 @@ struct thread_params {
|
|
|
1124
1133
|
size_t depth;
|
|
1125
1134
|
size_t working;
|
|
1126
1135
|
size_t data_ready;
|
|
1136
|
+
|
|
1137
|
+
/* A pb->progress_cb can stop the packing process by returning an error.
|
|
1138
|
+
When that happens, all threads observe the error and stop voluntarily. */
|
|
1139
|
+
bool stopped;
|
|
1127
1140
|
};
|
|
1128
1141
|
|
|
1129
1142
|
static void *threaded_find_deltas(void *arg)
|
|
@@ -1133,7 +1146,12 @@ static void *threaded_find_deltas(void *arg)
|
|
|
1133
1146
|
while (me->remaining) {
|
|
1134
1147
|
if (find_deltas(me->pb, me->list, &me->remaining,
|
|
1135
1148
|
me->window, me->depth) < 0) {
|
|
1136
|
-
|
|
1149
|
+
me->stopped = true;
|
|
1150
|
+
GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_lock(me->pb) == 0, NULL);
|
|
1151
|
+
me->working = false;
|
|
1152
|
+
git_cond_signal(&me->pb->progress_cond);
|
|
1153
|
+
GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_unlock(me->pb) == 0, NULL);
|
|
1154
|
+
return NULL;
|
|
1137
1155
|
}
|
|
1138
1156
|
|
|
1139
1157
|
GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_lock(me->pb) == 0, NULL);
|
|
@@ -1175,8 +1193,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
1175
1193
|
pb->nr_threads = git__online_cpus();
|
|
1176
1194
|
|
|
1177
1195
|
if (pb->nr_threads <= 1) {
|
|
1178
|
-
find_deltas(pb, list, &list_size, window, depth);
|
|
1179
|
-
return 0;
|
|
1196
|
+
return find_deltas(pb, list, &list_size, window, depth);
|
|
1180
1197
|
}
|
|
1181
1198
|
|
|
1182
1199
|
p = git__mallocarray(pb->nr_threads, sizeof(*p));
|
|
@@ -1195,6 +1212,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
1195
1212
|
p[i].depth = depth;
|
|
1196
1213
|
p[i].working = 1;
|
|
1197
1214
|
p[i].data_ready = 0;
|
|
1215
|
+
p[i].stopped = 0;
|
|
1198
1216
|
|
|
1199
1217
|
/* try to split chunks on "path" boundaries */
|
|
1200
1218
|
while (sub_size && sub_size < list_size &&
|
|
@@ -1262,7 +1280,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
1262
1280
|
(!victim || victim->remaining < p[i].remaining))
|
|
1263
1281
|
victim = &p[i];
|
|
1264
1282
|
|
|
1265
|
-
if (victim) {
|
|
1283
|
+
if (victim && !target->stopped) {
|
|
1266
1284
|
sub_size = victim->remaining / 2;
|
|
1267
1285
|
list = victim->list + victim->list_size - sub_size;
|
|
1268
1286
|
while (sub_size && list[0]->hash &&
|
|
@@ -1286,7 +1304,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
1286
1304
|
}
|
|
1287
1305
|
target->list_size = sub_size;
|
|
1288
1306
|
target->remaining = sub_size;
|
|
1289
|
-
target->working = 1;
|
|
1307
|
+
target->working = 1; /* even when target->stopped, so that we don't process this thread again */
|
|
1290
1308
|
GIT_ASSERT(git_packbuilder__progress_unlock(pb) == 0);
|
|
1291
1309
|
|
|
1292
1310
|
if (git_mutex_lock(&target->mutex)) {
|
|
@@ -1299,7 +1317,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
1299
1317
|
git_cond_signal(&target->cond);
|
|
1300
1318
|
git_mutex_unlock(&target->mutex);
|
|
1301
1319
|
|
|
1302
|
-
if (!sub_size) {
|
|
1320
|
+
if (target->stopped || !sub_size) {
|
|
1303
1321
|
git_thread_join(&target->thread, NULL);
|
|
1304
1322
|
git_cond_free(&target->cond);
|
|
1305
1323
|
git_mutex_free(&target->mutex);
|
|
@@ -1308,7 +1326,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
|
1308
1326
|
}
|
|
1309
1327
|
|
|
1310
1328
|
git__free(p);
|
|
1311
|
-
return
|
|
1329
|
+
return pb->failure;
|
|
1312
1330
|
}
|
|
1313
1331
|
|
|
1314
1332
|
#else
|
|
@@ -1319,6 +1337,7 @@ int git_packbuilder__prepare(git_packbuilder *pb)
|
|
|
1319
1337
|
{
|
|
1320
1338
|
git_pobject **delta_list;
|
|
1321
1339
|
size_t i, n = 0;
|
|
1340
|
+
int error;
|
|
1322
1341
|
|
|
1323
1342
|
if (pb->nr_objects == 0 || pb->done)
|
|
1324
1343
|
return 0; /* nothing to do */
|
|
@@ -1327,8 +1346,10 @@ int git_packbuilder__prepare(git_packbuilder *pb)
|
|
|
1327
1346
|
* Although we do not report progress during deltafication, we
|
|
1328
1347
|
* at least report that we are in the deltafication stage
|
|
1329
1348
|
*/
|
|
1330
|
-
if (pb->progress_cb)
|
|
1331
|
-
|
|
1349
|
+
if (pb->progress_cb) {
|
|
1350
|
+
if ((error = pb->progress_cb(GIT_PACKBUILDER_DELTAFICATION, 0, pb->nr_objects, pb->progress_cb_payload)) < 0)
|
|
1351
|
+
return git_error_set_after_callback(error);
|
|
1352
|
+
}
|
|
1332
1353
|
|
|
1333
1354
|
delta_list = git__mallocarray(pb->nr_objects, sizeof(*delta_list));
|
|
1334
1355
|
GIT_ERROR_CHECK_ALLOC(delta_list);
|
|
@@ -1345,31 +1366,33 @@ int git_packbuilder__prepare(git_packbuilder *pb)
|
|
|
1345
1366
|
|
|
1346
1367
|
if (n > 1) {
|
|
1347
1368
|
git__tsort((void **)delta_list, n, type_size_sort);
|
|
1348
|
-
if (ll_find_deltas(pb, delta_list, n,
|
|
1369
|
+
if ((error = ll_find_deltas(pb, delta_list, n,
|
|
1349
1370
|
GIT_PACK_WINDOW + 1,
|
|
1350
|
-
GIT_PACK_DEPTH) < 0) {
|
|
1371
|
+
GIT_PACK_DEPTH)) < 0) {
|
|
1351
1372
|
git__free(delta_list);
|
|
1352
|
-
return
|
|
1373
|
+
return error;
|
|
1353
1374
|
}
|
|
1354
1375
|
}
|
|
1355
1376
|
|
|
1356
|
-
report_delta_progress(pb, pb->nr_objects, true);
|
|
1377
|
+
error = report_delta_progress(pb, pb->nr_objects, true);
|
|
1357
1378
|
|
|
1358
1379
|
pb->done = true;
|
|
1359
1380
|
git__free(delta_list);
|
|
1360
|
-
return
|
|
1381
|
+
return error;
|
|
1361
1382
|
}
|
|
1362
1383
|
|
|
1363
|
-
#define PREPARE_PACK
|
|
1384
|
+
#define PREPARE_PACK error = git_packbuilder__prepare(pb); if (error < 0) { return error; }
|
|
1364
1385
|
|
|
1365
1386
|
int git_packbuilder_foreach(git_packbuilder *pb, int (*cb)(void *buf, size_t size, void *payload), void *payload)
|
|
1366
1387
|
{
|
|
1388
|
+
int error;
|
|
1367
1389
|
PREPARE_PACK;
|
|
1368
1390
|
return write_pack(pb, cb, payload);
|
|
1369
1391
|
}
|
|
1370
1392
|
|
|
1371
1393
|
int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb)
|
|
1372
1394
|
{
|
|
1395
|
+
int error;
|
|
1373
1396
|
PREPARE_PACK;
|
|
1374
1397
|
|
|
1375
1398
|
return write_pack(pb, &write_pack_buf, buf);
|
|
@@ -1397,7 +1420,7 @@ int git_packbuilder_write(
|
|
|
1397
1420
|
git_str object_path = GIT_STR_INIT;
|
|
1398
1421
|
git_indexer_options opts = GIT_INDEXER_OPTIONS_INIT;
|
|
1399
1422
|
git_indexer *indexer = NULL;
|
|
1400
|
-
git_indexer_progress stats;
|
|
1423
|
+
git_indexer_progress stats = { 0 };
|
|
1401
1424
|
struct pack_write_context ctx;
|
|
1402
1425
|
int t;
|
|
1403
1426
|
|
|
@@ -1414,13 +1437,12 @@ int git_packbuilder_write(
|
|
|
1414
1437
|
opts.progress_cb = progress_cb;
|
|
1415
1438
|
opts.progress_cb_payload = progress_cb_payload;
|
|
1416
1439
|
|
|
1417
|
-
/* TODO: SHA256 */
|
|
1418
|
-
|
|
1419
1440
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
1420
1441
|
opts.mode = mode;
|
|
1421
1442
|
opts.odb = pb->odb;
|
|
1443
|
+
opts.oid_type = pb->oid_type;
|
|
1422
1444
|
|
|
1423
|
-
error = git_indexer_new(&indexer, path,
|
|
1445
|
+
error = git_indexer_new(&indexer, path, &opts);
|
|
1424
1446
|
#else
|
|
1425
1447
|
error = git_indexer_new(&indexer, path, mode, pb->odb, &opts);
|
|
1426
1448
|
#endif
|
|
@@ -1584,12 +1606,16 @@ static int retrieve_object(struct walk_object **out, git_packbuilder *pb, const
|
|
|
1584
1606
|
struct walk_object *obj;
|
|
1585
1607
|
int error;
|
|
1586
1608
|
|
|
1587
|
-
|
|
1609
|
+
error = git_packbuilder_walk_objectmap_get(&obj, &pb->walk_objects, id);
|
|
1610
|
+
|
|
1611
|
+
if (error == GIT_ENOTFOUND) {
|
|
1588
1612
|
if ((error = lookup_walk_object(&obj, pb, id)) < 0)
|
|
1589
1613
|
return error;
|
|
1590
1614
|
|
|
1591
|
-
if ((error =
|
|
1615
|
+
if ((error = git_packbuilder_walk_objectmap_put(&pb->walk_objects, &obj->id, obj)) < 0)
|
|
1592
1616
|
return error;
|
|
1617
|
+
} else if (error != 0) {
|
|
1618
|
+
return error;
|
|
1593
1619
|
}
|
|
1594
1620
|
|
|
1595
1621
|
*out = obj;
|
|
@@ -1821,13 +1847,12 @@ void git_packbuilder_free(git_packbuilder *pb)
|
|
|
1821
1847
|
if (pb->odb)
|
|
1822
1848
|
git_odb_free(pb->odb);
|
|
1823
1849
|
|
|
1824
|
-
|
|
1825
|
-
git_oidmap_free(pb->object_ix);
|
|
1850
|
+
git_packbuilder_pobjectmap_dispose(&pb->object_ix);
|
|
1826
1851
|
|
|
1827
1852
|
if (pb->object_list)
|
|
1828
1853
|
git__free(pb->object_list);
|
|
1829
1854
|
|
|
1830
|
-
|
|
1855
|
+
git_packbuilder_walk_objectmap_dispose(&pb->walk_objects);
|
|
1831
1856
|
git_pool_clear(&pb->object_pool);
|
|
1832
1857
|
|
|
1833
1858
|
git_hash_ctx_cleanup(&pb->ctx);
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
#include "str.h"
|
|
14
14
|
#include "hash.h"
|
|
15
|
-
#include "oidmap.h"
|
|
16
15
|
#include "zstream.h"
|
|
17
16
|
#include "pool.h"
|
|
18
17
|
#include "indexer.h"
|
|
18
|
+
#include "hashmap_oid.h"
|
|
19
19
|
|
|
20
20
|
#include "git2/oid.h"
|
|
21
21
|
#include "git2/pack.h"
|
|
@@ -51,6 +51,11 @@ typedef struct git_pobject {
|
|
|
51
51
|
filled:1;
|
|
52
52
|
} git_pobject;
|
|
53
53
|
|
|
54
|
+
typedef struct walk_object walk_object;
|
|
55
|
+
|
|
56
|
+
GIT_HASHMAP_OID_STRUCT(git_packbuilder_pobjectmap, git_pobject *);
|
|
57
|
+
GIT_HASHMAP_OID_STRUCT(git_packbuilder_walk_objectmap, walk_object *);
|
|
58
|
+
|
|
54
59
|
struct git_packbuilder {
|
|
55
60
|
git_repository *repo; /* associated repository */
|
|
56
61
|
git_odb *odb; /* associated object database */
|
|
@@ -69,9 +74,8 @@ struct git_packbuilder {
|
|
|
69
74
|
|
|
70
75
|
git_pobject *object_list;
|
|
71
76
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
git_oidmap *walk_objects;
|
|
77
|
+
git_packbuilder_pobjectmap object_ix;
|
|
78
|
+
git_packbuilder_walk_objectmap walk_objects;
|
|
75
79
|
git_pool object_pool;
|
|
76
80
|
|
|
77
81
|
#ifndef GIT_DEPRECATE_HARD
|
|
@@ -100,6 +104,10 @@ struct git_packbuilder {
|
|
|
100
104
|
uint64_t last_progress_report_time;
|
|
101
105
|
|
|
102
106
|
bool done;
|
|
107
|
+
|
|
108
|
+
/* A non-zero error code in failure causes all threads to shut themselves
|
|
109
|
+
down. Some functions will return this error code. */
|
|
110
|
+
volatile int failure;
|
|
103
111
|
};
|
|
104
112
|
|
|
105
113
|
int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb);
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "odb.h"
|
|
14
14
|
#include "oid.h"
|
|
15
15
|
#include "oidarray.h"
|
|
16
|
+
#include "hashmap_oid.h"
|
|
16
17
|
|
|
17
18
|
/* Option to bypass checking existence of '.keep' files */
|
|
18
19
|
bool git_disable_pack_keep_file_checks = false;
|
|
@@ -41,6 +42,12 @@ static int pack_entry_find_offset(
|
|
|
41
42
|
const git_oid *short_oid,
|
|
42
43
|
size_t len);
|
|
43
44
|
|
|
45
|
+
#define off64_hash(key) (uint32_t)((key)>>33^(key)^(key)<<11)
|
|
46
|
+
#define off64_equal(a, b) ((a) == (b))
|
|
47
|
+
|
|
48
|
+
GIT_HASHMAP_FUNCTIONS(git_pack_offsetmap, GIT_HASHMAP_INLINE, off64_t, git_pack_cache_entry *, off64_hash, off64_equal);
|
|
49
|
+
GIT_HASHMAP_OID_FUNCTIONS(git_pack_oidmap, , struct git_pack_entry *);
|
|
50
|
+
|
|
44
51
|
static int packfile_error(const char *message)
|
|
45
52
|
{
|
|
46
53
|
git_error_set(GIT_ERROR_ODB, "invalid pack file - %s", message);
|
|
@@ -75,31 +82,21 @@ static void free_cache_object(void *o)
|
|
|
75
82
|
|
|
76
83
|
static void cache_free(git_pack_cache *cache)
|
|
77
84
|
{
|
|
85
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
78
86
|
git_pack_cache_entry *entry;
|
|
79
87
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
free_cache_object(entry);
|
|
83
|
-
});
|
|
88
|
+
while (git_pack_offsetmap_iterate(&iter, NULL, &entry, &cache->entries) == 0)
|
|
89
|
+
free_cache_object(entry);
|
|
84
90
|
|
|
85
|
-
|
|
86
|
-
cache->entries = NULL;
|
|
87
|
-
}
|
|
91
|
+
git_pack_offsetmap_dispose(&cache->entries);
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
static int cache_init(git_pack_cache *cache)
|
|
91
95
|
{
|
|
92
|
-
if (git_offmap_new(&cache->entries) < 0)
|
|
93
|
-
return -1;
|
|
94
|
-
|
|
95
96
|
cache->memory_limit = GIT_PACK_CACHE_MEMORY_LIMIT;
|
|
96
97
|
|
|
97
98
|
if (git_mutex_init(&cache->lock)) {
|
|
98
99
|
git_error_set(GIT_ERROR_OS, "failed to initialize pack cache mutex");
|
|
99
|
-
|
|
100
|
-
git__free(cache->entries);
|
|
101
|
-
cache->entries = NULL;
|
|
102
|
-
|
|
103
100
|
return -1;
|
|
104
101
|
}
|
|
105
102
|
|
|
@@ -108,15 +105,16 @@ static int cache_init(git_pack_cache *cache)
|
|
|
108
105
|
|
|
109
106
|
static git_pack_cache_entry *cache_get(git_pack_cache *cache, off64_t offset)
|
|
110
107
|
{
|
|
111
|
-
git_pack_cache_entry *entry;
|
|
108
|
+
git_pack_cache_entry *entry = NULL;
|
|
112
109
|
|
|
113
110
|
if (git_mutex_lock(&cache->lock) < 0)
|
|
114
111
|
return NULL;
|
|
115
112
|
|
|
116
|
-
if ((entry
|
|
113
|
+
if (git_pack_offsetmap_get(&entry, &cache->entries, offset) == 0) {
|
|
117
114
|
git_atomic32_inc(&entry->refcount);
|
|
118
115
|
entry->last_usage = cache->use_ctr++;
|
|
119
116
|
}
|
|
117
|
+
|
|
120
118
|
git_mutex_unlock(&cache->lock);
|
|
121
119
|
|
|
122
120
|
return entry;
|
|
@@ -125,16 +123,17 @@ static git_pack_cache_entry *cache_get(git_pack_cache *cache, off64_t offset)
|
|
|
125
123
|
/* Run with the cache lock held */
|
|
126
124
|
static void free_lowest_entry(git_pack_cache *cache)
|
|
127
125
|
{
|
|
128
|
-
|
|
126
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
129
127
|
git_pack_cache_entry *entry;
|
|
128
|
+
off64_t offset;
|
|
130
129
|
|
|
131
|
-
|
|
130
|
+
while (git_pack_offsetmap_iterate(&iter, &offset, &entry, &cache->entries) == 0) {
|
|
132
131
|
if (entry && git_atomic32_get(&entry->refcount) == 0) {
|
|
133
132
|
cache->memory_used -= entry->raw.len;
|
|
134
|
-
|
|
133
|
+
git_pack_offsetmap_remove(&cache->entries, offset);
|
|
135
134
|
free_cache_object(entry);
|
|
136
135
|
}
|
|
137
|
-
}
|
|
136
|
+
}
|
|
138
137
|
}
|
|
139
138
|
|
|
140
139
|
static int cache_add(
|
|
@@ -157,12 +156,12 @@ static int cache_add(
|
|
|
157
156
|
return -1;
|
|
158
157
|
}
|
|
159
158
|
/* Add it to the cache if nobody else has */
|
|
160
|
-
exists =
|
|
159
|
+
exists = git_pack_offsetmap_contains(&cache->entries, offset);
|
|
161
160
|
if (!exists) {
|
|
162
161
|
while (cache->memory_used + base->len > cache->memory_limit)
|
|
163
162
|
free_lowest_entry(cache);
|
|
164
163
|
|
|
165
|
-
|
|
164
|
+
git_pack_offsetmap_put(&cache->entries, offset, entry);
|
|
166
165
|
cache->memory_used += entry->raw.len;
|
|
167
166
|
|
|
168
167
|
*cached_out = entry;
|
|
@@ -942,6 +941,9 @@ static int packfile_unpack_compressed(
|
|
|
942
941
|
goto out;
|
|
943
942
|
}
|
|
944
943
|
|
|
944
|
+
/* zlib may have garbled the trailing buffer */
|
|
945
|
+
data[size] = '\0';
|
|
946
|
+
|
|
945
947
|
obj->type = type;
|
|
946
948
|
obj->len = size;
|
|
947
949
|
obj->data = data;
|
|
@@ -1009,7 +1011,7 @@ int get_delta_base(
|
|
|
1009
1011
|
if (p->has_cache) {
|
|
1010
1012
|
struct git_pack_entry *entry;
|
|
1011
1013
|
|
|
1012
|
-
if ((entry
|
|
1014
|
+
if (git_pack_oidmap_get(&entry, &p->idx_cache, &base_oid) == 0) {
|
|
1013
1015
|
if (entry->offset == 0)
|
|
1014
1016
|
return packfile_error("delta offset is zero");
|
|
1015
1017
|
|
|
@@ -1351,7 +1353,7 @@ int git_pack_foreach_entry(
|
|
|
1351
1353
|
git_vector_insert(&oids, (void*)¤t[4]);
|
|
1352
1354
|
}
|
|
1353
1355
|
|
|
1354
|
-
|
|
1356
|
+
git_vector_dispose(&offsets);
|
|
1355
1357
|
p->ids = (unsigned char **)git_vector_detach(NULL, NULL, &oids);
|
|
1356
1358
|
}
|
|
1357
1359
|
|
|
@@ -1499,6 +1501,7 @@ static int pack_entry_find_offset(
|
|
|
1499
1501
|
size_t len)
|
|
1500
1502
|
{
|
|
1501
1503
|
const uint32_t *level1_ofs;
|
|
1504
|
+
size_t ofs_delta = 0;
|
|
1502
1505
|
const unsigned char *index;
|
|
1503
1506
|
unsigned hi, lo, stride;
|
|
1504
1507
|
int pos, found = 0;
|
|
@@ -1524,9 +1527,15 @@ static int pack_entry_find_offset(
|
|
|
1524
1527
|
|
|
1525
1528
|
if (p->index_version > 1) {
|
|
1526
1529
|
level1_ofs += 2;
|
|
1530
|
+
ofs_delta = 2;
|
|
1527
1531
|
index += 8;
|
|
1528
1532
|
}
|
|
1529
1533
|
|
|
1534
|
+
if ((size_t)short_oid->id[0] + ofs_delta >= p->index_map.len) {
|
|
1535
|
+
git_error_set(GIT_ERROR_INTERNAL, "internal error: p->short_oid->[0] out of bounds");
|
|
1536
|
+
goto cleanup;
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1530
1539
|
index += 4 * 256;
|
|
1531
1540
|
hi = ntohl(level1_ofs[(int)short_oid->id[0]]);
|
|
1532
1541
|
lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(level1_ofs[(int)short_oid->id[0] - 1]));
|
|
@@ -16,10 +16,9 @@
|
|
|
16
16
|
#include "map.h"
|
|
17
17
|
#include "mwindow.h"
|
|
18
18
|
#include "odb.h"
|
|
19
|
-
#include "offmap.h"
|
|
20
|
-
#include "oidmap.h"
|
|
21
19
|
#include "zstream.h"
|
|
22
20
|
#include "oid.h"
|
|
21
|
+
#include "hashmap_oid.h"
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* Function type for callbacks from git_pack_foreach_entry_offset.
|
|
@@ -83,12 +82,23 @@ typedef git_array_t(struct pack_chain_elem) git_dependency_chain;
|
|
|
83
82
|
#define GIT_PACK_CACHE_MEMORY_LIMIT 16 * 1024 * 1024
|
|
84
83
|
#define GIT_PACK_CACHE_SIZE_LIMIT 1024 * 1024 /* don't bother caching anything over 1MB */
|
|
85
84
|
|
|
85
|
+
struct git_pack_entry {
|
|
86
|
+
off64_t offset;
|
|
87
|
+
git_oid id;
|
|
88
|
+
struct git_pack_file *p;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
GIT_HASHMAP_STRUCT(git_pack_offsetmap, off64_t, git_pack_cache_entry *);
|
|
92
|
+
|
|
93
|
+
GIT_HASHMAP_OID_STRUCT(git_pack_oidmap, struct git_pack_entry *);
|
|
94
|
+
GIT_HASHMAP_OID_PROTOTYPES(git_pack_oidmap, struct git_pack_entry *);
|
|
95
|
+
|
|
86
96
|
typedef struct {
|
|
87
97
|
size_t memory_used;
|
|
88
98
|
size_t memory_limit;
|
|
89
99
|
size_t use_ctr;
|
|
90
100
|
git_mutex lock;
|
|
91
|
-
|
|
101
|
+
git_pack_offsetmap entries;
|
|
92
102
|
} git_pack_cache;
|
|
93
103
|
|
|
94
104
|
struct git_pack_file {
|
|
@@ -110,7 +120,8 @@ struct git_pack_file {
|
|
|
110
120
|
|
|
111
121
|
int index_version;
|
|
112
122
|
git_time_t mtime;
|
|
113
|
-
|
|
123
|
+
|
|
124
|
+
git_pack_oidmap idx_cache;
|
|
114
125
|
unsigned char **ids;
|
|
115
126
|
|
|
116
127
|
git_pack_cache bases; /* delta base cache */
|
|
@@ -139,12 +150,6 @@ int git_pack__lookup_id(
|
|
|
139
150
|
const unsigned char *id_prefix,
|
|
140
151
|
const git_oid_t oid_type);
|
|
141
152
|
|
|
142
|
-
struct git_pack_entry {
|
|
143
|
-
off64_t offset;
|
|
144
|
-
git_oid id;
|
|
145
|
-
struct git_pack_file *p;
|
|
146
|
-
};
|
|
147
|
-
|
|
148
153
|
typedef struct git_packfile_stream {
|
|
149
154
|
off64_t curpos;
|
|
150
155
|
int done;
|
|
@@ -562,9 +562,9 @@ fail:
|
|
|
562
562
|
|
|
563
563
|
static int eof_for_origin(int origin) {
|
|
564
564
|
if (origin == GIT_DIFF_LINE_ADDITION)
|
|
565
|
-
return GIT_DIFF_LINE_ADD_EOFNL;
|
|
566
|
-
if (origin == GIT_DIFF_LINE_DELETION)
|
|
567
565
|
return GIT_DIFF_LINE_DEL_EOFNL;
|
|
566
|
+
if (origin == GIT_DIFF_LINE_DELETION)
|
|
567
|
+
return GIT_DIFF_LINE_ADD_EOFNL;
|
|
568
568
|
return GIT_DIFF_LINE_CONTEXT_EOFNL;
|
|
569
569
|
}
|
|
570
570
|
|
|
@@ -202,7 +202,7 @@ GIT_INLINE(size_t) common_prefix_icase(const char *str, size_t len, const char *
|
|
|
202
202
|
{
|
|
203
203
|
size_t count = 0;
|
|
204
204
|
|
|
205
|
-
while (len > 0 &&
|
|
205
|
+
while (len > 0 && git__tolower(*str) == git__tolower(*prefix)) {
|
|
206
206
|
count++;
|
|
207
207
|
str++;
|
|
208
208
|
prefix++;
|