rugged 1.6.3 → 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/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- 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/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- 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 +138 -56
- 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 +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- 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 -6
- 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 +24 -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 +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 +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- 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 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- 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 +47 -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 +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- 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 +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- 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 +27 -13
- 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 +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- 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 +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- 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 +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- 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 +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- 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 +113 -96
- 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 +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- 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_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- 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 +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- 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 +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- 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 +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- 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 +34 -8
- 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 +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- 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/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- 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/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- 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/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -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 +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- 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 +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- 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/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -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/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- 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 +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -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 +6 -10
- 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/staticstr.h +66 -0
- 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 +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- 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 -238
- 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/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- 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 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- 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
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -309,11 +309,17 @@ static int pack_entry_find_prefix(
|
|
309
309
|
{
|
310
310
|
int error;
|
311
311
|
size_t i;
|
312
|
-
git_oid found_full_oid
|
312
|
+
git_oid found_full_oid;
|
313
313
|
bool found = false;
|
314
314
|
struct git_pack_file *last_found = backend->last_found, *p;
|
315
315
|
git_midx_entry midx_entry;
|
316
316
|
|
317
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
318
|
+
git_oid_clear(&found_full_oid, short_oid->type);
|
319
|
+
#else
|
320
|
+
git_oid_clear(&found_full_oid, GIT_OID_SHA1);
|
321
|
+
#endif
|
322
|
+
|
317
323
|
if (backend->midx) {
|
318
324
|
error = git_midx_entry_find(&midx_entry, backend->midx, short_oid, len);
|
319
325
|
if (error == GIT_EAMBIGUOUS)
|
@@ -473,7 +479,9 @@ static int refresh_multi_pack_index(struct pack_backend *backend)
|
|
473
479
|
}
|
474
480
|
}
|
475
481
|
|
476
|
-
error = git_midx_open(&backend->midx, git_str_cstr(&midx_path)
|
482
|
+
error = git_midx_open(&backend->midx, git_str_cstr(&midx_path),
|
483
|
+
backend->opts.oid_type);
|
484
|
+
|
477
485
|
git_str_dispose(&midx_path);
|
478
486
|
if (error < 0)
|
479
487
|
return error;
|
@@ -735,10 +743,10 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
|
|
735
743
|
|
736
744
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
737
745
|
opts.odb = odb;
|
746
|
+
opts.oid_type = backend->opts.oid_type;
|
738
747
|
|
739
748
|
error = git_indexer_new(&writepack->indexer,
|
740
749
|
backend->pack_folder,
|
741
|
-
backend->opts.oid_type,
|
742
750
|
&opts);
|
743
751
|
#else
|
744
752
|
error = git_indexer_new(&writepack->indexer,
|
@@ -788,11 +796,24 @@ static int pack_backend__writemidx(git_odb_backend *_backend)
|
|
788
796
|
size_t i;
|
789
797
|
int error = 0;
|
790
798
|
|
799
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
800
|
+
git_midx_writer_options midx_opts = GIT_MIDX_WRITER_OPTIONS_INIT;
|
801
|
+
#endif
|
802
|
+
|
791
803
|
GIT_ASSERT_ARG(_backend);
|
792
804
|
|
793
805
|
backend = (struct pack_backend *)_backend;
|
794
806
|
|
795
|
-
|
807
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
808
|
+
midx_opts.oid_type = backend->opts.oid_type;
|
809
|
+
#endif
|
810
|
+
|
811
|
+
error = git_midx_writer_new(&w, backend->pack_folder
|
812
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
813
|
+
, &midx_opts
|
814
|
+
#endif
|
815
|
+
);
|
816
|
+
|
796
817
|
if (error < 0)
|
797
818
|
return error;
|
798
819
|
|
@@ -850,8 +871,8 @@ static void pack_backend__free(git_odb_backend *_backend)
|
|
850
871
|
git_mwindow_put_pack(p);
|
851
872
|
|
852
873
|
git_midx_free(backend->midx);
|
853
|
-
|
854
|
-
|
874
|
+
git_vector_dispose(&backend->midx_packs);
|
875
|
+
git_vector_dispose(&backend->packs);
|
855
876
|
git__free(backend->pack_folder);
|
856
877
|
git__free(backend);
|
857
878
|
}
|
@@ -870,7 +891,7 @@ static int pack_backend__alloc(
|
|
870
891
|
}
|
871
892
|
|
872
893
|
if (git_vector_init(&backend->packs, initial_size, packfile_sort__cb) < 0) {
|
873
|
-
|
894
|
+
git_vector_dispose(&backend->midx_packs);
|
874
895
|
git__free(backend);
|
875
896
|
return -1;
|
876
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,9 +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
|
-
char *str
|
183
|
+
char *str;
|
184
|
+
|
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
|
+
}
|
191
|
+
|
159
192
|
git_oid_nfmt(str, git_oid_hexsize(git_oid_type(oid)) + 1, oid);
|
160
193
|
return str;
|
161
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
|
@@ -15,10 +15,17 @@ void git_oidarray_dispose(git_oidarray *arr)
|
|
15
15
|
git__free(arr->ids);
|
16
16
|
}
|
17
17
|
|
18
|
-
void git_oidarray__from_array(git_oidarray *
|
18
|
+
void git_oidarray__from_array(git_oidarray *out, const git_array_oid_t *array)
|
19
19
|
{
|
20
|
-
|
21
|
-
|
20
|
+
out->count = array->size;
|
21
|
+
out->ids = array->ptr;
|
22
|
+
}
|
23
|
+
|
24
|
+
void git_oidarray__to_array(git_array_oid_t *out, const git_oidarray *array)
|
25
|
+
{
|
26
|
+
out->ptr = array->ids;
|
27
|
+
out->size = array->count;
|
28
|
+
out->asize = array->count;
|
22
29
|
}
|
23
30
|
|
24
31
|
void git_oidarray__reverse(git_oidarray *arr)
|
@@ -33,6 +40,45 @@ void git_oidarray__reverse(git_oidarray *arr)
|
|
33
40
|
}
|
34
41
|
}
|
35
42
|
|
43
|
+
int git_oidarray__add(git_array_oid_t *arr, git_oid *id)
|
44
|
+
{
|
45
|
+
git_oid *add, *iter;
|
46
|
+
size_t i;
|
47
|
+
|
48
|
+
git_array_foreach(*arr, i, iter) {
|
49
|
+
if (git_oid_cmp(iter, id) == 0)
|
50
|
+
return 0;
|
51
|
+
}
|
52
|
+
|
53
|
+
if ((add = git_array_alloc(*arr)) == NULL)
|
54
|
+
return -1;
|
55
|
+
|
56
|
+
git_oid_cpy(add, id);
|
57
|
+
return 0;
|
58
|
+
}
|
59
|
+
|
60
|
+
bool git_oidarray__remove(git_array_oid_t *arr, git_oid *id)
|
61
|
+
{
|
62
|
+
bool found = false;
|
63
|
+
size_t remain, i;
|
64
|
+
git_oid *iter;
|
65
|
+
|
66
|
+
git_array_foreach(*arr, i, iter) {
|
67
|
+
if (git_oid_cmp(iter, id) == 0) {
|
68
|
+
arr->size--;
|
69
|
+
remain = arr->size - i;
|
70
|
+
|
71
|
+
if (remain > 0)
|
72
|
+
memmove(&arr->ptr[i], &arr->ptr[i+1], remain * sizeof(git_oid));
|
73
|
+
|
74
|
+
found = true;
|
75
|
+
break;
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
return found;
|
80
|
+
}
|
81
|
+
|
36
82
|
#ifndef GIT_DEPRECATE_HARD
|
37
83
|
|
38
84
|
void git_oidarray_free(git_oidarray *arr)
|
@@ -15,6 +15,10 @@
|
|
15
15
|
typedef git_array_t(git_oid) git_array_oid_t;
|
16
16
|
|
17
17
|
extern void git_oidarray__reverse(git_oidarray *arr);
|
18
|
-
extern void git_oidarray__from_array(git_oidarray *
|
18
|
+
extern void git_oidarray__from_array(git_oidarray *out, const git_array_oid_t *array);
|
19
|
+
extern void git_oidarray__to_array(git_array_oid_t *out, const git_oidarray *array);
|
20
|
+
|
21
|
+
int git_oidarray__add(git_array_oid_t *arr, git_oid *id);
|
22
|
+
bool git_oidarray__remove(git_array_oid_t *arr, git_oid *id);
|
19
23
|
|
20
24
|
#endif
|
@@ -11,7 +11,6 @@
|
|
11
11
|
#include "zstream.h"
|
12
12
|
#include "delta.h"
|
13
13
|
#include "iterator.h"
|
14
|
-
#include "netops.h"
|
15
14
|
#include "pack.h"
|
16
15
|
#include "thread.h"
|
17
16
|
#include "tree.h"
|
@@ -65,6 +64,9 @@ struct walk_object {
|
|
65
64
|
/* Size of the buffer to feed to zlib */
|
66
65
|
#define COMPRESS_BUFLEN (1024 * 1024)
|
67
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
|
+
|
68
70
|
static unsigned name_hash(const char *name)
|
69
71
|
{
|
70
72
|
unsigned c, hash = 0;
|
@@ -127,6 +129,7 @@ out:
|
|
127
129
|
|
128
130
|
int git_packbuilder_new(git_packbuilder **out, git_repository *repo)
|
129
131
|
{
|
132
|
+
git_hash_algorithm_t hash_algorithm;
|
130
133
|
git_packbuilder *pb;
|
131
134
|
|
132
135
|
*out = NULL;
|
@@ -134,15 +137,18 @@ int git_packbuilder_new(git_packbuilder **out, git_repository *repo)
|
|
134
137
|
pb = git__calloc(1, sizeof(*pb));
|
135
138
|
GIT_ERROR_CHECK_ALLOC(pb);
|
136
139
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
+
pb->oid_type = repo->oid_type;
|
141
|
+
|
142
|
+
hash_algorithm = git_oid_algorithm(pb->oid_type);
|
143
|
+
GIT_ASSERT(hash_algorithm);
|
144
|
+
|
145
|
+
if (git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
|
140
146
|
goto on_error;
|
141
147
|
|
142
148
|
pb->repo = repo;
|
143
149
|
pb->nr_threads = 1; /* do not spawn any thread by default */
|
144
150
|
|
145
|
-
if (git_hash_ctx_init(&pb->ctx,
|
151
|
+
if (git_hash_ctx_init(&pb->ctx, hash_algorithm) < 0 ||
|
146
152
|
git_zstream_init(&pb->zstream, GIT_ZSTREAM_DEFLATE) < 0 ||
|
147
153
|
git_repository_odb(&pb->odb, repo) < 0 ||
|
148
154
|
packbuilder_config(pb) < 0)
|
@@ -187,10 +193,10 @@ static int rehash(git_packbuilder *pb)
|
|
187
193
|
git_pobject *po;
|
188
194
|
size_t i;
|
189
195
|
|
190
|
-
|
196
|
+
git_packbuilder_pobjectmap_clear(&pb->object_ix);
|
191
197
|
|
192
198
|
for (i = 0, po = pb->object_list; i < pb->nr_objects; i++, po++) {
|
193
|
-
if (
|
199
|
+
if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0)
|
194
200
|
return -1;
|
195
201
|
}
|
196
202
|
|
@@ -209,7 +215,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
|
|
209
215
|
|
210
216
|
/* If the object already exists in the hash table, then we don't
|
211
217
|
* have any work to do */
|
212
|
-
if (
|
218
|
+
if (git_packbuilder_pobjectmap_contains(&pb->object_ix, oid))
|
213
219
|
return 0;
|
214
220
|
|
215
221
|
if (pb->nr_objects >= pb->nr_alloc) {
|
@@ -241,7 +247,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
|
|
241
247
|
git_oid_cpy(&po->id, oid);
|
242
248
|
po->hash = name_hash(name);
|
243
249
|
|
244
|
-
if (
|
250
|
+
if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0) {
|
245
251
|
git_error_set_oom();
|
246
252
|
return -1;
|
247
253
|
}
|
@@ -249,10 +255,10 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
|
|
249
255
|
pb->done = false;
|
250
256
|
|
251
257
|
if (pb->progress_cb) {
|
252
|
-
|
253
|
-
|
258
|
+
uint64_t current_time = git_time_monotonic();
|
259
|
+
uint64_t elapsed = current_time - pb->last_progress_report_time;
|
254
260
|
|
255
|
-
if (elapsed
|
261
|
+
if (elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
|
256
262
|
pb->last_progress_report_time = current_time;
|
257
263
|
|
258
264
|
ret = pb->progress_cb(
|
@@ -315,9 +321,11 @@ static int write_object(
|
|
315
321
|
git_object_t type;
|
316
322
|
unsigned char hdr[10], *zbuf = NULL;
|
317
323
|
void *data = NULL;
|
318
|
-
size_t hdr_len, zbuf_len = COMPRESS_BUFLEN, data_len;
|
324
|
+
size_t hdr_len, zbuf_len = COMPRESS_BUFLEN, data_len, oid_size;
|
319
325
|
int error;
|
320
326
|
|
327
|
+
oid_size = git_oid_size(pb->oid_type);
|
328
|
+
|
321
329
|
/*
|
322
330
|
* If we have a delta base, let's use the delta to save space.
|
323
331
|
* Otherwise load the whole object. 'data' ends up pointing to
|
@@ -347,8 +355,8 @@ static int write_object(
|
|
347
355
|
goto done;
|
348
356
|
|
349
357
|
if (type == GIT_OBJECT_REF_DELTA) {
|
350
|
-
if ((error = write_cb(po->delta->id.id,
|
351
|
-
|
358
|
+
if ((error = write_cb(po->delta->id.id, oid_size, cb_data)) < 0 ||
|
359
|
+
(error = git_hash_update(&pb->ctx, po->delta->id.id, oid_size)) < 0)
|
352
360
|
goto done;
|
353
361
|
}
|
354
362
|
|
@@ -508,7 +516,7 @@ static int cb_tag_foreach(const char *name, git_oid *oid, void *data)
|
|
508
516
|
|
509
517
|
GIT_UNUSED(name);
|
510
518
|
|
511
|
-
if ((po
|
519
|
+
if (git_packbuilder_pobjectmap_get(&po, &pb->object_ix, oid) != 0)
|
512
520
|
return 0;
|
513
521
|
|
514
522
|
po->tagged = 1;
|
@@ -668,7 +676,7 @@ static int write_pack(git_packbuilder *pb,
|
|
668
676
|
if ((error = git_hash_final(entry_oid.id, &pb->ctx)) < 0)
|
669
677
|
goto done;
|
670
678
|
|
671
|
-
error = write_cb(entry_oid.id,
|
679
|
+
error = write_cb(entry_oid.id, git_oid_size(pb->oid_type), cb_data);
|
672
680
|
|
673
681
|
done:
|
674
682
|
/* if callback cancelled writing, we must still free delta_data */
|
@@ -925,19 +933,24 @@ static int report_delta_progress(
|
|
925
933
|
{
|
926
934
|
int ret;
|
927
935
|
|
936
|
+
if (pb->failure)
|
937
|
+
return pb->failure;
|
938
|
+
|
928
939
|
if (pb->progress_cb) {
|
929
|
-
|
930
|
-
|
940
|
+
uint64_t current_time = git_time_monotonic();
|
941
|
+
uint64_t elapsed = current_time - pb->last_progress_report_time;
|
931
942
|
|
932
|
-
if (force || elapsed
|
943
|
+
if (force || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
|
933
944
|
pb->last_progress_report_time = current_time;
|
934
945
|
|
935
946
|
ret = pb->progress_cb(
|
936
947
|
GIT_PACKBUILDER_DELTAFICATION,
|
937
948
|
count, pb->nr_objects, pb->progress_cb_payload);
|
938
949
|
|
939
|
-
if (ret)
|
950
|
+
if (ret) {
|
951
|
+
pb->failure = ret;
|
940
952
|
return git_error_set_after_callback(ret);
|
953
|
+
}
|
941
954
|
}
|
942
955
|
}
|
943
956
|
|
@@ -969,7 +982,10 @@ static int find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
969
982
|
}
|
970
983
|
|
971
984
|
pb->nr_deltified += 1;
|
972
|
-
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
|
+
}
|
973
989
|
|
974
990
|
po = *list++;
|
975
991
|
(*list_size)--;
|
@@ -1117,6 +1133,10 @@ struct thread_params {
|
|
1117
1133
|
size_t depth;
|
1118
1134
|
size_t working;
|
1119
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;
|
1120
1140
|
};
|
1121
1141
|
|
1122
1142
|
static void *threaded_find_deltas(void *arg)
|
@@ -1126,7 +1146,12 @@ static void *threaded_find_deltas(void *arg)
|
|
1126
1146
|
while (me->remaining) {
|
1127
1147
|
if (find_deltas(me->pb, me->list, &me->remaining,
|
1128
1148
|
me->window, me->depth) < 0) {
|
1129
|
-
|
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;
|
1130
1155
|
}
|
1131
1156
|
|
1132
1157
|
GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_lock(me->pb) == 0, NULL);
|
@@ -1168,8 +1193,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
1168
1193
|
pb->nr_threads = git__online_cpus();
|
1169
1194
|
|
1170
1195
|
if (pb->nr_threads <= 1) {
|
1171
|
-
find_deltas(pb, list, &list_size, window, depth);
|
1172
|
-
return 0;
|
1196
|
+
return find_deltas(pb, list, &list_size, window, depth);
|
1173
1197
|
}
|
1174
1198
|
|
1175
1199
|
p = git__mallocarray(pb->nr_threads, sizeof(*p));
|
@@ -1188,6 +1212,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
1188
1212
|
p[i].depth = depth;
|
1189
1213
|
p[i].working = 1;
|
1190
1214
|
p[i].data_ready = 0;
|
1215
|
+
p[i].stopped = 0;
|
1191
1216
|
|
1192
1217
|
/* try to split chunks on "path" boundaries */
|
1193
1218
|
while (sub_size && sub_size < list_size &&
|
@@ -1255,7 +1280,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
1255
1280
|
(!victim || victim->remaining < p[i].remaining))
|
1256
1281
|
victim = &p[i];
|
1257
1282
|
|
1258
|
-
if (victim) {
|
1283
|
+
if (victim && !target->stopped) {
|
1259
1284
|
sub_size = victim->remaining / 2;
|
1260
1285
|
list = victim->list + victim->list_size - sub_size;
|
1261
1286
|
while (sub_size && list[0]->hash &&
|
@@ -1279,7 +1304,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
1279
1304
|
}
|
1280
1305
|
target->list_size = sub_size;
|
1281
1306
|
target->remaining = sub_size;
|
1282
|
-
target->working = 1;
|
1307
|
+
target->working = 1; /* even when target->stopped, so that we don't process this thread again */
|
1283
1308
|
GIT_ASSERT(git_packbuilder__progress_unlock(pb) == 0);
|
1284
1309
|
|
1285
1310
|
if (git_mutex_lock(&target->mutex)) {
|
@@ -1292,7 +1317,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
1292
1317
|
git_cond_signal(&target->cond);
|
1293
1318
|
git_mutex_unlock(&target->mutex);
|
1294
1319
|
|
1295
|
-
if (!sub_size) {
|
1320
|
+
if (target->stopped || !sub_size) {
|
1296
1321
|
git_thread_join(&target->thread, NULL);
|
1297
1322
|
git_cond_free(&target->cond);
|
1298
1323
|
git_mutex_free(&target->mutex);
|
@@ -1301,7 +1326,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
|
|
1301
1326
|
}
|
1302
1327
|
|
1303
1328
|
git__free(p);
|
1304
|
-
return
|
1329
|
+
return pb->failure;
|
1305
1330
|
}
|
1306
1331
|
|
1307
1332
|
#else
|
@@ -1312,6 +1337,7 @@ int git_packbuilder__prepare(git_packbuilder *pb)
|
|
1312
1337
|
{
|
1313
1338
|
git_pobject **delta_list;
|
1314
1339
|
size_t i, n = 0;
|
1340
|
+
int error;
|
1315
1341
|
|
1316
1342
|
if (pb->nr_objects == 0 || pb->done)
|
1317
1343
|
return 0; /* nothing to do */
|
@@ -1320,8 +1346,10 @@ int git_packbuilder__prepare(git_packbuilder *pb)
|
|
1320
1346
|
* Although we do not report progress during deltafication, we
|
1321
1347
|
* at least report that we are in the deltafication stage
|
1322
1348
|
*/
|
1323
|
-
if (pb->progress_cb)
|
1324
|
-
|
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
|
+
}
|
1325
1353
|
|
1326
1354
|
delta_list = git__mallocarray(pb->nr_objects, sizeof(*delta_list));
|
1327
1355
|
GIT_ERROR_CHECK_ALLOC(delta_list);
|
@@ -1338,31 +1366,33 @@ int git_packbuilder__prepare(git_packbuilder *pb)
|
|
1338
1366
|
|
1339
1367
|
if (n > 1) {
|
1340
1368
|
git__tsort((void **)delta_list, n, type_size_sort);
|
1341
|
-
if (ll_find_deltas(pb, delta_list, n,
|
1369
|
+
if ((error = ll_find_deltas(pb, delta_list, n,
|
1342
1370
|
GIT_PACK_WINDOW + 1,
|
1343
|
-
GIT_PACK_DEPTH) < 0) {
|
1371
|
+
GIT_PACK_DEPTH)) < 0) {
|
1344
1372
|
git__free(delta_list);
|
1345
|
-
return
|
1373
|
+
return error;
|
1346
1374
|
}
|
1347
1375
|
}
|
1348
1376
|
|
1349
|
-
report_delta_progress(pb, pb->nr_objects, true);
|
1377
|
+
error = report_delta_progress(pb, pb->nr_objects, true);
|
1350
1378
|
|
1351
1379
|
pb->done = true;
|
1352
1380
|
git__free(delta_list);
|
1353
|
-
return
|
1381
|
+
return error;
|
1354
1382
|
}
|
1355
1383
|
|
1356
|
-
#define PREPARE_PACK
|
1384
|
+
#define PREPARE_PACK error = git_packbuilder__prepare(pb); if (error < 0) { return error; }
|
1357
1385
|
|
1358
1386
|
int git_packbuilder_foreach(git_packbuilder *pb, int (*cb)(void *buf, size_t size, void *payload), void *payload)
|
1359
1387
|
{
|
1388
|
+
int error;
|
1360
1389
|
PREPARE_PACK;
|
1361
1390
|
return write_pack(pb, cb, payload);
|
1362
1391
|
}
|
1363
1392
|
|
1364
1393
|
int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb)
|
1365
1394
|
{
|
1395
|
+
int error;
|
1366
1396
|
PREPARE_PACK;
|
1367
1397
|
|
1368
1398
|
return write_pack(pb, &write_pack_buf, buf);
|
@@ -1412,8 +1442,9 @@ int git_packbuilder_write(
|
|
1412
1442
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
1413
1443
|
opts.mode = mode;
|
1414
1444
|
opts.odb = pb->odb;
|
1445
|
+
opts.oid_type = GIT_OID_SHA1;
|
1415
1446
|
|
1416
|
-
error = git_indexer_new(&indexer, path,
|
1447
|
+
error = git_indexer_new(&indexer, path, &opts);
|
1417
1448
|
#else
|
1418
1449
|
error = git_indexer_new(&indexer, path, mode, pb->odb, &opts);
|
1419
1450
|
#endif
|
@@ -1577,12 +1608,16 @@ static int retrieve_object(struct walk_object **out, git_packbuilder *pb, const
|
|
1577
1608
|
struct walk_object *obj;
|
1578
1609
|
int error;
|
1579
1610
|
|
1580
|
-
|
1611
|
+
error = git_packbuilder_walk_objectmap_get(&obj, &pb->walk_objects, id);
|
1612
|
+
|
1613
|
+
if (error == GIT_ENOTFOUND) {
|
1581
1614
|
if ((error = lookup_walk_object(&obj, pb, id)) < 0)
|
1582
1615
|
return error;
|
1583
1616
|
|
1584
|
-
if ((error =
|
1617
|
+
if ((error = git_packbuilder_walk_objectmap_put(&pb->walk_objects, &obj->id, obj)) < 0)
|
1585
1618
|
return error;
|
1619
|
+
} else if (error != 0) {
|
1620
|
+
return error;
|
1586
1621
|
}
|
1587
1622
|
|
1588
1623
|
*out = obj;
|
@@ -1814,13 +1849,12 @@ void git_packbuilder_free(git_packbuilder *pb)
|
|
1814
1849
|
if (pb->odb)
|
1815
1850
|
git_odb_free(pb->odb);
|
1816
1851
|
|
1817
|
-
|
1818
|
-
git_oidmap_free(pb->object_ix);
|
1852
|
+
git_packbuilder_pobjectmap_dispose(&pb->object_ix);
|
1819
1853
|
|
1820
1854
|
if (pb->object_list)
|
1821
1855
|
git__free(pb->object_list);
|
1822
1856
|
|
1823
|
-
|
1857
|
+
git_packbuilder_walk_objectmap_dispose(&pb->walk_objects);
|
1824
1858
|
git_pool_clear(&pb->object_pool);
|
1825
1859
|
|
1826
1860
|
git_hash_ctx_cleanup(&pb->ctx);
|
@@ -12,11 +12,10 @@
|
|
12
12
|
|
13
13
|
#include "str.h"
|
14
14
|
#include "hash.h"
|
15
|
-
#include "oidmap.h"
|
16
|
-
#include "netops.h"
|
17
15
|
#include "zstream.h"
|
18
16
|
#include "pool.h"
|
19
17
|
#include "indexer.h"
|
18
|
+
#include "hashmap_oid.h"
|
20
19
|
|
21
20
|
#include "git2/oid.h"
|
22
21
|
#include "git2/pack.h"
|
@@ -52,10 +51,17 @@ typedef struct git_pobject {
|
|
52
51
|
filled:1;
|
53
52
|
} git_pobject;
|
54
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
|
+
|
55
59
|
struct git_packbuilder {
|
56
60
|
git_repository *repo; /* associated repository */
|
57
61
|
git_odb *odb; /* associated object database */
|
58
62
|
|
63
|
+
git_oid_t oid_type;
|
64
|
+
|
59
65
|
git_hash_ctx ctx;
|
60
66
|
git_zstream zstream;
|
61
67
|
|
@@ -68,9 +74,8 @@ struct git_packbuilder {
|
|
68
74
|
|
69
75
|
git_pobject *object_list;
|
70
76
|
|
71
|
-
|
72
|
-
|
73
|
-
git_oidmap *walk_objects;
|
77
|
+
git_packbuilder_pobjectmap object_ix;
|
78
|
+
git_packbuilder_walk_objectmap walk_objects;
|
74
79
|
git_pool object_pool;
|
75
80
|
|
76
81
|
#ifndef GIT_DEPRECATE_HARD
|
@@ -94,9 +99,15 @@ struct git_packbuilder {
|
|
94
99
|
|
95
100
|
git_packbuilder_progress progress_cb;
|
96
101
|
void *progress_cb_payload;
|
97
|
-
|
102
|
+
|
103
|
+
/* the time progress was last reported, in millisecond ticks */
|
104
|
+
uint64_t last_progress_report_time;
|
98
105
|
|
99
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;
|
100
111
|
};
|
101
112
|
|
102
113
|
int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb);
|