rugged 1.7.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +120 -63
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +99 -14
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +23 -24
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +94 -18
- data/vendor/libgit2/include/git2/repository.h +57 -21
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +43 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +24 -3
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +130 -44
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +186 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +92 -0
- data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +389 -298
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +99 -88
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +68 -90
- data/vendor/libgit2/src/libgit2/index.h +2 -2
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +34 -38
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +42 -37
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/midx.c +28 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +5 -4
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +32 -5
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +30 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +26 -7
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +121 -61
- data/vendor/libgit2/src/libgit2/repository.c +231 -51
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +4 -1
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/fs_path.c +15 -4
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +13 -7
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +2 -2
- data/vendor/libgit2/src/util/util.h +4 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- metadata +45 -28
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -293
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
|
@@ -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
|
}
|
|
@@ -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
|
|
|
@@ -153,15 +153,42 @@ int git_oid_pathfmt(char *str, const git_oid *oid)
|
|
|
153
153
|
return 0;
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
+
static git_tlsdata_key thread_str_key;
|
|
157
|
+
|
|
158
|
+
static void GIT_SYSTEM_CALL thread_str_free(void *s)
|
|
159
|
+
{
|
|
160
|
+
char *str = (char *)s;
|
|
161
|
+
git__free(str);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static void thread_str_global_shutdown(void)
|
|
165
|
+
{
|
|
166
|
+
char *str = git_tlsdata_get(thread_str_key);
|
|
167
|
+
git_tlsdata_set(thread_str_key, NULL);
|
|
168
|
+
|
|
169
|
+
git__free(str);
|
|
170
|
+
git_tlsdata_dispose(thread_str_key);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
int git_oid_global_init(void)
|
|
174
|
+
{
|
|
175
|
+
if (git_tlsdata_init(&thread_str_key, thread_str_free) != 0)
|
|
176
|
+
return -1;
|
|
177
|
+
|
|
178
|
+
return git_runtime_shutdown_register(thread_str_global_shutdown);
|
|
179
|
+
}
|
|
180
|
+
|
|
156
181
|
char *git_oid_tostr_s(const git_oid *oid)
|
|
157
182
|
{
|
|
158
|
-
git_threadstate *threadstate = git_threadstate_get();
|
|
159
183
|
char *str;
|
|
160
184
|
|
|
161
|
-
if (
|
|
162
|
-
|
|
185
|
+
if ((str = git_tlsdata_get(thread_str_key)) == NULL) {
|
|
186
|
+
if ((str = git__malloc(GIT_OID_MAX_HEXSIZE + 1)) == NULL)
|
|
187
|
+
return NULL;
|
|
188
|
+
|
|
189
|
+
git_tlsdata_set(thread_str_key, str);
|
|
190
|
+
}
|
|
163
191
|
|
|
164
|
-
str = threadstate->oid_fmt;
|
|
165
192
|
git_oid_nfmt(str, git_oid_hexsize(git_oid_type(oid)) + 1, oid);
|
|
166
193
|
return str;
|
|
167
194
|
}
|
|
@@ -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);
|
|
@@ -1419,8 +1442,9 @@ int git_packbuilder_write(
|
|
|
1419
1442
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
1420
1443
|
opts.mode = mode;
|
|
1421
1444
|
opts.odb = pb->odb;
|
|
1445
|
+
opts.oid_type = GIT_OID_SHA1;
|
|
1422
1446
|
|
|
1423
|
-
error = git_indexer_new(&indexer, path,
|
|
1447
|
+
error = git_indexer_new(&indexer, path, &opts);
|
|
1424
1448
|
#else
|
|
1425
1449
|
error = git_indexer_new(&indexer, path, mode, pb->odb, &opts);
|
|
1426
1450
|
#endif
|
|
@@ -1584,12 +1608,16 @@ static int retrieve_object(struct walk_object **out, git_packbuilder *pb, const
|
|
|
1584
1608
|
struct walk_object *obj;
|
|
1585
1609
|
int error;
|
|
1586
1610
|
|
|
1587
|
-
|
|
1611
|
+
error = git_packbuilder_walk_objectmap_get(&obj, &pb->walk_objects, id);
|
|
1612
|
+
|
|
1613
|
+
if (error == GIT_ENOTFOUND) {
|
|
1588
1614
|
if ((error = lookup_walk_object(&obj, pb, id)) < 0)
|
|
1589
1615
|
return error;
|
|
1590
1616
|
|
|
1591
|
-
if ((error =
|
|
1617
|
+
if ((error = git_packbuilder_walk_objectmap_put(&pb->walk_objects, &obj->id, obj)) < 0)
|
|
1592
1618
|
return error;
|
|
1619
|
+
} else if (error != 0) {
|
|
1620
|
+
return error;
|
|
1593
1621
|
}
|
|
1594
1622
|
|
|
1595
1623
|
*out = obj;
|
|
@@ -1821,13 +1849,12 @@ void git_packbuilder_free(git_packbuilder *pb)
|
|
|
1821
1849
|
if (pb->odb)
|
|
1822
1850
|
git_odb_free(pb->odb);
|
|
1823
1851
|
|
|
1824
|
-
|
|
1825
|
-
git_oidmap_free(pb->object_ix);
|
|
1852
|
+
git_packbuilder_pobjectmap_dispose(&pb->object_ix);
|
|
1826
1853
|
|
|
1827
1854
|
if (pb->object_list)
|
|
1828
1855
|
git__free(pb->object_list);
|
|
1829
1856
|
|
|
1830
|
-
|
|
1857
|
+
git_packbuilder_walk_objectmap_dispose(&pb->walk_objects);
|
|
1831
1858
|
git_pool_clear(&pb->object_pool);
|
|
1832
1859
|
|
|
1833
1860
|
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);
|