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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "httpparser.h"
|
|
9
|
+
|
|
10
|
+
#include <string.h>
|
|
11
|
+
|
|
12
|
+
#if defined(GIT_HTTPPARSER_HTTPPARSER)
|
|
13
|
+
|
|
14
|
+
#include "http_parser.h"
|
|
15
|
+
|
|
16
|
+
static int on_message_begin(http_parser *p)
|
|
17
|
+
{
|
|
18
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
19
|
+
return parser->settings.on_message_begin(parser);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static int on_url(http_parser *p, const char *str, size_t len)
|
|
23
|
+
{
|
|
24
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
25
|
+
return parser->settings.on_url(parser, str, len);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
static int on_header_field(http_parser *p, const char *str, size_t len)
|
|
29
|
+
{
|
|
30
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
31
|
+
return parser->settings.on_header_field(parser, str, len);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static int on_header_value(http_parser *p, const char *str, size_t len)
|
|
35
|
+
{
|
|
36
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
37
|
+
return parser->settings.on_header_value(parser, str, len);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static int on_headers_complete(http_parser *p)
|
|
41
|
+
{
|
|
42
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
43
|
+
return parser->settings.on_headers_complete(parser);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
static int on_body(http_parser *p, const char *buf, size_t len)
|
|
47
|
+
{
|
|
48
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
49
|
+
return parser->settings.on_body(parser, buf, len);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static int on_message_complete(http_parser *p)
|
|
53
|
+
{
|
|
54
|
+
git_http_parser *parser = (git_http_parser *)p;
|
|
55
|
+
return parser->settings.on_message_complete(parser);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void git_http_parser_init(
|
|
59
|
+
git_http_parser *parser,
|
|
60
|
+
git_http_parser_t type,
|
|
61
|
+
git_http_parser_settings *settings)
|
|
62
|
+
{
|
|
63
|
+
http_parser_init(&parser->parser, (enum http_parser_type)type);
|
|
64
|
+
memcpy(&parser->settings, settings, sizeof(git_http_parser_settings));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
size_t git_http_parser_execute(
|
|
68
|
+
git_http_parser *parser,
|
|
69
|
+
const char *data,
|
|
70
|
+
size_t len)
|
|
71
|
+
{
|
|
72
|
+
struct http_parser_settings settings_proxy;
|
|
73
|
+
|
|
74
|
+
memset(&settings_proxy, 0, sizeof(struct http_parser_settings));
|
|
75
|
+
|
|
76
|
+
settings_proxy.on_message_begin = parser->settings.on_message_begin ? on_message_begin : NULL;
|
|
77
|
+
settings_proxy.on_url = parser->settings.on_url ? on_url : NULL;
|
|
78
|
+
settings_proxy.on_header_field = parser->settings.on_header_field ? on_header_field : NULL;
|
|
79
|
+
settings_proxy.on_header_value = parser->settings.on_header_value ? on_header_value : NULL;
|
|
80
|
+
settings_proxy.on_headers_complete = parser->settings.on_headers_complete ? on_headers_complete : NULL;
|
|
81
|
+
settings_proxy.on_body = parser->settings.on_body ? on_body : NULL;
|
|
82
|
+
settings_proxy.on_message_complete = parser->settings.on_message_complete ? on_message_complete : NULL;
|
|
83
|
+
|
|
84
|
+
return http_parser_execute(&parser->parser, &settings_proxy, data, len);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
#elif defined(GIT_HTTPPARSER_LLHTTP) || defined(GIT_HTTPPARSER_BUILTIN)
|
|
88
|
+
|
|
89
|
+
# include <llhttp.h>
|
|
90
|
+
|
|
91
|
+
size_t git_http_parser_execute(
|
|
92
|
+
git_http_parser *parser,
|
|
93
|
+
const char* data,
|
|
94
|
+
size_t len)
|
|
95
|
+
{
|
|
96
|
+
llhttp_errno_t error;
|
|
97
|
+
size_t parsed_len;
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
* Unlike http_parser, which returns the number of parsed
|
|
101
|
+
* bytes in the _execute() call, llhttp returns an error
|
|
102
|
+
* code.
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
if (data == NULL || len == 0)
|
|
106
|
+
error = llhttp_finish(parser);
|
|
107
|
+
else
|
|
108
|
+
error = llhttp_execute(parser, data, len);
|
|
109
|
+
|
|
110
|
+
parsed_len = len;
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Adjust number of parsed bytes in case of error.
|
|
114
|
+
*/
|
|
115
|
+
if (error != HPE_OK) {
|
|
116
|
+
parsed_len = llhttp_get_error_pos(parser) - data;
|
|
117
|
+
|
|
118
|
+
/* This isn't a real pause, just a way to stop parsing early. */
|
|
119
|
+
if (error == HPE_PAUSED_UPGRADE)
|
|
120
|
+
llhttp_resume_after_upgrade(parser);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return parsed_len;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
#else
|
|
127
|
+
# error unknown http-parser
|
|
128
|
+
#endif
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef INCLUDE_transports_httpparser_h__
|
|
9
|
+
#define INCLUDE_transports_httpparser_h__
|
|
10
|
+
|
|
11
|
+
#include "git2_util.h"
|
|
12
|
+
|
|
13
|
+
#if defined(GIT_HTTPPARSER_HTTPPARSER)
|
|
14
|
+
|
|
15
|
+
# include <http_parser.h>
|
|
16
|
+
|
|
17
|
+
typedef enum {
|
|
18
|
+
GIT_HTTP_PARSER_OK = HPE_OK,
|
|
19
|
+
GIT_HTTP_PARSER_PAUSED = HPE_PAUSED,
|
|
20
|
+
} git_http_parser_error_t;
|
|
21
|
+
|
|
22
|
+
typedef enum {
|
|
23
|
+
GIT_HTTP_PARSER_REQUEST = HTTP_REQUEST,
|
|
24
|
+
GIT_HTTP_PARSER_RESPONSE = HTTP_RESPONSE,
|
|
25
|
+
} git_http_parser_t;
|
|
26
|
+
|
|
27
|
+
typedef struct git_http_parser git_http_parser;
|
|
28
|
+
|
|
29
|
+
typedef struct {
|
|
30
|
+
int (*on_message_begin)(git_http_parser *);
|
|
31
|
+
int (*on_url)(git_http_parser *, const char *, size_t);
|
|
32
|
+
int (*on_header_field)(git_http_parser *, const char *, size_t);
|
|
33
|
+
int (*on_header_value)(git_http_parser *, const char *, size_t);
|
|
34
|
+
int (*on_headers_complete)(git_http_parser *);
|
|
35
|
+
int (*on_body)(git_http_parser *, const char *, size_t);
|
|
36
|
+
int (*on_message_complete)(git_http_parser *);
|
|
37
|
+
} git_http_parser_settings;
|
|
38
|
+
|
|
39
|
+
struct git_http_parser {
|
|
40
|
+
http_parser parser;
|
|
41
|
+
git_http_parser_settings settings;
|
|
42
|
+
void *data;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
void git_http_parser_init(
|
|
46
|
+
git_http_parser *parser,
|
|
47
|
+
git_http_parser_t type,
|
|
48
|
+
git_http_parser_settings *settings);
|
|
49
|
+
|
|
50
|
+
size_t git_http_parser_execute(
|
|
51
|
+
git_http_parser *parser,
|
|
52
|
+
const char *data,
|
|
53
|
+
size_t len);
|
|
54
|
+
|
|
55
|
+
# define git_http_parser_status_code(parser) parser->parser.status_code
|
|
56
|
+
# define git_http_parser_keep_alive(parser) http_should_keep_alive(&parser->parser)
|
|
57
|
+
# define git_http_parser_pause(parser) (http_parser_pause(&parser->parser, 1), 0)
|
|
58
|
+
# define git_http_parser_resume(parser) http_parser_pause(&parser->parser, 0)
|
|
59
|
+
# define git_http_parser_remain_after_pause(parser) 1
|
|
60
|
+
# define git_http_parser_errno(parser) parser->parser.http_errno
|
|
61
|
+
# define git_http_parser_errmsg(parser, errno) http_errno_description(errno)
|
|
62
|
+
|
|
63
|
+
#elif defined(GIT_HTTPPARSER_LLHTTP) || defined(GIT_HTTPPARSER_BUILTIN)
|
|
64
|
+
|
|
65
|
+
# include <llhttp.h>
|
|
66
|
+
|
|
67
|
+
typedef enum {
|
|
68
|
+
GIT_HTTP_PARSER_OK = HPE_OK,
|
|
69
|
+
GIT_HTTP_PARSER_PAUSED = HPE_PAUSED,
|
|
70
|
+
} git_http_parser_error_t;
|
|
71
|
+
|
|
72
|
+
typedef enum {
|
|
73
|
+
GIT_HTTP_PARSER_REQUEST = HTTP_REQUEST,
|
|
74
|
+
GIT_HTTP_PARSER_RESPONSE = HTTP_RESPONSE,
|
|
75
|
+
} git_http_parser_t;
|
|
76
|
+
|
|
77
|
+
typedef llhttp_t git_http_parser;
|
|
78
|
+
typedef llhttp_settings_t git_http_parser_settings;
|
|
79
|
+
|
|
80
|
+
# define git_http_parser_init(parser, direction, settings) llhttp_init(parser, (llhttp_type_t)direction, settings)
|
|
81
|
+
|
|
82
|
+
size_t git_http_parser_execute(
|
|
83
|
+
git_http_parser *parser,
|
|
84
|
+
const char *data,
|
|
85
|
+
size_t len);
|
|
86
|
+
|
|
87
|
+
# define git_http_parser_status_code(parser) parser->status_code
|
|
88
|
+
# define git_http_parser_keep_alive(parser) llhttp_should_keep_alive(parser)
|
|
89
|
+
# define git_http_parser_pause(parser) (llhttp_pause(parser), GIT_HTTP_PARSER_PAUSED)
|
|
90
|
+
# define git_http_parser_resume(parser) llhttp_resume(parser)
|
|
91
|
+
# define git_http_parser_remain_after_pause(parser) 0
|
|
92
|
+
# define git_http_parser_errno(parser) parser->error
|
|
93
|
+
# define git_http_parser_errmsg(parser, errno) llhttp_get_error_reason(parser)
|
|
94
|
+
|
|
95
|
+
#else
|
|
96
|
+
# error unknown http-parser
|
|
97
|
+
#endif
|
|
98
|
+
|
|
99
|
+
#endif
|
|
@@ -41,6 +41,9 @@ typedef struct {
|
|
|
41
41
|
git_vector refs;
|
|
42
42
|
unsigned connected : 1,
|
|
43
43
|
have_refs : 1;
|
|
44
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
45
|
+
git_oid_t oid_type;
|
|
46
|
+
#endif
|
|
44
47
|
} transport_local;
|
|
45
48
|
|
|
46
49
|
static void free_head(git_remote_head *head)
|
|
@@ -58,7 +61,7 @@ static void free_heads(git_vector *heads)
|
|
|
58
61
|
git_vector_foreach(heads, i, head)
|
|
59
62
|
free_head(head);
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
git_vector_dispose(heads);
|
|
62
65
|
}
|
|
63
66
|
|
|
64
67
|
static int add_ref(transport_local *t, const char *name)
|
|
@@ -108,10 +111,6 @@ static int add_ref(transport_local *t, const char *name)
|
|
|
108
111
|
return error;
|
|
109
112
|
}
|
|
110
113
|
|
|
111
|
-
/* If it's not a tag, we don't need to try to peel it */
|
|
112
|
-
if (git__prefixcmp(name, GIT_REFS_TAGS_DIR))
|
|
113
|
-
return 0;
|
|
114
|
-
|
|
115
114
|
if ((error = git_object_lookup(&obj, t->repo, &head->oid, GIT_OBJECT_ANY)) < 0)
|
|
116
115
|
return error;
|
|
117
116
|
|
|
@@ -186,7 +185,7 @@ static int store_refs(transport_local *t)
|
|
|
186
185
|
return 0;
|
|
187
186
|
|
|
188
187
|
on_error:
|
|
189
|
-
|
|
188
|
+
git_vector_dispose(&t->refs);
|
|
190
189
|
git_strarray_dispose(&ref_names);
|
|
191
190
|
return -1;
|
|
192
191
|
}
|
|
@@ -235,6 +234,10 @@ static int local_connect(
|
|
|
235
234
|
|
|
236
235
|
t->repo = repo;
|
|
237
236
|
|
|
237
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
238
|
+
t->oid_type = repo->oid_type;
|
|
239
|
+
#endif
|
|
240
|
+
|
|
238
241
|
if (store_refs(t) < 0)
|
|
239
242
|
return -1;
|
|
240
243
|
|
|
@@ -271,7 +274,7 @@ static int local_oid_type(git_oid_t *out, git_transport *transport)
|
|
|
271
274
|
{
|
|
272
275
|
transport_local *t = (transport_local *)transport;
|
|
273
276
|
|
|
274
|
-
*out = t->
|
|
277
|
+
*out = t->oid_type;
|
|
275
278
|
|
|
276
279
|
return 0;
|
|
277
280
|
}
|
|
@@ -303,6 +306,11 @@ static int local_negotiate_fetch(
|
|
|
303
306
|
|
|
304
307
|
GIT_UNUSED(wants);
|
|
305
308
|
|
|
309
|
+
if (wants->depth) {
|
|
310
|
+
git_error_set(GIT_ERROR_NET, "shallow fetch is not supported by the local transport");
|
|
311
|
+
return GIT_ENOTSUPPORTED;
|
|
312
|
+
}
|
|
313
|
+
|
|
306
314
|
/* Fill in the loids */
|
|
307
315
|
git_vector_foreach(&t->refs, i, rhead) {
|
|
308
316
|
git_object *obj;
|
|
@@ -453,7 +461,7 @@ static int local_push(
|
|
|
453
461
|
default:
|
|
454
462
|
last = git_error_last();
|
|
455
463
|
|
|
456
|
-
if (last
|
|
464
|
+
if (last->klass != GIT_ERROR_NONE)
|
|
457
465
|
status->msg = git__strdup(last->message);
|
|
458
466
|
else
|
|
459
467
|
status->msg = git__strdup("Unspecified error encountered");
|
|
@@ -64,13 +64,13 @@ GIT_INLINE(int) git_smart__reset_stream(transport_smart *t, bool close_subtransp
|
|
|
64
64
|
|
|
65
65
|
if (t->wrapped->close(t->wrapped) < 0)
|
|
66
66
|
return -1;
|
|
67
|
-
}
|
|
68
67
|
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
git__free(t->caps.object_format);
|
|
69
|
+
t->caps.object_format = NULL;
|
|
71
70
|
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
git__free(t->caps.agent);
|
|
72
|
+
t->caps.agent = NULL;
|
|
73
|
+
}
|
|
74
74
|
|
|
75
75
|
return 0;
|
|
76
76
|
}
|
|
@@ -124,7 +124,7 @@ static void free_symrefs(git_vector *symrefs)
|
|
|
124
124
|
git__free(spec);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
git_vector_dispose(symrefs);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
static int git_smart__connect(
|
|
@@ -249,6 +249,9 @@ static int git_smart__capabilities(unsigned int *capabilities, git_transport *tr
|
|
|
249
249
|
|
|
250
250
|
*capabilities = 0;
|
|
251
251
|
|
|
252
|
+
if (t->caps.push_options)
|
|
253
|
+
*capabilities |= GIT_REMOTE_CAPABILITY_PUSH_OPTIONS;
|
|
254
|
+
|
|
252
255
|
if (t->caps.want_tip_sha1)
|
|
253
256
|
*capabilities |= GIT_REMOTE_CAPABILITY_TIP_OID;
|
|
254
257
|
|
|
@@ -370,17 +373,27 @@ static int git_smart__close(git_transport *transport)
|
|
|
370
373
|
git_vector *common = &t->common;
|
|
371
374
|
unsigned int i;
|
|
372
375
|
git_pkt *p;
|
|
376
|
+
git_smart_service_t service;
|
|
373
377
|
int ret;
|
|
374
378
|
git_smart_subtransport_stream *stream;
|
|
375
379
|
const char flush[] = "0000";
|
|
376
380
|
|
|
381
|
+
if (t->direction == GIT_DIRECTION_FETCH) {
|
|
382
|
+
service = GIT_SERVICE_UPLOADPACK;
|
|
383
|
+
} else if (t->direction == GIT_DIRECTION_PUSH) {
|
|
384
|
+
service = GIT_SERVICE_RECEIVEPACK;
|
|
385
|
+
} else {
|
|
386
|
+
git_error_set(GIT_ERROR_NET, "invalid direction");
|
|
387
|
+
return -1;
|
|
388
|
+
}
|
|
389
|
+
|
|
377
390
|
/*
|
|
378
391
|
* If we're still connected at this point and not using RPC,
|
|
379
392
|
* we should say goodbye by sending a flush, or git-daemon
|
|
380
393
|
* will complain that we disconnected unexpectedly.
|
|
381
394
|
*/
|
|
382
395
|
if (t->connected && !t->rpc &&
|
|
383
|
-
!t->wrapped->action(&stream, t->wrapped, t->url,
|
|
396
|
+
!t->wrapped->action(&stream, t->wrapped, t->url, service)) {
|
|
384
397
|
t->current_stream->write(t->current_stream, flush, 4);
|
|
385
398
|
}
|
|
386
399
|
|
|
@@ -389,7 +402,7 @@ static int git_smart__close(git_transport *transport)
|
|
|
389
402
|
git_vector_foreach(common, i, p)
|
|
390
403
|
git_pkt_free(p);
|
|
391
404
|
|
|
392
|
-
|
|
405
|
+
git_vector_dispose(common);
|
|
393
406
|
|
|
394
407
|
if (t->url) {
|
|
395
408
|
git__free(t->url);
|
|
@@ -414,11 +427,11 @@ static void git_smart__free(git_transport *transport)
|
|
|
414
427
|
/* Free the subtransport */
|
|
415
428
|
t->wrapped->free(t->wrapped);
|
|
416
429
|
|
|
417
|
-
|
|
430
|
+
git_vector_dispose(&t->heads);
|
|
418
431
|
git_vector_foreach(refs, i, p)
|
|
419
432
|
git_pkt_free(p);
|
|
420
433
|
|
|
421
|
-
|
|
434
|
+
git_vector_dispose(refs);
|
|
422
435
|
|
|
423
436
|
git_remote_connect_options_dispose(&t->connect_opts);
|
|
424
437
|
|
|
@@ -511,9 +524,8 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
|
|
|
511
524
|
if (git_vector_init(&t->refs, 16, ref_name_cmp) < 0 ||
|
|
512
525
|
git_vector_init(&t->heads, 16, ref_name_cmp) < 0 ||
|
|
513
526
|
definition->callback(&t->wrapped, &t->parent, definition->param) < 0) {
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
t->wrapped->free(t->wrapped);
|
|
527
|
+
git_vector_dispose(&t->refs);
|
|
528
|
+
git_vector_dispose(&t->heads);
|
|
517
529
|
git__free(t);
|
|
518
530
|
return -1;
|
|
519
531
|
}
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
#define GIT_CAP_SHALLOW "shallow"
|
|
39
39
|
#define GIT_CAP_OBJECT_FORMAT "object-format="
|
|
40
40
|
#define GIT_CAP_AGENT "agent="
|
|
41
|
+
#define GIT_CAP_PUSH_OPTIONS "push-options"
|
|
41
42
|
|
|
42
43
|
extern bool git_smart__ofs_delta_enabled;
|
|
43
44
|
|
|
@@ -146,7 +147,8 @@ typedef struct transport_smart_caps {
|
|
|
146
147
|
thin_pack:1,
|
|
147
148
|
want_tip_sha1:1,
|
|
148
149
|
want_reachable_sha1:1,
|
|
149
|
-
shallow:1
|
|
150
|
+
shallow:1,
|
|
151
|
+
push_options:1;
|
|
150
152
|
char *object_format;
|
|
151
153
|
char *agent;
|
|
152
154
|
} transport_smart_caps;
|
|
@@ -203,7 +205,7 @@ int git_smart__update_heads(transport_smart *t, git_vector *symrefs);
|
|
|
203
205
|
/* smart_pkt.c */
|
|
204
206
|
typedef struct {
|
|
205
207
|
git_oid_t oid_type;
|
|
206
|
-
int seen_capabilities: 1;
|
|
208
|
+
unsigned int seen_capabilities: 1;
|
|
207
209
|
} git_pkt_parse_data;
|
|
208
210
|
|
|
209
211
|
int git_pkt_parse_line(git_pkt **head, const char **endptr, const char *line, size_t linelen, git_pkt_parse_data *data);
|
|
@@ -238,13 +238,13 @@ static int set_data(
|
|
|
238
238
|
|
|
239
239
|
if (strncmp(caps, "object-format=", CONST_STRLEN("object-format=")) == 0)
|
|
240
240
|
format_str = caps + CONST_STRLEN("object-format=");
|
|
241
|
-
else if ((format_str =
|
|
241
|
+
else if ((format_str = git__memmem(caps, len - (caps - line), " object-format=", CONST_STRLEN(" object-format="))) != NULL)
|
|
242
242
|
format_str += CONST_STRLEN(" object-format=");
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
if (format_str) {
|
|
246
|
-
if ((eos =
|
|
247
|
-
eos =
|
|
246
|
+
if ((eos = memchr(format_str, ' ', len - (format_str - line))) == NULL)
|
|
247
|
+
eos = memchr(format_str, '\0', len - (format_str - line));
|
|
248
248
|
|
|
249
249
|
GIT_ASSERT(eos);
|
|
250
250
|
|
|
@@ -536,10 +536,10 @@ static int parse_len(size_t *out, const char *line, size_t linelen)
|
|
|
536
536
|
num[PKT_LEN_SIZE] = '\0';
|
|
537
537
|
|
|
538
538
|
for (i = 0; i < PKT_LEN_SIZE; ++i) {
|
|
539
|
-
if (!
|
|
539
|
+
if (!git__isxdigit(num[i])) {
|
|
540
540
|
/* Make sure there are no special characters before passing to error message */
|
|
541
541
|
for (k = 0; k < PKT_LEN_SIZE; ++k) {
|
|
542
|
-
if(!
|
|
542
|
+
if(!git__isprint(num[k])) {
|
|
543
543
|
num[k] = '.';
|
|
544
544
|
}
|
|
545
545
|
}
|
|
@@ -59,7 +59,7 @@ int git_smart__store_refs(transport_smart *t, int flushes)
|
|
|
59
59
|
return recvd;
|
|
60
60
|
|
|
61
61
|
if (recvd == 0) {
|
|
62
|
-
git_error_set(GIT_ERROR_NET, "
|
|
62
|
+
git_error_set(GIT_ERROR_NET, "could not read refs from remote repository");
|
|
63
63
|
return GIT_EEOF;
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -194,6 +194,12 @@ int git_smart__detect_caps(
|
|
|
194
194
|
continue;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
+
if (!git__prefixcmp(ptr, GIT_CAP_PUSH_OPTIONS)) {
|
|
198
|
+
caps->common = caps->push_options = 1;
|
|
199
|
+
ptr += strlen(GIT_CAP_PUSH_OPTIONS);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
|
|
197
203
|
if (!git__prefixcmp(ptr, GIT_CAP_THIN_PACK)) {
|
|
198
204
|
caps->common = caps->thin_pack = 1;
|
|
199
205
|
ptr += strlen(GIT_CAP_THIN_PACK);
|
|
@@ -285,7 +291,7 @@ static int recv_pkt(
|
|
|
285
291
|
if ((ret = git_smart__recv(t)) < 0) {
|
|
286
292
|
return ret;
|
|
287
293
|
} else if (ret == 0) {
|
|
288
|
-
git_error_set(GIT_ERROR_NET, "
|
|
294
|
+
git_error_set(GIT_ERROR_NET, "could not read from remote repository");
|
|
289
295
|
return GIT_EEOF;
|
|
290
296
|
}
|
|
291
297
|
} while (error);
|
|
@@ -311,6 +317,13 @@ static int store_common(transport_smart *t)
|
|
|
311
317
|
if ((error = recv_pkt(&pkt, NULL, t)) < 0)
|
|
312
318
|
return error;
|
|
313
319
|
|
|
320
|
+
if (t->rpc && (pkt->type == GIT_PKT_SHALLOW ||
|
|
321
|
+
pkt->type == GIT_PKT_UNSHALLOW ||
|
|
322
|
+
pkt->type == GIT_PKT_FLUSH)) {
|
|
323
|
+
git__free(pkt);
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
|
|
314
327
|
if (pkt->type != GIT_PKT_ACK) {
|
|
315
328
|
git__free(pkt);
|
|
316
329
|
return 0;
|
|
@@ -388,6 +401,7 @@ static int setup_shallow_roots(
|
|
|
388
401
|
|
|
389
402
|
memcpy(out->ptr, wants->shallow_roots,
|
|
390
403
|
sizeof(git_oid) * wants->shallow_roots_len);
|
|
404
|
+
out->size = wants->shallow_roots_len;
|
|
391
405
|
}
|
|
392
406
|
|
|
393
407
|
return 0;
|
|
@@ -427,6 +441,9 @@ int git_smart__negotiate_fetch(
|
|
|
427
441
|
if ((error = git_smart__negotiation_step(&t->parent, data.ptr, data.size)) < 0)
|
|
428
442
|
goto on_error;
|
|
429
443
|
|
|
444
|
+
if (!t->rpc)
|
|
445
|
+
git_str_clear(&data);
|
|
446
|
+
|
|
430
447
|
while ((error = recv_pkt((git_pkt **)&pkt, NULL, t)) == 0) {
|
|
431
448
|
bool complete = false;
|
|
432
449
|
|
|
@@ -778,33 +795,54 @@ done:
|
|
|
778
795
|
static int gen_pktline(git_str *buf, git_push *push)
|
|
779
796
|
{
|
|
780
797
|
push_spec *spec;
|
|
798
|
+
char *option;
|
|
781
799
|
size_t i, len;
|
|
782
|
-
char old_id[
|
|
783
|
-
|
|
784
|
-
old_id[GIT_OID_SHA1_HEXSIZE] = '\0'; new_id[GIT_OID_SHA1_HEXSIZE] = '\0';
|
|
800
|
+
char old_id[GIT_OID_MAX_HEXSIZE + 1], new_id[GIT_OID_MAX_HEXSIZE + 1];
|
|
801
|
+
size_t old_id_len, new_id_len;
|
|
785
802
|
|
|
786
803
|
git_vector_foreach(&push->specs, i, spec) {
|
|
787
|
-
len =
|
|
804
|
+
len = strlen(spec->refspec.dst) + 7;
|
|
788
805
|
|
|
789
806
|
if (i == 0) {
|
|
790
|
-
|
|
807
|
+
/* Need a leading \0 */
|
|
808
|
+
++len;
|
|
809
|
+
|
|
791
810
|
if (push->report_status)
|
|
792
811
|
len += strlen(GIT_CAP_REPORT_STATUS) + 1;
|
|
812
|
+
|
|
813
|
+
if (git_vector_length(&push->remote_push_options) > 0)
|
|
814
|
+
len += strlen(GIT_CAP_PUSH_OPTIONS) + 1;
|
|
815
|
+
|
|
793
816
|
len += strlen(GIT_CAP_SIDE_BAND_64K) + 1;
|
|
794
817
|
}
|
|
795
818
|
|
|
819
|
+
old_id_len = git_oid_hexsize(git_oid_type(&spec->roid));
|
|
820
|
+
new_id_len = git_oid_hexsize(git_oid_type(&spec->loid));
|
|
821
|
+
|
|
822
|
+
len += (old_id_len + new_id_len);
|
|
823
|
+
|
|
796
824
|
git_oid_fmt(old_id, &spec->roid);
|
|
825
|
+
old_id[old_id_len] = '\0';
|
|
826
|
+
|
|
797
827
|
git_oid_fmt(new_id, &spec->loid);
|
|
828
|
+
new_id[new_id_len] = '\0';
|
|
798
829
|
|
|
799
|
-
git_str_printf(buf, "%04"PRIxZ"
|
|
830
|
+
git_str_printf(buf, "%04"PRIxZ"%.*s %.*s %s", len,
|
|
831
|
+
(int)old_id_len, old_id, (int)new_id_len, new_id,
|
|
832
|
+
spec->refspec.dst);
|
|
800
833
|
|
|
801
834
|
if (i == 0) {
|
|
802
835
|
git_str_putc(buf, '\0');
|
|
836
|
+
|
|
803
837
|
/* Core git always starts their capabilities string with a space */
|
|
804
838
|
if (push->report_status) {
|
|
805
839
|
git_str_putc(buf, ' ');
|
|
806
840
|
git_str_printf(buf, GIT_CAP_REPORT_STATUS);
|
|
807
841
|
}
|
|
842
|
+
if (git_vector_length(&push->remote_push_options) > 0) {
|
|
843
|
+
git_str_putc(buf, ' ');
|
|
844
|
+
git_str_printf(buf, GIT_CAP_PUSH_OPTIONS);
|
|
845
|
+
}
|
|
808
846
|
git_str_putc(buf, ' ');
|
|
809
847
|
git_str_printf(buf, GIT_CAP_SIDE_BAND_64K);
|
|
810
848
|
}
|
|
@@ -812,6 +850,13 @@ static int gen_pktline(git_str *buf, git_push *push)
|
|
|
812
850
|
git_str_putc(buf, '\n');
|
|
813
851
|
}
|
|
814
852
|
|
|
853
|
+
if (git_vector_length(&push->remote_push_options) > 0) {
|
|
854
|
+
git_str_printf(buf, "0000");
|
|
855
|
+
git_vector_foreach(&push->remote_push_options, i, option) {
|
|
856
|
+
git_str_printf(buf, "%04"PRIxZ"%s", strlen(option) + 4 , option);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
|
|
815
860
|
git_str_puts(buf, "0000");
|
|
816
861
|
return git_str_oom(buf) ? -1 : 0;
|
|
817
862
|
}
|
|
@@ -940,7 +985,7 @@ static int parse_report(transport_smart *transport, git_push *push)
|
|
|
940
985
|
}
|
|
941
986
|
|
|
942
987
|
if (recvd == 0) {
|
|
943
|
-
git_error_set(GIT_ERROR_NET, "
|
|
988
|
+
git_error_set(GIT_ERROR_NET, "could not read report from remote repository");
|
|
944
989
|
error = GIT_EEOF;
|
|
945
990
|
goto done;
|
|
946
991
|
}
|
|
@@ -1157,7 +1202,7 @@ int git_smart__push(git_transport *transport, git_push *push)
|
|
|
1157
1202
|
#ifdef PUSH_DEBUG
|
|
1158
1203
|
{
|
|
1159
1204
|
git_remote_head *head;
|
|
1160
|
-
char hex[
|
|
1205
|
+
char hex[GIT_OID_MAX_HEXSIZE+1], hex[GIT_OID_MAX_HEXSIZE] = '\0';
|
|
1161
1206
|
|
|
1162
1207
|
git_vector_foreach(&push->remote->refs, i, head) {
|
|
1163
1208
|
git_oid_fmt(hex, &head->oid);
|