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
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
|
|
12
12
|
#include "git2.h"
|
|
13
13
|
#include "git2/transport.h"
|
|
14
|
-
#include "buffer.h"
|
|
15
14
|
#include "posix.h"
|
|
15
|
+
#include "str.h"
|
|
16
16
|
#include "netops.h"
|
|
17
17
|
#include "smart.h"
|
|
18
18
|
#include "remote.h"
|
|
@@ -99,7 +99,7 @@ typedef enum {
|
|
|
99
99
|
GIT_WINHTTP_AUTH_BASIC = 1,
|
|
100
100
|
GIT_WINHTTP_AUTH_NTLM = 2,
|
|
101
101
|
GIT_WINHTTP_AUTH_NEGOTIATE = 4,
|
|
102
|
-
GIT_WINHTTP_AUTH_DIGEST = 8
|
|
102
|
+
GIT_WINHTTP_AUTH_DIGEST = 8
|
|
103
103
|
} winhttp_authmechanism_t;
|
|
104
104
|
|
|
105
105
|
typedef struct {
|
|
@@ -293,14 +293,14 @@ static int certificate_check(winhttp_stream *s, int valid)
|
|
|
293
293
|
git_cert_x509 cert;
|
|
294
294
|
|
|
295
295
|
/* If there is no override, we should fail if WinHTTP doesn't think it's fine */
|
|
296
|
-
if (t->owner->
|
|
296
|
+
if (t->owner->connect_opts.callbacks.certificate_check == NULL && !valid) {
|
|
297
297
|
if (!git_error_last())
|
|
298
298
|
git_error_set(GIT_ERROR_HTTP, "unknown certificate check failure");
|
|
299
299
|
|
|
300
300
|
return GIT_ECERTIFICATE;
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
if (t->owner->
|
|
303
|
+
if (t->owner->connect_opts.callbacks.certificate_check == NULL || git__strcmp(t->server.url.scheme, "https") != 0)
|
|
304
304
|
return 0;
|
|
305
305
|
|
|
306
306
|
if (!WinHttpQueryOption(s->request, WINHTTP_OPTION_SERVER_CERT_CONTEXT, &cert_ctx, &cert_ctx_size)) {
|
|
@@ -312,7 +312,7 @@ static int certificate_check(winhttp_stream *s, int valid)
|
|
|
312
312
|
cert.parent.cert_type = GIT_CERT_X509;
|
|
313
313
|
cert.data = cert_ctx->pbCertEncoded;
|
|
314
314
|
cert.len = cert_ctx->cbCertEncoded;
|
|
315
|
-
error = t->owner->
|
|
315
|
+
error = t->owner->connect_opts.callbacks.certificate_check((git_cert *) &cert, valid, t->server.url.host, t->owner->connect_opts.callbacks.payload);
|
|
316
316
|
CertFreeCertificateContext(cert_ctx);
|
|
317
317
|
|
|
318
318
|
if (error == GIT_PASSTHROUGH)
|
|
@@ -372,7 +372,7 @@ static int apply_credentials(
|
|
|
372
372
|
static int winhttp_stream_connect(winhttp_stream *s)
|
|
373
373
|
{
|
|
374
374
|
winhttp_subtransport *t = OWNING_SUBTRANSPORT(s);
|
|
375
|
-
|
|
375
|
+
git_str buf = GIT_STR_INIT;
|
|
376
376
|
char *proxy_url = NULL;
|
|
377
377
|
wchar_t ct[MAX_CONTENT_TYPE_LEN];
|
|
378
378
|
LPCWSTR types[] = { L"*/*", NULL };
|
|
@@ -391,13 +391,13 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
391
391
|
if ((git__suffixcmp(t->server.url.path, "/") == 0) && (git__prefixcmp(service_url, "/") == 0))
|
|
392
392
|
service_url++;
|
|
393
393
|
/* Prepare URL */
|
|
394
|
-
|
|
394
|
+
git_str_printf(&buf, "%s%s", t->server.url.path, service_url);
|
|
395
395
|
|
|
396
|
-
if (
|
|
396
|
+
if (git_str_oom(&buf))
|
|
397
397
|
return -1;
|
|
398
398
|
|
|
399
399
|
/* Convert URL to wide characters */
|
|
400
|
-
if (git__utf8_to_16_alloc(&s->request_uri,
|
|
400
|
+
if (git__utf8_to_16_alloc(&s->request_uri, git_str_cstr(&buf)) < 0) {
|
|
401
401
|
git_error_set(GIT_ERROR_OS, "failed to convert string to wide form");
|
|
402
402
|
goto on_error;
|
|
403
403
|
}
|
|
@@ -426,7 +426,7 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
426
426
|
goto on_error;
|
|
427
427
|
}
|
|
428
428
|
|
|
429
|
-
proxy_opts = &t->owner->
|
|
429
|
+
proxy_opts = &t->owner->connect_opts.proxy_opts;
|
|
430
430
|
if (proxy_opts->type == GIT_PROXY_AUTO) {
|
|
431
431
|
/* Set proxy if necessary */
|
|
432
432
|
if (git_remote__http_proxy(&proxy_url, t->owner->owner, &t->server.url) < 0)
|
|
@@ -438,7 +438,7 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
438
438
|
}
|
|
439
439
|
|
|
440
440
|
if (proxy_url) {
|
|
441
|
-
|
|
441
|
+
git_str processed_url = GIT_STR_INIT;
|
|
442
442
|
WINHTTP_PROXY_INFO proxy_info;
|
|
443
443
|
wchar_t *proxy_wide;
|
|
444
444
|
|
|
@@ -453,28 +453,28 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
453
453
|
goto on_error;
|
|
454
454
|
}
|
|
455
455
|
|
|
456
|
-
|
|
457
|
-
|
|
456
|
+
git_str_puts(&processed_url, t->proxy.url.scheme);
|
|
457
|
+
git_str_PUTS(&processed_url, "://");
|
|
458
458
|
|
|
459
459
|
if (git_net_url_is_ipv6(&t->proxy.url))
|
|
460
|
-
|
|
460
|
+
git_str_putc(&processed_url, '[');
|
|
461
461
|
|
|
462
|
-
|
|
462
|
+
git_str_puts(&processed_url, t->proxy.url.host);
|
|
463
463
|
|
|
464
464
|
if (git_net_url_is_ipv6(&t->proxy.url))
|
|
465
|
-
|
|
465
|
+
git_str_putc(&processed_url, ']');
|
|
466
466
|
|
|
467
467
|
if (!git_net_url_is_default_port(&t->proxy.url))
|
|
468
|
-
|
|
468
|
+
git_str_printf(&processed_url, ":%s", t->proxy.url.port);
|
|
469
469
|
|
|
470
|
-
if (
|
|
470
|
+
if (git_str_oom(&processed_url)) {
|
|
471
471
|
error = -1;
|
|
472
472
|
goto on_error;
|
|
473
473
|
}
|
|
474
474
|
|
|
475
475
|
/* Convert URL to wide characters */
|
|
476
476
|
error = git__utf8_to_16_alloc(&proxy_wide, processed_url.ptr);
|
|
477
|
-
|
|
477
|
+
git_str_dispose(&processed_url);
|
|
478
478
|
if (error < 0)
|
|
479
479
|
goto on_error;
|
|
480
480
|
|
|
@@ -525,13 +525,13 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
525
525
|
|
|
526
526
|
if (post_verb == s->verb) {
|
|
527
527
|
/* Send Content-Type and Accept headers -- only necessary on a POST */
|
|
528
|
-
|
|
529
|
-
if (
|
|
528
|
+
git_str_clear(&buf);
|
|
529
|
+
if (git_str_printf(&buf,
|
|
530
530
|
"Content-Type: application/x-git-%s-request",
|
|
531
531
|
s->service) < 0)
|
|
532
532
|
goto on_error;
|
|
533
533
|
|
|
534
|
-
if (git__utf8_to_16(ct, MAX_CONTENT_TYPE_LEN,
|
|
534
|
+
if (git__utf8_to_16(ct, MAX_CONTENT_TYPE_LEN, git_str_cstr(&buf)) < 0) {
|
|
535
535
|
git_error_set(GIT_ERROR_OS, "failed to convert content-type to wide characters");
|
|
536
536
|
goto on_error;
|
|
537
537
|
}
|
|
@@ -542,13 +542,13 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
542
542
|
goto on_error;
|
|
543
543
|
}
|
|
544
544
|
|
|
545
|
-
|
|
546
|
-
if (
|
|
545
|
+
git_str_clear(&buf);
|
|
546
|
+
if (git_str_printf(&buf,
|
|
547
547
|
"Accept: application/x-git-%s-result",
|
|
548
548
|
s->service) < 0)
|
|
549
549
|
goto on_error;
|
|
550
550
|
|
|
551
|
-
if (git__utf8_to_16(ct, MAX_CONTENT_TYPE_LEN,
|
|
551
|
+
if (git__utf8_to_16(ct, MAX_CONTENT_TYPE_LEN, git_str_cstr(&buf)) < 0) {
|
|
552
552
|
git_error_set(GIT_ERROR_OS, "failed to convert accept header to wide characters");
|
|
553
553
|
goto on_error;
|
|
554
554
|
}
|
|
@@ -560,11 +560,11 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
560
560
|
}
|
|
561
561
|
}
|
|
562
562
|
|
|
563
|
-
for (i = 0; i < t->owner->custom_headers.count; i++) {
|
|
564
|
-
if (t->owner->custom_headers.strings[i]) {
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
if (git__utf8_to_16(ct, MAX_CONTENT_TYPE_LEN,
|
|
563
|
+
for (i = 0; i < t->owner->connect_opts.custom_headers.count; i++) {
|
|
564
|
+
if (t->owner->connect_opts.custom_headers.strings[i]) {
|
|
565
|
+
git_str_clear(&buf);
|
|
566
|
+
git_str_puts(&buf, t->owner->connect_opts.custom_headers.strings[i]);
|
|
567
|
+
if (git__utf8_to_16(ct, MAX_CONTENT_TYPE_LEN, git_str_cstr(&buf)) < 0) {
|
|
568
568
|
git_error_set(GIT_ERROR_OS, "failed to convert custom header to wide characters");
|
|
569
569
|
goto on_error;
|
|
570
570
|
}
|
|
@@ -577,14 +577,6 @@ static int winhttp_stream_connect(winhttp_stream *s)
|
|
|
577
577
|
}
|
|
578
578
|
}
|
|
579
579
|
|
|
580
|
-
/* If requested, disable certificate validation */
|
|
581
|
-
if (strcmp(t->server.url.scheme, "https") == 0) {
|
|
582
|
-
int flags;
|
|
583
|
-
|
|
584
|
-
if (t->owner->parent.read_flags(&t->owner->parent, &flags) < 0)
|
|
585
|
-
goto on_error;
|
|
586
|
-
}
|
|
587
|
-
|
|
588
580
|
if ((error = apply_credentials(s->request, &t->server.url, WINHTTP_AUTH_TARGET_SERVER, t->server.cred, t->server.auth_mechanisms)) < 0)
|
|
589
581
|
goto on_error;
|
|
590
582
|
|
|
@@ -597,7 +589,7 @@ on_error:
|
|
|
597
589
|
winhttp_stream_close(s);
|
|
598
590
|
|
|
599
591
|
git__free(proxy_url);
|
|
600
|
-
|
|
592
|
+
git_str_dispose(&buf);
|
|
601
593
|
return error;
|
|
602
594
|
}
|
|
603
595
|
|
|
@@ -646,23 +638,23 @@ static int parse_unauthorized_response(
|
|
|
646
638
|
static int write_chunk(HINTERNET request, const char *buffer, size_t len)
|
|
647
639
|
{
|
|
648
640
|
DWORD bytes_written;
|
|
649
|
-
|
|
641
|
+
git_str buf = GIT_STR_INIT;
|
|
650
642
|
|
|
651
643
|
/* Chunk header */
|
|
652
|
-
|
|
644
|
+
git_str_printf(&buf, "%"PRIXZ"\r\n", len);
|
|
653
645
|
|
|
654
|
-
if (
|
|
646
|
+
if (git_str_oom(&buf))
|
|
655
647
|
return -1;
|
|
656
648
|
|
|
657
649
|
if (!WinHttpWriteData(request,
|
|
658
|
-
|
|
650
|
+
git_str_cstr(&buf), (DWORD)git_str_len(&buf),
|
|
659
651
|
&bytes_written)) {
|
|
660
|
-
|
|
652
|
+
git_str_dispose(&buf);
|
|
661
653
|
git_error_set(GIT_ERROR_OS, "failed to write chunk header");
|
|
662
654
|
return -1;
|
|
663
655
|
}
|
|
664
656
|
|
|
665
|
-
|
|
657
|
+
git_str_dispose(&buf);
|
|
666
658
|
|
|
667
659
|
/* Chunk body */
|
|
668
660
|
if (!WinHttpWriteData(request,
|
|
@@ -756,7 +748,7 @@ static int winhttp_connect(
|
|
|
756
748
|
wchar_t *wide_host = NULL;
|
|
757
749
|
int32_t port;
|
|
758
750
|
wchar_t *wide_ua = NULL;
|
|
759
|
-
|
|
751
|
+
git_str ipv6 = GIT_STR_INIT, ua = GIT_STR_INIT;
|
|
760
752
|
const char *host;
|
|
761
753
|
int error = -1;
|
|
762
754
|
int default_timeout = TIMEOUT_INFINITE;
|
|
@@ -777,7 +769,7 @@ static int winhttp_connect(
|
|
|
777
769
|
|
|
778
770
|
/* IPv6? Add braces around the host. */
|
|
779
771
|
if (git_net_url_is_ipv6(&t->server.url)) {
|
|
780
|
-
if (
|
|
772
|
+
if (git_str_printf(&ipv6, "[%s]", t->server.url.host) < 0)
|
|
781
773
|
goto on_error;
|
|
782
774
|
|
|
783
775
|
host = ipv6.ptr;
|
|
@@ -795,7 +787,7 @@ static int winhttp_connect(
|
|
|
795
787
|
if (git_http__user_agent(&ua) < 0)
|
|
796
788
|
goto on_error;
|
|
797
789
|
|
|
798
|
-
if (git__utf8_to_16_alloc(&wide_ua,
|
|
790
|
+
if (git__utf8_to_16_alloc(&wide_ua, git_str_cstr(&ua)) < 0) {
|
|
799
791
|
git_error_set(GIT_ERROR_OS, "unable to convert host to wide characters");
|
|
800
792
|
goto on_error;
|
|
801
793
|
}
|
|
@@ -863,8 +855,8 @@ on_error:
|
|
|
863
855
|
if (error < 0)
|
|
864
856
|
winhttp_close_connection(t);
|
|
865
857
|
|
|
866
|
-
|
|
867
|
-
|
|
858
|
+
git_str_dispose(&ua);
|
|
859
|
+
git_str_dispose(&ipv6);
|
|
868
860
|
git__free(wide_host);
|
|
869
861
|
git__free(wide_ua);
|
|
870
862
|
|
|
@@ -1197,8 +1189,10 @@ replay:
|
|
|
1197
1189
|
winhttp_stream_close(s);
|
|
1198
1190
|
|
|
1199
1191
|
if (!git__prefixcmp_icase(location8, prefix_https)) {
|
|
1192
|
+
bool follow = (t->owner->connect_opts.follow_redirects != GIT_REMOTE_REDIRECT_NONE);
|
|
1193
|
+
|
|
1200
1194
|
/* Upgrade to secure connection; disconnect and start over */
|
|
1201
|
-
if (git_net_url_apply_redirect(&t->server.url, location8, s->service_url) < 0) {
|
|
1195
|
+
if (git_net_url_apply_redirect(&t->server.url, location8, follow, s->service_url) < 0) {
|
|
1202
1196
|
git__free(location8);
|
|
1203
1197
|
return -1;
|
|
1204
1198
|
}
|
|
@@ -1218,8 +1212,8 @@ replay:
|
|
|
1218
1212
|
int error = acquire_credentials(s->request,
|
|
1219
1213
|
&t->server,
|
|
1220
1214
|
t->owner->url,
|
|
1221
|
-
t->owner->
|
|
1222
|
-
t->owner->
|
|
1215
|
+
t->owner->connect_opts.callbacks.credentials,
|
|
1216
|
+
t->owner->connect_opts.callbacks.payload);
|
|
1223
1217
|
|
|
1224
1218
|
if (error < 0) {
|
|
1225
1219
|
return error;
|
|
@@ -1231,9 +1225,9 @@ replay:
|
|
|
1231
1225
|
} else if (status_code == HTTP_STATUS_PROXY_AUTH_REQ) {
|
|
1232
1226
|
int error = acquire_credentials(s->request,
|
|
1233
1227
|
&t->proxy,
|
|
1234
|
-
t->owner->
|
|
1235
|
-
t->owner->
|
|
1236
|
-
t->owner->
|
|
1228
|
+
t->owner->connect_opts.proxy_opts.url,
|
|
1229
|
+
t->owner->connect_opts.proxy_opts.credentials,
|
|
1230
|
+
t->owner->connect_opts.proxy_opts.payload);
|
|
1237
1231
|
|
|
1238
1232
|
if (error < 0) {
|
|
1239
1233
|
return error;
|
|
@@ -256,22 +256,22 @@ int git_tree_cache_new(git_tree_cache **out, const char *name, git_pool *pool)
|
|
|
256
256
|
return 0;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
static void write_tree(
|
|
259
|
+
static void write_tree(git_str *out, git_tree_cache *tree)
|
|
260
260
|
{
|
|
261
261
|
size_t i;
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
git_str_printf(out, "%s%c%"PRIdZ" %"PRIuZ"\n", tree->name, 0, tree->entry_count, tree->children_count);
|
|
264
264
|
|
|
265
265
|
if (tree->entry_count != -1)
|
|
266
|
-
|
|
266
|
+
git_str_put(out, (const char *) &tree->oid, GIT_OID_RAWSZ);
|
|
267
267
|
|
|
268
268
|
for (i = 0; i < tree->children_count; i++)
|
|
269
269
|
write_tree(out, tree->children[i]);
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
-
int git_tree_cache_write(
|
|
272
|
+
int git_tree_cache_write(git_str *out, git_tree_cache *tree)
|
|
273
273
|
{
|
|
274
274
|
write_tree(out, tree);
|
|
275
275
|
|
|
276
|
-
return
|
|
276
|
+
return git_str_oom(out) ? -1 : 0;
|
|
277
277
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
#include "common.h"
|
|
12
12
|
|
|
13
13
|
#include "pool.h"
|
|
14
|
-
#include "
|
|
14
|
+
#include "str.h"
|
|
15
15
|
#include "git2/oid.h"
|
|
16
16
|
|
|
17
17
|
typedef struct git_tree_cache {
|
|
@@ -24,7 +24,7 @@ typedef struct git_tree_cache {
|
|
|
24
24
|
char name[GIT_FLEX_ARRAY];
|
|
25
25
|
} git_tree_cache;
|
|
26
26
|
|
|
27
|
-
int git_tree_cache_write(
|
|
27
|
+
int git_tree_cache_write(git_str *out, git_tree_cache *tree);
|
|
28
28
|
int git_tree_cache_read(git_tree_cache **tree, const char *buffer, size_t buffer_size, git_pool *pool);
|
|
29
29
|
void git_tree_cache_invalidate_path(git_tree_cache *tree, const char *path);
|
|
30
30
|
const git_tree_cache *git_tree_cache_get(const git_tree_cache *tree, const char *path);
|
data/vendor/libgit2/src/tree.c
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "futils.h"
|
|
14
14
|
#include "tree-cache.h"
|
|
15
15
|
#include "index.h"
|
|
16
|
+
#include "path.h"
|
|
16
17
|
|
|
17
18
|
#define DEFAULT_TREE_SIZE 16
|
|
18
19
|
#define MAX_FILEMODE_BYTES 6
|
|
@@ -54,8 +55,8 @@ GIT_INLINE(git_filemode_t) normalize_filemode(git_filemode_t filemode)
|
|
|
54
55
|
static int valid_entry_name(git_repository *repo, const char *filename)
|
|
55
56
|
{
|
|
56
57
|
return *filename != '\0' &&
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
git_path_is_valid(repo, filename, 0,
|
|
59
|
+
GIT_FS_PATH_REJECT_TRAVERSAL | GIT_PATH_REJECT_DOT_GIT | GIT_FS_PATH_REJECT_SLASH);
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
static int entry_sort_cmp(const void *a, const void *b)
|
|
@@ -63,7 +64,7 @@ static int entry_sort_cmp(const void *a, const void *b)
|
|
|
63
64
|
const git_tree_entry *e1 = (const git_tree_entry *)a;
|
|
64
65
|
const git_tree_entry *e2 = (const git_tree_entry *)b;
|
|
65
66
|
|
|
66
|
-
return
|
|
67
|
+
return git_fs_path_cmp(
|
|
67
68
|
e1->filename, e1->filename_len, git_tree_entry__is_tree(e1),
|
|
68
69
|
e2->filename, e2->filename_len, git_tree_entry__is_tree(e2),
|
|
69
70
|
git__strncmp);
|
|
@@ -350,15 +351,26 @@ size_t git_treebuilder_entrycount(git_treebuilder *bld)
|
|
|
350
351
|
return git_strmap_size(bld->map);
|
|
351
352
|
}
|
|
352
353
|
|
|
353
|
-
|
|
354
|
+
GIT_INLINE(void) set_error(const char *str, const char *path)
|
|
354
355
|
{
|
|
355
356
|
if (path)
|
|
356
357
|
git_error_set(GIT_ERROR_TREE, "%s - %s", str, path);
|
|
357
358
|
else
|
|
358
359
|
git_error_set(GIT_ERROR_TREE, "%s", str);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
static int tree_error(const char *str, const char *path)
|
|
363
|
+
{
|
|
364
|
+
set_error(str, path);
|
|
359
365
|
return -1;
|
|
360
366
|
}
|
|
361
367
|
|
|
368
|
+
static int tree_parse_error(const char *str, const char *path)
|
|
369
|
+
{
|
|
370
|
+
set_error(str, path);
|
|
371
|
+
return GIT_EINVALID;
|
|
372
|
+
}
|
|
373
|
+
|
|
362
374
|
static int parse_mode(uint16_t *mode_out, const char *buffer, size_t buffer_len, const char **buffer_out)
|
|
363
375
|
{
|
|
364
376
|
int32_t mode;
|
|
@@ -398,19 +410,19 @@ int git_tree__parse_raw(void *_tree, const char *data, size_t size)
|
|
|
398
410
|
uint16_t attr;
|
|
399
411
|
|
|
400
412
|
if (parse_mode(&attr, buffer, buffer_end - buffer, &buffer) < 0 || !buffer)
|
|
401
|
-
return
|
|
413
|
+
return tree_parse_error("failed to parse tree: can't parse filemode", NULL);
|
|
402
414
|
|
|
403
415
|
if (buffer >= buffer_end || (*buffer++) != ' ')
|
|
404
|
-
return
|
|
416
|
+
return tree_parse_error("failed to parse tree: missing space after filemode", NULL);
|
|
405
417
|
|
|
406
418
|
if ((nul = memchr(buffer, 0, buffer_end - buffer)) == NULL)
|
|
407
|
-
return
|
|
419
|
+
return tree_parse_error("failed to parse tree: object is corrupted", NULL);
|
|
408
420
|
|
|
409
421
|
if ((filename_len = nul - buffer) == 0 || filename_len > UINT16_MAX)
|
|
410
|
-
return
|
|
422
|
+
return tree_parse_error("failed to parse tree: can't parse filename", NULL);
|
|
411
423
|
|
|
412
424
|
if ((buffer_end - (nul + 1)) < GIT_OID_RAWSZ)
|
|
413
|
-
return
|
|
425
|
+
return tree_parse_error("failed to parse tree: can't parse OID", NULL);
|
|
414
426
|
|
|
415
427
|
/* Allocate the entry */
|
|
416
428
|
{
|
|
@@ -433,16 +445,15 @@ int git_tree__parse_raw(void *_tree, const char *data, size_t size)
|
|
|
433
445
|
int git_tree__parse(void *_tree, git_odb_object *odb_obj)
|
|
434
446
|
{
|
|
435
447
|
git_tree *tree = _tree;
|
|
448
|
+
const char *data = git_odb_object_data(odb_obj);
|
|
449
|
+
size_t size = git_odb_object_size(odb_obj);
|
|
450
|
+
int error;
|
|
436
451
|
|
|
437
|
-
if ((git_tree__parse_raw(tree,
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
return -1;
|
|
441
|
-
|
|
442
|
-
if (git_odb_object_dup(&tree->odb_obj, odb_obj) < 0)
|
|
443
|
-
return -1;
|
|
452
|
+
if ((error = git_tree__parse_raw(tree, data, size)) < 0 ||
|
|
453
|
+
(error = git_odb_object_dup(&tree->odb_obj, odb_obj)) < 0)
|
|
454
|
+
return error;
|
|
444
455
|
|
|
445
|
-
return
|
|
456
|
+
return error;
|
|
446
457
|
}
|
|
447
458
|
|
|
448
459
|
static size_t find_next_dir(const char *dirname, git_index *index, size_t start)
|
|
@@ -495,7 +506,7 @@ static int check_entry(git_repository *repo, const char *filename, const git_oid
|
|
|
495
506
|
static int git_treebuilder__write_with_buffer(
|
|
496
507
|
git_oid *oid,
|
|
497
508
|
git_treebuilder *bld,
|
|
498
|
-
|
|
509
|
+
git_str *buf)
|
|
499
510
|
{
|
|
500
511
|
int error = 0;
|
|
501
512
|
size_t i, entrycount;
|
|
@@ -503,14 +514,14 @@ static int git_treebuilder__write_with_buffer(
|
|
|
503
514
|
git_tree_entry *entry;
|
|
504
515
|
git_vector entries = GIT_VECTOR_INIT;
|
|
505
516
|
|
|
506
|
-
|
|
517
|
+
git_str_clear(buf);
|
|
507
518
|
|
|
508
519
|
entrycount = git_strmap_size(bld->map);
|
|
509
520
|
if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
|
|
510
521
|
goto out;
|
|
511
522
|
|
|
512
523
|
if (buf->asize == 0 &&
|
|
513
|
-
(error =
|
|
524
|
+
(error = git_str_grow(buf, entrycount * 72)) < 0)
|
|
514
525
|
goto out;
|
|
515
526
|
|
|
516
527
|
git_strmap_foreach_value(bld->map, entry, {
|
|
@@ -523,11 +534,11 @@ static int git_treebuilder__write_with_buffer(
|
|
|
523
534
|
for (i = 0; i < entries.length && !error; ++i) {
|
|
524
535
|
entry = git_vector_get(&entries, i);
|
|
525
536
|
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
537
|
+
git_str_printf(buf, "%o ", entry->attr);
|
|
538
|
+
git_str_put(buf, entry->filename, entry->filename_len + 1);
|
|
539
|
+
git_str_put(buf, (char *)entry->oid->id, GIT_OID_RAWSZ);
|
|
529
540
|
|
|
530
|
-
if (
|
|
541
|
+
if (git_str_oom(buf)) {
|
|
531
542
|
error = -1;
|
|
532
543
|
goto out;
|
|
533
544
|
}
|
|
@@ -575,7 +586,7 @@ static int write_tree(
|
|
|
575
586
|
git_index *index,
|
|
576
587
|
const char *dirname,
|
|
577
588
|
size_t start,
|
|
578
|
-
|
|
589
|
+
git_str *shared_buf)
|
|
579
590
|
{
|
|
580
591
|
git_treebuilder *bld = NULL;
|
|
581
592
|
size_t i, entries = git_index_entrycount(index);
|
|
@@ -594,7 +605,7 @@ static int write_tree(
|
|
|
594
605
|
|
|
595
606
|
/*
|
|
596
607
|
* This loop is unfortunate, but necessary. The index doesn't have
|
|
597
|
-
* any
|
|
608
|
+
* any directories, so we need to handle that manually, and we
|
|
598
609
|
* need to keep track of the current position.
|
|
599
610
|
*/
|
|
600
611
|
for (i = start; i < entries; ++i) {
|
|
@@ -676,7 +687,7 @@ int git_tree__write_index(
|
|
|
676
687
|
{
|
|
677
688
|
int ret;
|
|
678
689
|
git_tree *tree;
|
|
679
|
-
|
|
690
|
+
git_str shared_buf = GIT_STR_INIT;
|
|
680
691
|
bool old_ignore_case = false;
|
|
681
692
|
|
|
682
693
|
GIT_ASSERT_ARG(oid);
|
|
@@ -705,7 +716,7 @@ int git_tree__write_index(
|
|
|
705
716
|
}
|
|
706
717
|
|
|
707
718
|
ret = write_tree(oid, repo, index, "", 0, &shared_buf);
|
|
708
|
-
|
|
719
|
+
git_str_dispose(&shared_buf);
|
|
709
720
|
|
|
710
721
|
if (old_ignore_case)
|
|
711
722
|
git_index__set_ignore_case(index, true);
|
|
@@ -879,7 +890,7 @@ void git_treebuilder_free(git_treebuilder *bld)
|
|
|
879
890
|
if (bld == NULL)
|
|
880
891
|
return;
|
|
881
892
|
|
|
882
|
-
|
|
893
|
+
git_str_dispose(&bld->write_cache);
|
|
883
894
|
git_treebuilder_clear(bld);
|
|
884
895
|
git_strmap_free(bld->map);
|
|
885
896
|
git__free(bld);
|
|
@@ -959,7 +970,7 @@ int git_tree_entry_bypath(
|
|
|
959
970
|
static int tree_walk(
|
|
960
971
|
const git_tree *tree,
|
|
961
972
|
git_treewalk_cb callback,
|
|
962
|
-
|
|
973
|
+
git_str *path,
|
|
963
974
|
void *payload,
|
|
964
975
|
bool preorder)
|
|
965
976
|
{
|
|
@@ -982,17 +993,17 @@ static int tree_walk(
|
|
|
982
993
|
|
|
983
994
|
if (git_tree_entry__is_tree(entry)) {
|
|
984
995
|
git_tree *subtree;
|
|
985
|
-
size_t path_len =
|
|
996
|
+
size_t path_len = git_str_len(path);
|
|
986
997
|
|
|
987
998
|
error = git_tree_lookup(&subtree, tree->object.repo, entry->oid);
|
|
988
999
|
if (error < 0)
|
|
989
1000
|
break;
|
|
990
1001
|
|
|
991
1002
|
/* append the next entry to the path */
|
|
992
|
-
|
|
993
|
-
|
|
1003
|
+
git_str_puts(path, entry->filename);
|
|
1004
|
+
git_str_putc(path, '/');
|
|
994
1005
|
|
|
995
|
-
if (
|
|
1006
|
+
if (git_str_oom(path))
|
|
996
1007
|
error = -1;
|
|
997
1008
|
else
|
|
998
1009
|
error = tree_walk(subtree, callback, path, payload, preorder);
|
|
@@ -1001,7 +1012,7 @@ static int tree_walk(
|
|
|
1001
1012
|
if (error != 0)
|
|
1002
1013
|
break;
|
|
1003
1014
|
|
|
1004
|
-
|
|
1015
|
+
git_str_truncate(path, path_len);
|
|
1005
1016
|
}
|
|
1006
1017
|
|
|
1007
1018
|
if (!preorder) {
|
|
@@ -1024,7 +1035,7 @@ int git_tree_walk(
|
|
|
1024
1035
|
void *payload)
|
|
1025
1036
|
{
|
|
1026
1037
|
int error = 0;
|
|
1027
|
-
|
|
1038
|
+
git_str root_path = GIT_STR_INIT;
|
|
1028
1039
|
|
|
1029
1040
|
if (mode != GIT_TREEWALK_POST && mode != GIT_TREEWALK_PRE) {
|
|
1030
1041
|
git_error_set(GIT_ERROR_INVALID, "invalid walking mode for tree walk");
|
|
@@ -1034,7 +1045,7 @@ int git_tree_walk(
|
|
|
1034
1045
|
error = tree_walk(
|
|
1035
1046
|
tree, callback, &root_path, payload, (mode == GIT_TREEWALK_PRE));
|
|
1036
1047
|
|
|
1037
|
-
|
|
1048
|
+
git_str_dispose(&root_path);
|
|
1038
1049
|
|
|
1039
1050
|
return error;
|
|
1040
1051
|
}
|
|
@@ -1080,19 +1091,19 @@ GIT_INLINE(size_t) count_slashes(const char *path)
|
|
|
1080
1091
|
return count;
|
|
1081
1092
|
}
|
|
1082
1093
|
|
|
1083
|
-
static bool next_component(
|
|
1094
|
+
static bool next_component(git_str *out, const char *in)
|
|
1084
1095
|
{
|
|
1085
1096
|
const char *slash = strchr(in, '/');
|
|
1086
1097
|
|
|
1087
|
-
|
|
1098
|
+
git_str_clear(out);
|
|
1088
1099
|
|
|
1089
1100
|
if (slash)
|
|
1090
|
-
|
|
1101
|
+
git_str_put(out, in, slash - in);
|
|
1091
1102
|
|
|
1092
1103
|
return !!slash;
|
|
1093
1104
|
}
|
|
1094
1105
|
|
|
1095
|
-
static int create_popped_tree(tree_stack_entry *current, tree_stack_entry *popped,
|
|
1106
|
+
static int create_popped_tree(tree_stack_entry *current, tree_stack_entry *popped, git_str *component)
|
|
1096
1107
|
{
|
|
1097
1108
|
int error;
|
|
1098
1109
|
git_oid new_tree;
|
|
@@ -1116,8 +1127,8 @@ static int create_popped_tree(tree_stack_entry *current, tree_stack_entry *poppe
|
|
|
1116
1127
|
}
|
|
1117
1128
|
|
|
1118
1129
|
/* We've written out the tree, now we have to put the new value into its parent */
|
|
1119
|
-
|
|
1120
|
-
|
|
1130
|
+
git_str_clear(component);
|
|
1131
|
+
git_str_puts(component, popped->name);
|
|
1121
1132
|
git__free(popped->name);
|
|
1122
1133
|
|
|
1123
1134
|
GIT_ERROR_CHECK_ALLOC(component->ptr);
|
|
@@ -1142,7 +1153,7 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
|
|
|
1142
1153
|
git_vector entries;
|
|
1143
1154
|
int error;
|
|
1144
1155
|
size_t i;
|
|
1145
|
-
|
|
1156
|
+
git_str component = GIT_STR_INIT;
|
|
1146
1157
|
|
|
1147
1158
|
if ((error = git_vector_init(&entries, nupdates, compare_entries)) < 0)
|
|
1148
1159
|
return error;
|
|
@@ -1171,7 +1182,7 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
|
|
|
1171
1182
|
|
|
1172
1183
|
/* Figure out how much we need to change from the previous tree */
|
|
1173
1184
|
if (last_update)
|
|
1174
|
-
common_prefix =
|
|
1185
|
+
common_prefix = git_fs_path_common_dirlen(last_update->path, update->path);
|
|
1175
1186
|
|
|
1176
1187
|
/*
|
|
1177
1188
|
* The entries are sorted, so when we find we're no
|
|
@@ -1233,7 +1244,7 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
|
|
|
1233
1244
|
{
|
|
1234
1245
|
/* Make sure we're replacing something of the same type */
|
|
1235
1246
|
tree_stack_entry *last = git_array_last(stack);
|
|
1236
|
-
char *basename =
|
|
1247
|
+
char *basename = git_fs_path_basename(update->path);
|
|
1237
1248
|
const git_tree_entry *e = git_treebuilder_get(last->bld, basename);
|
|
1238
1249
|
if (e && git_tree_entry_type(e) != git_object__type_from_filemode(update->filemode)) {
|
|
1239
1250
|
git__free(basename);
|
|
@@ -1252,7 +1263,7 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
|
|
|
1252
1263
|
case GIT_TREE_UPDATE_REMOVE:
|
|
1253
1264
|
{
|
|
1254
1265
|
tree_stack_entry *last = git_array_last(stack);
|
|
1255
|
-
char *basename =
|
|
1266
|
+
char *basename = git_fs_path_basename(update->path);
|
|
1256
1267
|
error = git_treebuilder_remove(last->bld, basename);
|
|
1257
1268
|
git__free(basename);
|
|
1258
1269
|
break;
|
|
@@ -1300,7 +1311,7 @@ cleanup:
|
|
|
1300
1311
|
}
|
|
1301
1312
|
}
|
|
1302
1313
|
|
|
1303
|
-
|
|
1314
|
+
git_str_dispose(&component);
|
|
1304
1315
|
git_array_clear(stack);
|
|
1305
1316
|
git_vector_free(&entries);
|
|
1306
1317
|
return error;
|
data/vendor/libgit2/src/tree.h
CHANGED