rugged 1.3.2.3 → 1.4.2
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 +1 -1
- data/ext/rugged/rugged_config.c +7 -2
- data/ext/rugged/rugged_remote.c +17 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +103 -276
- data/vendor/libgit2/COPYING +36 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +13 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +39 -49
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +31 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +1 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +0 -7
- data/vendor/libgit2/deps/zlib/crc32.c +288 -975
- data/vendor/libgit2/deps/zlib/crc32.h +436 -9441
- data/vendor/libgit2/deps/zlib/deflate.c +31 -83
- data/vendor/libgit2/deps/zlib/deflate.h +15 -12
- data/vendor/libgit2/deps/zlib/gzguts.h +2 -3
- data/vendor/libgit2/deps/zlib/infback.c +1 -2
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +8 -39
- data/vendor/libgit2/deps/zlib/inflate.h +2 -3
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +48 -27
- data/vendor/libgit2/deps/zlib/zlib.h +100 -126
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +9 -12
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +2 -0
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +5 -12
- data/vendor/libgit2/include/git2/config.h +19 -3
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +1 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +17 -9
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +1 -2
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +19 -0
- data/vendor/libgit2/include/git2/merge.h +23 -3
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +23 -0
- data/vendor/libgit2/include/git2/odb.h +37 -7
- data/vendor/libgit2/include/git2/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +14 -9
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +3 -3
- data/vendor/libgit2/include/git2/status.h +9 -3
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +2 -5
- data/vendor/libgit2/include/git2/sys/remote.h +31 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +25 -34
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/src/CMakeLists.txt +189 -315
- data/vendor/libgit2/src/annotated_commit.h +1 -1
- data/vendor/libgit2/src/apply.c +18 -18
- data/vendor/libgit2/src/apply.h +2 -2
- data/vendor/libgit2/src/attr.c +18 -18
- data/vendor/libgit2/src/attr_file.c +17 -17
- data/vendor/libgit2/src/attr_file.h +4 -4
- data/vendor/libgit2/src/attrcache.c +17 -12
- data/vendor/libgit2/src/blame_git.c +1 -1
- data/vendor/libgit2/src/blob.c +33 -26
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +150 -109
- data/vendor/libgit2/src/branch.h +15 -3
- data/vendor/libgit2/src/buf.c +126 -0
- data/vendor/libgit2/src/buf.h +50 -0
- data/vendor/libgit2/src/cc-compat.h +1 -1
- data/vendor/libgit2/src/checkout.c +74 -68
- data/vendor/libgit2/src/cherrypick.c +10 -10
- data/vendor/libgit2/src/clone.c +66 -66
- data/vendor/libgit2/src/commit.c +128 -58
- data/vendor/libgit2/src/commit.h +24 -1
- data/vendor/libgit2/src/commit_graph.c +68 -53
- data/vendor/libgit2/src/commit_graph.h +10 -3
- data/vendor/libgit2/src/commit_list.c +2 -3
- data/vendor/libgit2/src/common.h +10 -3
- data/vendor/libgit2/src/config.c +99 -77
- data/vendor/libgit2/src/config.h +15 -2
- data/vendor/libgit2/src/config_file.c +103 -91
- data/vendor/libgit2/src/config_mem.c +9 -9
- data/vendor/libgit2/src/config_parse.c +27 -23
- data/vendor/libgit2/src/crlf.c +24 -21
- data/vendor/libgit2/src/date.c +10 -17
- data/vendor/libgit2/src/date.h +33 -0
- data/vendor/libgit2/src/describe.c +27 -19
- data/vendor/libgit2/src/diff.c +25 -8
- data/vendor/libgit2/src/diff.h +2 -4
- data/vendor/libgit2/src/diff_driver.c +34 -36
- data/vendor/libgit2/src/diff_driver.h +3 -3
- data/vendor/libgit2/src/diff_file.c +29 -20
- data/vendor/libgit2/src/diff_generate.c +30 -6
- data/vendor/libgit2/src/diff_generate.h +5 -3
- data/vendor/libgit2/src/diff_print.c +102 -95
- data/vendor/libgit2/src/diff_stats.c +40 -29
- data/vendor/libgit2/src/{message.h → diff_stats.h} +7 -6
- data/vendor/libgit2/src/diff_tform.c +9 -8
- data/vendor/libgit2/src/diff_xdiff.c +3 -8
- data/vendor/libgit2/src/email.c +54 -38
- data/vendor/libgit2/src/email.h +1 -1
- data/vendor/libgit2/src/errors.c +18 -18
- data/vendor/libgit2/src/features.h.in +6 -1
- data/vendor/libgit2/src/fetch.c +69 -24
- data/vendor/libgit2/src/fetch.h +1 -1
- data/vendor/libgit2/src/fetchhead.c +19 -19
- data/vendor/libgit2/src/filebuf.c +28 -28
- data/vendor/libgit2/src/filebuf.h +1 -1
- data/vendor/libgit2/src/filter.c +96 -52
- data/vendor/libgit2/src/filter.h +26 -5
- data/vendor/libgit2/src/fs_path.c +1912 -0
- data/vendor/libgit2/src/fs_path.h +752 -0
- data/vendor/libgit2/src/futils.c +91 -85
- data/vendor/libgit2/src/futils.h +26 -14
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +2 -2
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +2 -2
- data/vendor/libgit2/src/hash/sha1/generic.c +2 -2
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +2 -2
- data/vendor/libgit2/src/hash/sha1/openssl.c +2 -2
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/hash/sha1/win32.c +6 -6
- data/vendor/libgit2/src/hash/sha1.h +3 -1
- data/vendor/libgit2/src/hash.c +67 -35
- data/vendor/libgit2/src/hash.h +12 -12
- data/vendor/libgit2/src/ident.c +18 -18
- data/vendor/libgit2/src/ignore.c +35 -34
- data/vendor/libgit2/src/ignore.h +2 -2
- data/vendor/libgit2/src/index.c +79 -80
- data/vendor/libgit2/src/index.h +6 -3
- data/vendor/libgit2/src/indexer.c +75 -57
- data/vendor/libgit2/src/iterator.c +64 -56
- data/vendor/libgit2/src/iterator.h +5 -5
- data/vendor/libgit2/src/khash.h +1 -1
- data/vendor/libgit2/src/libgit2.c +22 -19
- data/vendor/libgit2/src/mailmap.c +38 -36
- data/vendor/libgit2/src/merge.c +27 -27
- data/vendor/libgit2/src/merge.h +1 -14
- data/vendor/libgit2/src/merge_driver.c +2 -2
- data/vendor/libgit2/src/merge_file.c +13 -3
- data/vendor/libgit2/src/message.c +21 -10
- data/vendor/libgit2/src/midx.c +83 -66
- data/vendor/libgit2/src/midx.h +3 -3
- data/vendor/libgit2/src/mwindow.c +1 -1
- data/vendor/libgit2/src/net.c +278 -68
- data/vendor/libgit2/src/net.h +10 -3
- data/vendor/libgit2/src/netops.c +1 -1
- data/vendor/libgit2/src/netops.h +1 -1
- data/vendor/libgit2/src/notes.c +20 -29
- data/vendor/libgit2/src/object.c +49 -9
- data/vendor/libgit2/src/object.h +1 -1
- data/vendor/libgit2/src/odb.c +35 -32
- data/vendor/libgit2/src/odb.h +1 -1
- data/vendor/libgit2/src/odb_loose.c +68 -68
- data/vendor/libgit2/src/odb_mempack.c +18 -5
- data/vendor/libgit2/src/odb_pack.c +43 -43
- data/vendor/libgit2/src/oid.c +11 -4
- data/vendor/libgit2/src/oid.h +15 -0
- data/vendor/libgit2/src/pack-objects.c +41 -26
- data/vendor/libgit2/src/pack-objects.h +11 -6
- data/vendor/libgit2/src/pack.c +10 -10
- data/vendor/libgit2/src/patch.c +3 -3
- data/vendor/libgit2/src/patch.h +1 -0
- data/vendor/libgit2/src/patch_generate.c +27 -11
- data/vendor/libgit2/src/patch_generate.h +5 -5
- data/vendor/libgit2/src/patch_parse.c +24 -24
- data/vendor/libgit2/src/path.c +76 -1951
- data/vendor/libgit2/src/path.h +34 -741
- data/vendor/libgit2/src/pathspec.c +6 -6
- data/vendor/libgit2/src/pathspec.h +2 -2
- data/vendor/libgit2/src/posix.c +3 -3
- data/vendor/libgit2/src/posix.h +1 -0
- data/vendor/libgit2/src/pqueue.h +1 -1
- data/vendor/libgit2/src/proxy.c +4 -1
- data/vendor/libgit2/src/proxy.h +1 -1
- data/vendor/libgit2/src/push.c +30 -35
- data/vendor/libgit2/src/push.h +4 -16
- data/vendor/libgit2/src/rand.c +226 -0
- data/vendor/libgit2/src/rand.h +37 -0
- data/vendor/libgit2/src/reader.c +8 -8
- data/vendor/libgit2/src/reader.h +2 -2
- data/vendor/libgit2/src/rebase.c +89 -88
- data/vendor/libgit2/src/refdb_fs.c +447 -173
- data/vendor/libgit2/src/refs.c +32 -32
- data/vendor/libgit2/src/refs.h +2 -2
- data/vendor/libgit2/src/refspec.c +32 -37
- data/vendor/libgit2/src/refspec.h +5 -2
- data/vendor/libgit2/src/regexp.c +1 -1
- data/vendor/libgit2/src/remote.c +713 -419
- data/vendor/libgit2/src/remote.h +15 -10
- data/vendor/libgit2/src/repository.c +350 -467
- data/vendor/libgit2/src/repository.h +11 -10
- data/vendor/libgit2/src/reset.c +8 -5
- data/vendor/libgit2/src/revert.c +10 -10
- data/vendor/libgit2/src/revparse.c +48 -35
- data/vendor/libgit2/src/revwalk.c +7 -7
- data/vendor/libgit2/src/signature.c +12 -6
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/sortedcache.c +1 -1
- data/vendor/libgit2/src/sortedcache.h +1 -1
- data/vendor/libgit2/src/stash.c +36 -37
- data/vendor/libgit2/src/status.c +4 -1
- data/vendor/libgit2/src/{buffer.c → str.c} +157 -151
- data/vendor/libgit2/src/str.h +357 -0
- data/vendor/libgit2/src/streams/mbedtls.c +8 -6
- data/vendor/libgit2/src/streams/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/submodule.c +171 -159
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/sysdir.c +68 -52
- data/vendor/libgit2/src/sysdir.h +15 -10
- data/vendor/libgit2/src/tag.c +29 -27
- data/vendor/libgit2/src/thread.h +3 -3
- data/vendor/libgit2/src/threadstate.c +3 -3
- data/vendor/libgit2/src/threadstate.h +1 -1
- data/vendor/libgit2/src/trace.c +1 -14
- data/vendor/libgit2/src/trace.h +5 -22
- data/vendor/libgit2/src/trailer.c +1 -1
- data/vendor/libgit2/src/transaction.c +1 -1
- data/vendor/libgit2/src/transport.c +10 -10
- data/vendor/libgit2/src/transports/auth.c +7 -9
- data/vendor/libgit2/src/transports/auth.h +2 -3
- data/vendor/libgit2/src/transports/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/transports/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/transports/git.c +9 -11
- data/vendor/libgit2/src/transports/http.c +37 -17
- data/vendor/libgit2/src/transports/http.h +2 -3
- data/vendor/libgit2/src/transports/httpclient.c +65 -65
- data/vendor/libgit2/src/transports/local.c +124 -116
- data/vendor/libgit2/src/transports/smart.c +51 -139
- data/vendor/libgit2/src/transports/smart.h +25 -31
- data/vendor/libgit2/src/transports/smart_pkt.c +33 -33
- data/vendor/libgit2/src/transports/smart_protocol.c +57 -39
- data/vendor/libgit2/src/transports/ssh.c +47 -112
- data/vendor/libgit2/src/transports/winhttp.c +50 -56
- data/vendor/libgit2/src/tree-cache.c +5 -5
- data/vendor/libgit2/src/tree-cache.h +2 -2
- data/vendor/libgit2/src/tree.c +59 -48
- data/vendor/libgit2/src/tree.h +1 -1
- data/vendor/libgit2/src/unix/map.c +0 -2
- data/vendor/libgit2/src/unix/posix.h +1 -4
- data/vendor/libgit2/src/unix/realpath.c +0 -2
- data/vendor/libgit2/src/util.c +14 -14
- data/vendor/libgit2/src/util.h +2 -28
- data/vendor/libgit2/src/vector.h +1 -1
- data/vendor/libgit2/src/win32/findfile.c +172 -116
- data/vendor/libgit2/src/win32/findfile.h +7 -4
- data/vendor/libgit2/src/win32/path_w32.c +140 -9
- data/vendor/libgit2/src/win32/path_w32.h +2 -0
- data/vendor/libgit2/src/win32/posix.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +11 -27
- data/vendor/libgit2/src/win32/w32_buffer.c +2 -3
- data/vendor/libgit2/src/win32/w32_buffer.h +2 -3
- data/vendor/libgit2/src/win32/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/worktree.c +116 -94
- data/vendor/libgit2/src/worktree.h +1 -1
- data/vendor/libgit2/src/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/xdiff/xdiff.h +15 -15
- data/vendor/libgit2/src/xdiff/xdiffi.c +134 -108
- data/vendor/libgit2/src/xdiff/xemit.c +23 -7
- data/vendor/libgit2/src/xdiff/xhistogram.c +87 -78
- data/vendor/libgit2/src/xdiff/xinclude.h +1 -12
- data/vendor/libgit2/src/xdiff/xmerge.c +104 -117
- data/vendor/libgit2/src/xdiff/xpatience.c +6 -17
- data/vendor/libgit2/src/xdiff/xprepare.c +15 -20
- data/vendor/libgit2/src/xdiff/xutils.c +18 -7
- data/vendor/libgit2/src/zstream.c +5 -5
- data/vendor/libgit2/src/zstream.h +4 -4
- metadata +25 -10
- data/vendor/libgit2/src/buffer.h +0 -374
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#include "smart.h"
|
|
9
9
|
|
|
10
10
|
#include "git2.h"
|
|
11
|
+
#include "git2/sys/remote.h"
|
|
11
12
|
#include "refs.h"
|
|
12
13
|
#include "refspec.h"
|
|
13
14
|
#include "proxy.h"
|
|
@@ -56,101 +57,6 @@ GIT_INLINE(int) git_smart__reset_stream(transport_smart *t, bool close_subtransp
|
|
|
56
57
|
return 0;
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
static int git_smart__set_callbacks(
|
|
60
|
-
git_transport *transport,
|
|
61
|
-
git_transport_message_cb progress_cb,
|
|
62
|
-
git_transport_message_cb error_cb,
|
|
63
|
-
git_transport_certificate_check_cb certificate_check_cb,
|
|
64
|
-
void *message_cb_payload)
|
|
65
|
-
{
|
|
66
|
-
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
67
|
-
|
|
68
|
-
t->progress_cb = progress_cb;
|
|
69
|
-
t->error_cb = error_cb;
|
|
70
|
-
t->certificate_check_cb = certificate_check_cb;
|
|
71
|
-
t->message_cb_payload = message_cb_payload;
|
|
72
|
-
|
|
73
|
-
return 0;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
static size_t http_header_name_length(const char *http_header)
|
|
77
|
-
{
|
|
78
|
-
const char *colon = strchr(http_header, ':');
|
|
79
|
-
if (!colon)
|
|
80
|
-
return 0;
|
|
81
|
-
return colon - http_header;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
static bool is_malformed_http_header(const char *http_header)
|
|
85
|
-
{
|
|
86
|
-
const char *c;
|
|
87
|
-
size_t name_len;
|
|
88
|
-
|
|
89
|
-
/* Disallow \r and \n */
|
|
90
|
-
c = strchr(http_header, '\r');
|
|
91
|
-
if (c)
|
|
92
|
-
return true;
|
|
93
|
-
c = strchr(http_header, '\n');
|
|
94
|
-
if (c)
|
|
95
|
-
return true;
|
|
96
|
-
|
|
97
|
-
/* Require a header name followed by : */
|
|
98
|
-
name_len = http_header_name_length(http_header);
|
|
99
|
-
if (name_len < 1)
|
|
100
|
-
return true;
|
|
101
|
-
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
static char *forbidden_custom_headers[] = {
|
|
106
|
-
"User-Agent",
|
|
107
|
-
"Host",
|
|
108
|
-
"Accept",
|
|
109
|
-
"Content-Type",
|
|
110
|
-
"Transfer-Encoding",
|
|
111
|
-
"Content-Length",
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
static bool is_forbidden_custom_header(const char *custom_header)
|
|
115
|
-
{
|
|
116
|
-
unsigned long i;
|
|
117
|
-
size_t name_len = http_header_name_length(custom_header);
|
|
118
|
-
|
|
119
|
-
/* Disallow headers that we set */
|
|
120
|
-
for (i = 0; i < ARRAY_SIZE(forbidden_custom_headers); i++)
|
|
121
|
-
if (strncmp(forbidden_custom_headers[i], custom_header, name_len) == 0)
|
|
122
|
-
return true;
|
|
123
|
-
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
static int git_smart__set_custom_headers(
|
|
128
|
-
git_transport *transport,
|
|
129
|
-
const git_strarray *custom_headers)
|
|
130
|
-
{
|
|
131
|
-
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
132
|
-
size_t i;
|
|
133
|
-
|
|
134
|
-
if (t->custom_headers.count)
|
|
135
|
-
git_strarray_dispose(&t->custom_headers);
|
|
136
|
-
|
|
137
|
-
if (!custom_headers)
|
|
138
|
-
return 0;
|
|
139
|
-
|
|
140
|
-
for (i = 0; i < custom_headers->count; i++) {
|
|
141
|
-
if (is_malformed_http_header(custom_headers->strings[i])) {
|
|
142
|
-
git_error_set(GIT_ERROR_INVALID, "custom HTTP header '%s' is malformed", custom_headers->strings[i]);
|
|
143
|
-
return -1;
|
|
144
|
-
}
|
|
145
|
-
if (is_forbidden_custom_header(custom_headers->strings[i])) {
|
|
146
|
-
git_error_set(GIT_ERROR_INVALID, "custom HTTP header '%s' is already set by libgit2", custom_headers->strings[i]);
|
|
147
|
-
return -1;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return git_strarray_copy(&t->custom_headers, custom_headers);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
60
|
int git_smart__update_heads(transport_smart *t, git_vector *symrefs)
|
|
155
61
|
{
|
|
156
62
|
size_t i;
|
|
@@ -164,20 +70,20 @@ int git_smart__update_heads(transport_smart *t, git_vector *symrefs)
|
|
|
164
70
|
|
|
165
71
|
if (symrefs) {
|
|
166
72
|
git_refspec *spec;
|
|
167
|
-
|
|
73
|
+
git_str buf = GIT_STR_INIT;
|
|
168
74
|
size_t j;
|
|
169
75
|
int error = 0;
|
|
170
76
|
|
|
171
77
|
git_vector_foreach(symrefs, j, spec) {
|
|
172
|
-
|
|
78
|
+
git_str_clear(&buf);
|
|
173
79
|
if (git_refspec_src_matches(spec, ref->head.name) &&
|
|
174
|
-
!(error =
|
|
80
|
+
!(error = git_refspec__transform(&buf, spec, ref->head.name))) {
|
|
175
81
|
git__free(ref->head.symref_target);
|
|
176
|
-
ref->head.symref_target =
|
|
82
|
+
ref->head.symref_target = git_str_detach(&buf);
|
|
177
83
|
}
|
|
178
84
|
}
|
|
179
85
|
|
|
180
|
-
|
|
86
|
+
git_str_dispose(&buf);
|
|
181
87
|
|
|
182
88
|
if (error < 0)
|
|
183
89
|
return error;
|
|
@@ -206,11 +112,8 @@ static void free_symrefs(git_vector *symrefs)
|
|
|
206
112
|
static int git_smart__connect(
|
|
207
113
|
git_transport *transport,
|
|
208
114
|
const char *url,
|
|
209
|
-
git_credential_acquire_cb cred_acquire_cb,
|
|
210
|
-
void *cred_acquire_payload,
|
|
211
|
-
const git_proxy_options *proxy,
|
|
212
115
|
int direction,
|
|
213
|
-
|
|
116
|
+
const git_remote_connect_options *connect_opts)
|
|
214
117
|
{
|
|
215
118
|
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
216
119
|
git_smart_subtransport_stream *stream;
|
|
@@ -223,24 +126,19 @@ static int git_smart__connect(
|
|
|
223
126
|
if (git_smart__reset_stream(t, true) < 0)
|
|
224
127
|
return -1;
|
|
225
128
|
|
|
129
|
+
if (git_remote_connect_options_normalize(&t->connect_opts, t->owner->repo, connect_opts) < 0)
|
|
130
|
+
return -1;
|
|
131
|
+
|
|
226
132
|
t->url = git__strdup(url);
|
|
227
133
|
GIT_ERROR_CHECK_ALLOC(t->url);
|
|
228
134
|
|
|
229
|
-
git_proxy_options_clear(&t->proxy);
|
|
230
|
-
|
|
231
|
-
if (git_proxy_options_dup(&t->proxy, proxy) < 0)
|
|
232
|
-
return -1;
|
|
233
|
-
|
|
234
135
|
t->direction = direction;
|
|
235
|
-
t->flags = flags;
|
|
236
|
-
t->cred_acquire_cb = cred_acquire_cb;
|
|
237
|
-
t->cred_acquire_payload = cred_acquire_payload;
|
|
238
136
|
|
|
239
|
-
if (GIT_DIRECTION_FETCH == t->direction)
|
|
137
|
+
if (GIT_DIRECTION_FETCH == t->direction) {
|
|
240
138
|
service = GIT_SERVICE_UPLOADPACK_LS;
|
|
241
|
-
else if (GIT_DIRECTION_PUSH == t->direction)
|
|
139
|
+
} else if (GIT_DIRECTION_PUSH == t->direction) {
|
|
242
140
|
service = GIT_SERVICE_RECEIVEPACK_LS;
|
|
243
|
-
else {
|
|
141
|
+
} else {
|
|
244
142
|
git_error_set(GIT_ERROR_NET, "invalid direction");
|
|
245
143
|
return -1;
|
|
246
144
|
}
|
|
@@ -315,6 +213,35 @@ cleanup:
|
|
|
315
213
|
return error;
|
|
316
214
|
}
|
|
317
215
|
|
|
216
|
+
static int git_smart__set_connect_opts(
|
|
217
|
+
git_transport *transport,
|
|
218
|
+
const git_remote_connect_options *opts)
|
|
219
|
+
{
|
|
220
|
+
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
221
|
+
|
|
222
|
+
if (!t->connected) {
|
|
223
|
+
git_error_set(GIT_ERROR_NET, "cannot reconfigure a transport that is not connected");
|
|
224
|
+
return -1;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return git_remote_connect_options_normalize(&t->connect_opts, t->owner->repo, opts);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
static int git_smart__capabilities(unsigned int *capabilities, git_transport *transport)
|
|
231
|
+
{
|
|
232
|
+
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
233
|
+
|
|
234
|
+
*capabilities = 0;
|
|
235
|
+
|
|
236
|
+
if (t->caps.want_tip_sha1)
|
|
237
|
+
*capabilities |= GIT_REMOTE_CAPABILITY_TIP_OID;
|
|
238
|
+
|
|
239
|
+
if (t->caps.want_reachable_sha1)
|
|
240
|
+
*capabilities |= GIT_REMOTE_CAPABILITY_REACHABLE_OID;
|
|
241
|
+
|
|
242
|
+
return 0;
|
|
243
|
+
}
|
|
244
|
+
|
|
318
245
|
static int git_smart__ls(const git_remote_head ***out, size_t *size, git_transport *transport)
|
|
319
246
|
{
|
|
320
247
|
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
@@ -401,15 +328,6 @@ static int git_smart__is_connected(git_transport *transport)
|
|
|
401
328
|
return t->connected;
|
|
402
329
|
}
|
|
403
330
|
|
|
404
|
-
static int git_smart__read_flags(git_transport *transport, int *flags)
|
|
405
|
-
{
|
|
406
|
-
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
407
|
-
|
|
408
|
-
*flags = t->flags;
|
|
409
|
-
|
|
410
|
-
return 0;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
331
|
static int git_smart__close(git_transport *transport)
|
|
414
332
|
{
|
|
415
333
|
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
@@ -465,9 +383,8 @@ static void git_smart__free(git_transport *transport)
|
|
|
465
383
|
git_pkt_free(p);
|
|
466
384
|
|
|
467
385
|
git_vector_free(refs);
|
|
468
|
-
git__free((char *)t->proxy.url);
|
|
469
386
|
|
|
470
|
-
|
|
387
|
+
git_remote_connect_options_dispose(&t->connect_opts);
|
|
471
388
|
|
|
472
389
|
git__free(t);
|
|
473
390
|
}
|
|
@@ -482,34 +399,30 @@ static int ref_name_cmp(const void *a, const void *b)
|
|
|
482
399
|
int git_transport_smart_certificate_check(git_transport *transport, git_cert *cert, int valid, const char *hostname)
|
|
483
400
|
{
|
|
484
401
|
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
402
|
+
git_remote_connect_options *connect_opts = &t->connect_opts;
|
|
485
403
|
|
|
486
404
|
GIT_ASSERT_ARG(transport);
|
|
487
405
|
GIT_ASSERT_ARG(cert);
|
|
488
406
|
GIT_ASSERT_ARG(hostname);
|
|
489
407
|
|
|
490
|
-
if (!
|
|
408
|
+
if (!connect_opts->callbacks.certificate_check)
|
|
491
409
|
return GIT_PASSTHROUGH;
|
|
492
410
|
|
|
493
|
-
return
|
|
411
|
+
return connect_opts->callbacks.certificate_check(cert, valid, hostname, connect_opts->callbacks.payload);
|
|
494
412
|
}
|
|
495
413
|
|
|
496
414
|
int git_transport_smart_credentials(git_credential **out, git_transport *transport, const char *user, int methods)
|
|
497
415
|
{
|
|
498
416
|
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
417
|
+
git_remote_connect_options *connect_opts = &t->connect_opts;
|
|
499
418
|
|
|
500
419
|
GIT_ASSERT_ARG(out);
|
|
501
420
|
GIT_ASSERT_ARG(transport);
|
|
502
421
|
|
|
503
|
-
if (!
|
|
422
|
+
if (!connect_opts->callbacks.credentials)
|
|
504
423
|
return GIT_PASSTHROUGH;
|
|
505
424
|
|
|
506
|
-
return
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
int git_transport_smart_proxy_options(git_proxy_options *out, git_transport *transport)
|
|
510
|
-
{
|
|
511
|
-
transport_smart *t = GIT_CONTAINER_OF(transport, transport_smart, parent);
|
|
512
|
-
return git_proxy_options_dup(out, &t->proxy);
|
|
425
|
+
return connect_opts->callbacks.credentials(out, t->url, user, methods, connect_opts->callbacks.payload);
|
|
513
426
|
}
|
|
514
427
|
|
|
515
428
|
int git_transport_smart(git_transport **out, git_remote *owner, void *param)
|
|
@@ -524,9 +437,9 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
|
|
|
524
437
|
GIT_ERROR_CHECK_ALLOC(t);
|
|
525
438
|
|
|
526
439
|
t->parent.version = GIT_TRANSPORT_VERSION;
|
|
527
|
-
t->parent.set_callbacks = git_smart__set_callbacks;
|
|
528
|
-
t->parent.set_custom_headers = git_smart__set_custom_headers;
|
|
529
440
|
t->parent.connect = git_smart__connect;
|
|
441
|
+
t->parent.set_connect_opts = git_smart__set_connect_opts;
|
|
442
|
+
t->parent.capabilities = git_smart__capabilities;
|
|
530
443
|
t->parent.close = git_smart__close;
|
|
531
444
|
t->parent.free = git_smart__free;
|
|
532
445
|
t->parent.negotiate_fetch = git_smart__negotiate_fetch;
|
|
@@ -534,7 +447,6 @@ int git_transport_smart(git_transport **out, git_remote *owner, void *param)
|
|
|
534
447
|
t->parent.push = git_smart__push;
|
|
535
448
|
t->parent.ls = git_smart__ls;
|
|
536
449
|
t->parent.is_connected = git_smart__is_connected;
|
|
537
|
-
t->parent.read_flags = git_smart__read_flags;
|
|
538
450
|
t->parent.cancel = git_smart__cancel;
|
|
539
451
|
|
|
540
452
|
t->owner = owner;
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
#include "git2.h"
|
|
13
13
|
#include "vector.h"
|
|
14
14
|
#include "netops.h"
|
|
15
|
-
#include "buffer.h"
|
|
16
15
|
#include "push.h"
|
|
16
|
+
#include "str.h"
|
|
17
17
|
#include "git2/sys/transport.h"
|
|
18
18
|
|
|
19
19
|
#define GIT_SIDE_BAND_DATA 1
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
#define GIT_CAP_REPORT_STATUS "report-status"
|
|
31
31
|
#define GIT_CAP_THIN_PACK "thin-pack"
|
|
32
32
|
#define GIT_CAP_SYMREF "symref"
|
|
33
|
+
#define GIT_CAP_WANT_TIP_SHA1 "allow-tip-sha1-in-want"
|
|
34
|
+
#define GIT_CAP_WANT_REACHABLE_SHA1 "allow-reachable-sha1-in-want"
|
|
33
35
|
|
|
34
36
|
extern bool git_smart__ofs_delta_enabled;
|
|
35
37
|
|
|
@@ -46,7 +48,7 @@ typedef enum {
|
|
|
46
48
|
GIT_PKT_PROGRESS,
|
|
47
49
|
GIT_PKT_OK,
|
|
48
50
|
GIT_PKT_NG,
|
|
49
|
-
GIT_PKT_UNPACK
|
|
51
|
+
GIT_PKT_UNPACK
|
|
50
52
|
} git_pkt_type;
|
|
51
53
|
|
|
52
54
|
/* Used for multi_ack and multi_ack_detailed */
|
|
@@ -119,16 +121,18 @@ typedef struct {
|
|
|
119
121
|
} git_pkt_unpack;
|
|
120
122
|
|
|
121
123
|
typedef struct transport_smart_caps {
|
|
122
|
-
int common:1,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
unsigned int common:1,
|
|
125
|
+
ofs_delta:1,
|
|
126
|
+
multi_ack:1,
|
|
127
|
+
multi_ack_detailed:1,
|
|
128
|
+
side_band:1,
|
|
129
|
+
side_band_64k:1,
|
|
130
|
+
include_tag:1,
|
|
131
|
+
delete_refs:1,
|
|
132
|
+
report_status:1,
|
|
133
|
+
thin_pack:1,
|
|
134
|
+
want_tip_sha1:1,
|
|
135
|
+
want_reachable_sha1:1;
|
|
132
136
|
} transport_smart_caps;
|
|
133
137
|
|
|
134
138
|
typedef int (*packetsize_cb)(size_t received, void *payload);
|
|
@@ -137,16 +141,8 @@ typedef struct {
|
|
|
137
141
|
git_transport parent;
|
|
138
142
|
git_remote *owner;
|
|
139
143
|
char *url;
|
|
140
|
-
|
|
141
|
-
void *cred_acquire_payload;
|
|
142
|
-
git_proxy_options proxy;
|
|
144
|
+
git_remote_connect_options connect_opts;
|
|
143
145
|
int direction;
|
|
144
|
-
int flags;
|
|
145
|
-
git_transport_message_cb progress_cb;
|
|
146
|
-
git_transport_message_cb error_cb;
|
|
147
|
-
git_transport_certificate_check_cb certificate_check_cb;
|
|
148
|
-
void *message_cb_payload;
|
|
149
|
-
git_strarray custom_headers;
|
|
150
146
|
git_smart_subtransport *wrapped;
|
|
151
147
|
git_smart_subtransport_stream *current_stream;
|
|
152
148
|
transport_smart_caps caps;
|
|
@@ -157,8 +153,8 @@ typedef struct {
|
|
|
157
153
|
packetsize_cb packetsize_cb;
|
|
158
154
|
void *packetsize_payload;
|
|
159
155
|
unsigned rpc : 1,
|
|
160
|
-
|
|
161
|
-
|
|
156
|
+
have_refs : 1,
|
|
157
|
+
connected : 1;
|
|
162
158
|
gitno_buffer buffer;
|
|
163
159
|
char buffer_data[65536];
|
|
164
160
|
} transport_smart;
|
|
@@ -166,7 +162,7 @@ typedef struct {
|
|
|
166
162
|
/* smart_protocol.c */
|
|
167
163
|
int git_smart__store_refs(transport_smart *t, int flushes);
|
|
168
164
|
int git_smart__detect_caps(git_pkt_ref *pkt, transport_smart_caps *caps, git_vector *symrefs);
|
|
169
|
-
int git_smart__push(git_transport *transport, git_push *push
|
|
165
|
+
int git_smart__push(git_transport *transport, git_push *push);
|
|
170
166
|
|
|
171
167
|
int git_smart__negotiate_fetch(
|
|
172
168
|
git_transport *transport,
|
|
@@ -177,9 +173,7 @@ int git_smart__negotiate_fetch(
|
|
|
177
173
|
int git_smart__download_pack(
|
|
178
174
|
git_transport *transport,
|
|
179
175
|
git_repository *repo,
|
|
180
|
-
git_indexer_progress *stats
|
|
181
|
-
git_indexer_progress_cb progress_cb,
|
|
182
|
-
void *progress_payload);
|
|
176
|
+
git_indexer_progress *stats);
|
|
183
177
|
|
|
184
178
|
/* smart.c */
|
|
185
179
|
int git_smart__negotiation_step(git_transport *transport, void *data, size_t len);
|
|
@@ -189,11 +183,11 @@ int git_smart__update_heads(transport_smart *t, git_vector *symrefs);
|
|
|
189
183
|
|
|
190
184
|
/* smart_pkt.c */
|
|
191
185
|
int git_pkt_parse_line(git_pkt **head, const char **endptr, const char *line, size_t linelen);
|
|
192
|
-
int git_pkt_buffer_flush(
|
|
186
|
+
int git_pkt_buffer_flush(git_str *buf);
|
|
193
187
|
int git_pkt_send_flush(GIT_SOCKET s);
|
|
194
|
-
int git_pkt_buffer_done(
|
|
195
|
-
int git_pkt_buffer_wants(const git_remote_head * const *refs, size_t count, transport_smart_caps *caps,
|
|
196
|
-
int git_pkt_buffer_have(git_oid *oid,
|
|
188
|
+
int git_pkt_buffer_done(git_str *buf);
|
|
189
|
+
int git_pkt_buffer_wants(const git_remote_head * const *refs, size_t count, transport_smart_caps *caps, git_str *buf);
|
|
190
|
+
int git_pkt_buffer_have(git_oid *oid, git_str *buf);
|
|
197
191
|
void git_pkt_free(git_pkt *pkt);
|
|
198
192
|
|
|
199
193
|
#endif
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
|
|
8
8
|
#include "common.h"
|
|
9
9
|
|
|
10
|
-
#include "git2/types.h"
|
|
11
|
-
#include "git2/errors.h"
|
|
12
|
-
#include "git2/refs.h"
|
|
13
|
-
#include "git2/revwalk.h"
|
|
14
|
-
|
|
15
10
|
#include "smart.h"
|
|
16
11
|
#include "util.h"
|
|
17
12
|
#include "netops.h"
|
|
18
13
|
#include "posix.h"
|
|
19
|
-
#include "
|
|
14
|
+
#include "str.h"
|
|
15
|
+
|
|
16
|
+
#include "git2/types.h"
|
|
17
|
+
#include "git2/errors.h"
|
|
18
|
+
#include "git2/refs.h"
|
|
19
|
+
#include "git2/revwalk.h"
|
|
20
20
|
|
|
21
21
|
#include <ctype.h>
|
|
22
22
|
|
|
@@ -522,43 +522,43 @@ void git_pkt_free(git_pkt *pkt)
|
|
|
522
522
|
git__free(pkt);
|
|
523
523
|
}
|
|
524
524
|
|
|
525
|
-
int git_pkt_buffer_flush(
|
|
525
|
+
int git_pkt_buffer_flush(git_str *buf)
|
|
526
526
|
{
|
|
527
|
-
return
|
|
527
|
+
return git_str_put(buf, pkt_flush_str, strlen(pkt_flush_str));
|
|
528
528
|
}
|
|
529
529
|
|
|
530
|
-
static int buffer_want_with_caps(const git_remote_head *head, transport_smart_caps *caps,
|
|
530
|
+
static int buffer_want_with_caps(const git_remote_head *head, transport_smart_caps *caps, git_str *buf)
|
|
531
531
|
{
|
|
532
|
-
|
|
532
|
+
git_str str = GIT_STR_INIT;
|
|
533
533
|
char oid[GIT_OID_HEXSZ +1] = {0};
|
|
534
534
|
size_t len;
|
|
535
535
|
|
|
536
536
|
/* Prefer multi_ack_detailed */
|
|
537
537
|
if (caps->multi_ack_detailed)
|
|
538
|
-
|
|
538
|
+
git_str_puts(&str, GIT_CAP_MULTI_ACK_DETAILED " ");
|
|
539
539
|
else if (caps->multi_ack)
|
|
540
|
-
|
|
540
|
+
git_str_puts(&str, GIT_CAP_MULTI_ACK " ");
|
|
541
541
|
|
|
542
542
|
/* Prefer side-band-64k if the server supports both */
|
|
543
543
|
if (caps->side_band_64k)
|
|
544
|
-
|
|
544
|
+
git_str_printf(&str, "%s ", GIT_CAP_SIDE_BAND_64K);
|
|
545
545
|
else if (caps->side_band)
|
|
546
|
-
|
|
546
|
+
git_str_printf(&str, "%s ", GIT_CAP_SIDE_BAND);
|
|
547
547
|
|
|
548
548
|
if (caps->include_tag)
|
|
549
|
-
|
|
549
|
+
git_str_puts(&str, GIT_CAP_INCLUDE_TAG " ");
|
|
550
550
|
|
|
551
551
|
if (caps->thin_pack)
|
|
552
|
-
|
|
552
|
+
git_str_puts(&str, GIT_CAP_THIN_PACK " ");
|
|
553
553
|
|
|
554
554
|
if (caps->ofs_delta)
|
|
555
|
-
|
|
555
|
+
git_str_puts(&str, GIT_CAP_OFS_DELTA " ");
|
|
556
556
|
|
|
557
|
-
if (
|
|
557
|
+
if (git_str_oom(&str))
|
|
558
558
|
return -1;
|
|
559
559
|
|
|
560
560
|
len = strlen("XXXXwant ") + GIT_OID_HEXSZ + 1 /* NUL */ +
|
|
561
|
-
|
|
561
|
+
git_str_len(&str) + 1 /* LF */;
|
|
562
562
|
|
|
563
563
|
if (len > 0xffff) {
|
|
564
564
|
git_error_set(GIT_ERROR_NET,
|
|
@@ -566,13 +566,13 @@ static int buffer_want_with_caps(const git_remote_head *head, transport_smart_ca
|
|
|
566
566
|
return -1;
|
|
567
567
|
}
|
|
568
568
|
|
|
569
|
-
|
|
569
|
+
git_str_grow_by(buf, len);
|
|
570
570
|
git_oid_fmt(oid, &head->oid);
|
|
571
|
-
|
|
572
|
-
"%04xwant %s %s\n", (unsigned int)len, oid,
|
|
573
|
-
|
|
571
|
+
git_str_printf(buf,
|
|
572
|
+
"%04xwant %s %s\n", (unsigned int)len, oid, git_str_cstr(&str));
|
|
573
|
+
git_str_dispose(&str);
|
|
574
574
|
|
|
575
|
-
|
|
575
|
+
GIT_ERROR_CHECK_ALLOC_STR(buf);
|
|
576
576
|
|
|
577
577
|
return 0;
|
|
578
578
|
}
|
|
@@ -586,7 +586,7 @@ int git_pkt_buffer_wants(
|
|
|
586
586
|
const git_remote_head * const *refs,
|
|
587
587
|
size_t count,
|
|
588
588
|
transport_smart_caps *caps,
|
|
589
|
-
|
|
589
|
+
git_str *buf)
|
|
590
590
|
{
|
|
591
591
|
size_t i = 0;
|
|
592
592
|
const git_remote_head *head;
|
|
@@ -612,26 +612,26 @@ int git_pkt_buffer_wants(
|
|
|
612
612
|
continue;
|
|
613
613
|
|
|
614
614
|
git_oid_fmt(oid, &head->oid);
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
if (
|
|
615
|
+
git_str_put(buf, pkt_want_prefix, strlen(pkt_want_prefix));
|
|
616
|
+
git_str_put(buf, oid, GIT_OID_HEXSZ);
|
|
617
|
+
git_str_putc(buf, '\n');
|
|
618
|
+
if (git_str_oom(buf))
|
|
619
619
|
return -1;
|
|
620
620
|
}
|
|
621
621
|
|
|
622
622
|
return git_pkt_buffer_flush(buf);
|
|
623
623
|
}
|
|
624
624
|
|
|
625
|
-
int git_pkt_buffer_have(git_oid *oid,
|
|
625
|
+
int git_pkt_buffer_have(git_oid *oid, git_str *buf)
|
|
626
626
|
{
|
|
627
627
|
char oidhex[GIT_OID_HEXSZ + 1];
|
|
628
628
|
|
|
629
629
|
memset(oidhex, 0x0, sizeof(oidhex));
|
|
630
630
|
git_oid_fmt(oidhex, oid);
|
|
631
|
-
return
|
|
631
|
+
return git_str_printf(buf, "%s%s\n", pkt_have_prefix, oidhex);
|
|
632
632
|
}
|
|
633
633
|
|
|
634
|
-
int git_pkt_buffer_done(
|
|
634
|
+
int git_pkt_buffer_done(git_str *buf)
|
|
635
635
|
{
|
|
636
|
-
return
|
|
636
|
+
return git_str_puts(buf, pkt_done_str);
|
|
637
637
|
}
|