rugged 1.3.2.3 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,126 @@
|
|
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 "buf.h"
|
9
|
+
#include "common.h"
|
10
|
+
|
11
|
+
int git_buf_sanitize(git_buf *buf)
|
12
|
+
{
|
13
|
+
GIT_ASSERT_ARG(buf);
|
14
|
+
|
15
|
+
if (buf->reserved > 0)
|
16
|
+
buf->ptr[0] = '\0';
|
17
|
+
else
|
18
|
+
buf->ptr = git_str__initstr;
|
19
|
+
|
20
|
+
buf->size = 0;
|
21
|
+
return 0;
|
22
|
+
}
|
23
|
+
|
24
|
+
int git_buf_tostr(git_str *out, git_buf *buf)
|
25
|
+
{
|
26
|
+
GIT_ASSERT_ARG(out);
|
27
|
+
GIT_ASSERT_ARG(buf);
|
28
|
+
|
29
|
+
if (git_buf_sanitize(buf) < 0)
|
30
|
+
return -1;
|
31
|
+
|
32
|
+
out->ptr = buf->ptr;
|
33
|
+
out->asize = buf->reserved;
|
34
|
+
out->size = buf->size;
|
35
|
+
|
36
|
+
buf->ptr = git_str__initstr;
|
37
|
+
buf->reserved = 0;
|
38
|
+
buf->size = 0;
|
39
|
+
|
40
|
+
return 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
int git_buf_fromstr(git_buf *out, git_str *str)
|
44
|
+
{
|
45
|
+
GIT_ASSERT_ARG(out);
|
46
|
+
GIT_ASSERT_ARG(str);
|
47
|
+
|
48
|
+
out->ptr = str->ptr;
|
49
|
+
out->reserved = str->asize;
|
50
|
+
out->size = str->size;
|
51
|
+
|
52
|
+
str->ptr = git_str__initstr;
|
53
|
+
str->asize = 0;
|
54
|
+
str->size = 0;
|
55
|
+
|
56
|
+
return 0;
|
57
|
+
}
|
58
|
+
|
59
|
+
void git_buf_dispose(git_buf *buf)
|
60
|
+
{
|
61
|
+
if (!buf)
|
62
|
+
return;
|
63
|
+
|
64
|
+
if (buf->ptr != git_str__initstr)
|
65
|
+
git__free(buf->ptr);
|
66
|
+
|
67
|
+
buf->ptr = git_str__initstr;
|
68
|
+
buf->reserved = 0;
|
69
|
+
buf->size = 0;
|
70
|
+
}
|
71
|
+
|
72
|
+
#ifndef GIT_DEPRECATE_HARD
|
73
|
+
int git_buf_grow(git_buf *buffer, size_t target_size)
|
74
|
+
{
|
75
|
+
char *newptr;
|
76
|
+
|
77
|
+
if (buffer->reserved >= target_size)
|
78
|
+
return 0;
|
79
|
+
|
80
|
+
if (buffer->ptr == git_str__initstr)
|
81
|
+
newptr = git__malloc(target_size);
|
82
|
+
else
|
83
|
+
newptr = git__realloc(buffer->ptr, target_size);
|
84
|
+
|
85
|
+
if (!newptr)
|
86
|
+
return -1;
|
87
|
+
|
88
|
+
buffer->ptr = newptr;
|
89
|
+
buffer->reserved = target_size;
|
90
|
+
return 0;
|
91
|
+
}
|
92
|
+
|
93
|
+
int git_buf_set(git_buf *buffer, const void *data, size_t datalen)
|
94
|
+
{
|
95
|
+
size_t alloclen;
|
96
|
+
|
97
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloclen, datalen, 1);
|
98
|
+
|
99
|
+
if (git_buf_grow(buffer, alloclen) < 0)
|
100
|
+
return -1;
|
101
|
+
|
102
|
+
memmove(buffer->ptr, data, datalen);
|
103
|
+
buffer->size = datalen;
|
104
|
+
buffer->ptr[buffer->size] = '\0';
|
105
|
+
|
106
|
+
return 0;
|
107
|
+
}
|
108
|
+
|
109
|
+
int git_buf_is_binary(const git_buf *buf)
|
110
|
+
{
|
111
|
+
git_str str = GIT_STR_INIT_CONST(buf->ptr, buf->size);
|
112
|
+
return git_str_is_binary(&str);
|
113
|
+
}
|
114
|
+
|
115
|
+
int git_buf_contains_nul(const git_buf *buf)
|
116
|
+
{
|
117
|
+
git_str str = GIT_STR_INIT_CONST(buf->ptr, buf->size);
|
118
|
+
return git_str_contains_nul(&str);
|
119
|
+
}
|
120
|
+
|
121
|
+
void git_buf_free(git_buf *buffer)
|
122
|
+
{
|
123
|
+
git_buf_dispose(buffer);
|
124
|
+
}
|
125
|
+
|
126
|
+
#endif
|
@@ -0,0 +1,50 @@
|
|
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
|
+
#ifndef INCLUDE_buf_h__
|
8
|
+
#define INCLUDE_buf_h__
|
9
|
+
|
10
|
+
#include "git2/buffer.h"
|
11
|
+
#include "common.h"
|
12
|
+
|
13
|
+
/*
|
14
|
+
* Adapts a private API that takes a `git_str` into a public API that
|
15
|
+
* takes a `git_buf`.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#define GIT_BUF_WRAP_PRIVATE(buf, fn, ...) \
|
19
|
+
{ \
|
20
|
+
git_str str = GIT_STR_INIT; \
|
21
|
+
int error; \
|
22
|
+
if ((error = git_buf_tostr(&str, buf)) == 0 && \
|
23
|
+
(error = fn(&str, __VA_ARGS__)) == 0) \
|
24
|
+
error = git_buf_fromstr(buf, &str); \
|
25
|
+
git_str_dispose(&str); \
|
26
|
+
return error; \
|
27
|
+
}
|
28
|
+
|
29
|
+
/**
|
30
|
+
* "Sanitizes" a buffer from user input. This simply ensures that the
|
31
|
+
* `git_buf` has nice defaults if the user didn't set the members to
|
32
|
+
* anything, so that if we return early we don't leave it populated
|
33
|
+
* with nonsense.
|
34
|
+
*/
|
35
|
+
extern int git_buf_sanitize(git_buf *from_user);
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Populate a `git_str` from a `git_buf` for passing to libgit2 internal
|
39
|
+
* functions. Sanitizes the given `git_buf` before proceeding. The
|
40
|
+
* `git_buf` will no longer point to this memory.
|
41
|
+
*/
|
42
|
+
extern int git_buf_tostr(git_str *out, git_buf *buf);
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Populate a `git_buf` from a `git_str` for returning to a user.
|
46
|
+
* The `git_str` will no longer point to this memory.
|
47
|
+
*/
|
48
|
+
extern int git_buf_fromstr(git_buf *out, git_str *str);
|
49
|
+
|
50
|
+
#endif
|
@@ -27,10 +27,11 @@
|
|
27
27
|
#include "diff_generate.h"
|
28
28
|
#include "pathspec.h"
|
29
29
|
#include "diff_xdiff.h"
|
30
|
-
#include "
|
30
|
+
#include "fs_path.h"
|
31
31
|
#include "attr.h"
|
32
32
|
#include "pool.h"
|
33
33
|
#include "strmap.h"
|
34
|
+
#include "path.h"
|
34
35
|
|
35
36
|
/* See docs/checkout-internals.md for more information */
|
36
37
|
|
@@ -44,7 +45,7 @@ enum {
|
|
44
45
|
CHECKOUT_ACTION__UPDATE_CONFLICT = 32,
|
45
46
|
CHECKOUT_ACTION__MAX = 32,
|
46
47
|
CHECKOUT_ACTION__REMOVE_AND_UPDATE =
|
47
|
-
(CHECKOUT_ACTION__UPDATE_BLOB | CHECKOUT_ACTION__REMOVE)
|
48
|
+
(CHECKOUT_ACTION__UPDATE_BLOB | CHECKOUT_ACTION__REMOVE)
|
48
49
|
};
|
49
50
|
|
50
51
|
typedef struct {
|
@@ -61,9 +62,9 @@ typedef struct {
|
|
61
62
|
git_vector update_conflicts;
|
62
63
|
git_vector *update_reuc;
|
63
64
|
git_vector *update_names;
|
64
|
-
|
65
|
+
git_str target_path;
|
65
66
|
size_t target_len;
|
66
|
-
|
67
|
+
git_str tmp;
|
67
68
|
unsigned int strategy;
|
68
69
|
int can_symlink;
|
69
70
|
int respect_filemode;
|
@@ -80,11 +81,11 @@ typedef struct {
|
|
80
81
|
const git_index_entry *ours;
|
81
82
|
const git_index_entry *theirs;
|
82
83
|
|
83
|
-
int name_collision:1,
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
unsigned int name_collision:1,
|
85
|
+
directoryfile:1,
|
86
|
+
one_to_two:1,
|
87
|
+
binary:1,
|
88
|
+
submodule:1;
|
88
89
|
} checkout_conflictdata;
|
89
90
|
|
90
91
|
static int checkout_notify(
|
@@ -321,14 +322,14 @@ static int checkout_action_no_wd(
|
|
321
322
|
}
|
322
323
|
|
323
324
|
static int checkout_target_fullpath(
|
324
|
-
|
325
|
+
git_str **out, checkout_data *data, const char *path)
|
325
326
|
{
|
326
|
-
|
327
|
+
git_str_truncate(&data->target_path, data->target_len);
|
327
328
|
|
328
|
-
if (path &&
|
329
|
+
if (path && git_str_puts(&data->target_path, path) < 0)
|
329
330
|
return -1;
|
330
331
|
|
331
|
-
if (
|
332
|
+
if (git_path_validate_str_length(data->repo, &data->target_path) < 0)
|
332
333
|
return -1;
|
333
334
|
|
334
335
|
*out = &data->target_path;
|
@@ -339,7 +340,7 @@ static int checkout_target_fullpath(
|
|
339
340
|
static bool wd_item_is_removable(
|
340
341
|
checkout_data *data, const git_index_entry *wd)
|
341
342
|
{
|
342
|
-
|
343
|
+
git_str *full;
|
343
344
|
|
344
345
|
if (wd->mode != GIT_FILEMODE_TREE)
|
345
346
|
return true;
|
@@ -347,7 +348,7 @@ static bool wd_item_is_removable(
|
|
347
348
|
if (checkout_target_fullpath(&full, data, wd->path) < 0)
|
348
349
|
return false;
|
349
350
|
|
350
|
-
return !full || !
|
351
|
+
return !full || !git_fs_path_contains(full, DOT_GIT);
|
351
352
|
}
|
352
353
|
|
353
354
|
static int checkout_queue_remove(checkout_data *data, const char *path)
|
@@ -423,7 +424,7 @@ static int checkout_action_wd_only(
|
|
423
424
|
|
424
425
|
/* copy the entry for issuing notification callback later */
|
425
426
|
git_index_entry saved_wd = *wd;
|
426
|
-
|
427
|
+
git_str_sets(&data->tmp, wd->path);
|
427
428
|
saved_wd.path = data->tmp.ptr;
|
428
429
|
|
429
430
|
error = git_iterator_advance_over(
|
@@ -476,12 +477,12 @@ static bool submodule_is_config_only(
|
|
476
477
|
|
477
478
|
static bool checkout_is_empty_dir(checkout_data *data, const char *path)
|
478
479
|
{
|
479
|
-
|
480
|
+
git_str *fullpath;
|
480
481
|
|
481
482
|
if (checkout_target_fullpath(&fullpath, data, path) < 0)
|
482
483
|
return false;
|
483
484
|
|
484
|
-
return
|
485
|
+
return git_fs_path_is_empty_dir(fullpath->ptr);
|
485
486
|
}
|
486
487
|
|
487
488
|
static int checkout_action_with_wd(
|
@@ -962,7 +963,7 @@ static int checkout_conflicts_load(checkout_data *data, git_iterator *workdir, g
|
|
962
963
|
{
|
963
964
|
git_index *index;
|
964
965
|
|
965
|
-
/* Only write
|
966
|
+
/* Only write conflicts from sources that have them: indexes. */
|
966
967
|
if ((index = git_iterator_index(data->target)) == NULL)
|
967
968
|
return 0;
|
968
969
|
|
@@ -1201,12 +1202,12 @@ static int checkout_conflicts_mark_directoryfile(
|
|
1201
1202
|
goto done;
|
1202
1203
|
}
|
1203
1204
|
|
1204
|
-
prefixed =
|
1205
|
+
prefixed = git_fs_path_equal_or_prefixed(path, entry->path, NULL);
|
1205
1206
|
|
1206
|
-
if (prefixed ==
|
1207
|
+
if (prefixed == GIT_FS_PATH_EQUAL)
|
1207
1208
|
continue;
|
1208
1209
|
|
1209
|
-
if (prefixed ==
|
1210
|
+
if (prefixed == GIT_FS_PATH_PREFIX)
|
1210
1211
|
conflict->directoryfile = 1;
|
1211
1212
|
|
1212
1213
|
break;
|
@@ -1280,14 +1281,14 @@ static int checkout_verify_paths(
|
|
1280
1281
|
unsigned int flags = GIT_PATH_REJECT_WORKDIR_DEFAULTS;
|
1281
1282
|
|
1282
1283
|
if (action & CHECKOUT_ACTION__REMOVE) {
|
1283
|
-
if (!
|
1284
|
+
if (!git_path_is_valid(repo, delta->old_file.path, delta->old_file.mode, flags)) {
|
1284
1285
|
git_error_set(GIT_ERROR_CHECKOUT, "cannot remove invalid path '%s'", delta->old_file.path);
|
1285
1286
|
return -1;
|
1286
1287
|
}
|
1287
1288
|
}
|
1288
1289
|
|
1289
1290
|
if (action & ~CHECKOUT_ACTION__REMOVE) {
|
1290
|
-
if (!
|
1291
|
+
if (!git_path_is_valid(repo, delta->new_file.path, delta->new_file.mode, flags)) {
|
1291
1292
|
git_error_set(GIT_ERROR_CHECKOUT, "cannot checkout to invalid path '%s'", delta->new_file.path);
|
1292
1293
|
return -1;
|
1293
1294
|
}
|
@@ -1584,7 +1585,7 @@ static int blob_content_to_link(
|
|
1584
1585
|
git_blob *blob,
|
1585
1586
|
const char *path)
|
1586
1587
|
{
|
1587
|
-
|
1588
|
+
git_str linktarget = GIT_STR_INIT;
|
1588
1589
|
int error;
|
1589
1590
|
|
1590
1591
|
if ((error = mkpath2file(data, path, data->opts.dir_mode)) < 0)
|
@@ -1594,10 +1595,10 @@ static int blob_content_to_link(
|
|
1594
1595
|
return error;
|
1595
1596
|
|
1596
1597
|
if (data->can_symlink) {
|
1597
|
-
if ((error = p_symlink(
|
1598
|
+
if ((error = p_symlink(git_str_cstr(&linktarget), path)) < 0)
|
1598
1599
|
git_error_set(GIT_ERROR_OS, "could not create symlink %s", path);
|
1599
1600
|
} else {
|
1600
|
-
error = git_futils_fake_symlink(
|
1601
|
+
error = git_futils_fake_symlink(git_str_cstr(&linktarget), path);
|
1601
1602
|
}
|
1602
1603
|
|
1603
1604
|
if (!error) {
|
@@ -1609,7 +1610,7 @@ static int blob_content_to_link(
|
|
1609
1610
|
st->st_mode = GIT_FILEMODE_LINK;
|
1610
1611
|
}
|
1611
1612
|
|
1612
|
-
|
1613
|
+
git_str_dispose(&linktarget);
|
1613
1614
|
|
1614
1615
|
return error;
|
1615
1616
|
}
|
@@ -1636,7 +1637,7 @@ static int checkout_submodule_update_index(
|
|
1636
1637
|
checkout_data *data,
|
1637
1638
|
const git_diff_file *file)
|
1638
1639
|
{
|
1639
|
-
|
1640
|
+
git_str *fullpath;
|
1640
1641
|
struct stat st;
|
1641
1642
|
|
1642
1643
|
/* update the index unless prevented */
|
@@ -1772,7 +1773,7 @@ static int checkout_blob(
|
|
1772
1773
|
checkout_data *data,
|
1773
1774
|
const git_diff_file *file)
|
1774
1775
|
{
|
1775
|
-
|
1776
|
+
git_str *fullpath;
|
1776
1777
|
struct stat st;
|
1777
1778
|
int error = 0;
|
1778
1779
|
|
@@ -1809,7 +1810,7 @@ static int checkout_remove_the_old(
|
|
1809
1810
|
git_diff_delta *delta;
|
1810
1811
|
const char *str;
|
1811
1812
|
size_t i;
|
1812
|
-
|
1813
|
+
git_str *fullpath;
|
1813
1814
|
uint32_t flg = GIT_RMDIR_EMPTY_PARENTS |
|
1814
1815
|
GIT_RMDIR_REMOVE_FILES | GIT_RMDIR_REMOVE_BLOCKERS;
|
1815
1816
|
|
@@ -1927,40 +1928,40 @@ static int checkout_lookup_head_tree(git_tree **out, git_repository *repo)
|
|
1927
1928
|
|
1928
1929
|
|
1929
1930
|
static int conflict_entry_name(
|
1930
|
-
|
1931
|
+
git_str *out,
|
1931
1932
|
const char *side_name,
|
1932
1933
|
const char *filename)
|
1933
1934
|
{
|
1934
|
-
if (
|
1935
|
-
|
1936
|
-
|
1935
|
+
if (git_str_puts(out, side_name) < 0 ||
|
1936
|
+
git_str_putc(out, ':') < 0 ||
|
1937
|
+
git_str_puts(out, filename) < 0)
|
1937
1938
|
return -1;
|
1938
1939
|
|
1939
1940
|
return 0;
|
1940
1941
|
}
|
1941
1942
|
|
1942
|
-
static int checkout_path_suffixed(
|
1943
|
+
static int checkout_path_suffixed(git_str *path, const char *suffix)
|
1943
1944
|
{
|
1944
1945
|
size_t path_len;
|
1945
1946
|
int i = 0, error = 0;
|
1946
1947
|
|
1947
|
-
if ((error =
|
1948
|
+
if ((error = git_str_putc(path, '~')) < 0 || (error = git_str_puts(path, suffix)) < 0)
|
1948
1949
|
return -1;
|
1949
1950
|
|
1950
|
-
path_len =
|
1951
|
+
path_len = git_str_len(path);
|
1951
1952
|
|
1952
|
-
while (
|
1953
|
-
|
1953
|
+
while (git_fs_path_exists(git_str_cstr(path)) && i < INT_MAX) {
|
1954
|
+
git_str_truncate(path, path_len);
|
1954
1955
|
|
1955
|
-
if ((error =
|
1956
|
-
(error =
|
1956
|
+
if ((error = git_str_putc(path, '_')) < 0 ||
|
1957
|
+
(error = git_str_printf(path, "%d", i)) < 0)
|
1957
1958
|
return error;
|
1958
1959
|
|
1959
1960
|
i++;
|
1960
1961
|
}
|
1961
1962
|
|
1962
1963
|
if (i == INT_MAX) {
|
1963
|
-
|
1964
|
+
git_str_truncate(path, path_len);
|
1964
1965
|
|
1965
1966
|
git_error_set(GIT_ERROR_CHECKOUT, "could not write '%s': working directory file exists", path->ptr);
|
1966
1967
|
return GIT_EEXISTS;
|
@@ -1974,8 +1975,8 @@ static int checkout_write_entry(
|
|
1974
1975
|
checkout_conflictdata *conflict,
|
1975
1976
|
const git_index_entry *side)
|
1976
1977
|
{
|
1977
|
-
const char *hint_path, *suffix;
|
1978
|
-
|
1978
|
+
const char *hint_path = NULL, *suffix;
|
1979
|
+
git_str *fullpath;
|
1979
1980
|
struct stat st;
|
1980
1981
|
int error;
|
1981
1982
|
|
@@ -2025,7 +2026,7 @@ static int checkout_write_entries(
|
|
2025
2026
|
}
|
2026
2027
|
|
2027
2028
|
static int checkout_merge_path(
|
2028
|
-
|
2029
|
+
git_str *out,
|
2029
2030
|
checkout_data *data,
|
2030
2031
|
checkout_conflictdata *conflict,
|
2031
2032
|
git_merge_file_result *result)
|
@@ -2033,8 +2034,8 @@ static int checkout_merge_path(
|
|
2033
2034
|
const char *our_label_raw, *their_label_raw, *suffix;
|
2034
2035
|
int error = 0;
|
2035
2036
|
|
2036
|
-
if ((error =
|
2037
|
-
(error =
|
2037
|
+
if ((error = git_str_joinpath(out, data->opts.target_directory, result->path)) < 0 ||
|
2038
|
+
(error = git_path_validate_str_length(data->repo, out)) < 0)
|
2038
2039
|
return error;
|
2039
2040
|
|
2040
2041
|
/* Most conflicts simply use the filename in the index */
|
@@ -2056,9 +2057,9 @@ static int checkout_write_merge(
|
|
2056
2057
|
checkout_data *data,
|
2057
2058
|
checkout_conflictdata *conflict)
|
2058
2059
|
{
|
2059
|
-
|
2060
|
-
path_suffixed =
|
2061
|
-
in_data =
|
2060
|
+
git_str our_label = GIT_STR_INIT, their_label = GIT_STR_INIT,
|
2061
|
+
path_suffixed = GIT_STR_INIT, path_workdir = GIT_STR_INIT,
|
2062
|
+
in_data = GIT_STR_INIT, out_data = GIT_STR_INIT;
|
2062
2063
|
git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT;
|
2063
2064
|
git_merge_file_result result = {0};
|
2064
2065
|
git_filebuf output = GIT_FILEBUF_INIT;
|
@@ -2069,6 +2070,9 @@ static int checkout_write_merge(
|
|
2069
2070
|
if (data->opts.checkout_strategy & GIT_CHECKOUT_CONFLICT_STYLE_DIFF3)
|
2070
2071
|
opts.flags |= GIT_MERGE_FILE_STYLE_DIFF3;
|
2071
2072
|
|
2073
|
+
if (data->opts.checkout_strategy & GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3)
|
2074
|
+
opts.flags |= GIT_MERGE_FILE_STYLE_ZDIFF3;
|
2075
|
+
|
2072
2076
|
opts.ancestor_label = data->opts.ancestor_label ?
|
2073
2077
|
data->opts.ancestor_label : "ancestor";
|
2074
2078
|
opts.our_label = data->opts.our_label ?
|
@@ -2088,8 +2092,8 @@ static int checkout_write_merge(
|
|
2088
2092
|
&their_label, opts.their_label, conflict->theirs->path)) < 0)
|
2089
2093
|
goto done;
|
2090
2094
|
|
2091
|
-
opts.our_label =
|
2092
|
-
opts.their_label =
|
2095
|
+
opts.our_label = git_str_cstr(&our_label);
|
2096
|
+
opts.their_label = git_str_cstr(&their_label);
|
2093
2097
|
}
|
2094
2098
|
|
2095
2099
|
if ((error = git_merge_file_from_index(&result, data->repo,
|
@@ -2106,7 +2110,7 @@ static int checkout_write_merge(
|
|
2106
2110
|
goto done;
|
2107
2111
|
|
2108
2112
|
if ((data->strategy & GIT_CHECKOUT_UPDATE_ONLY) != 0 &&
|
2109
|
-
(error = checkout_safe_for_update_only(data,
|
2113
|
+
(error = checkout_safe_for_update_only(data, git_str_cstr(&path_workdir), result.mode)) <= 0)
|
2110
2114
|
goto done;
|
2111
2115
|
|
2112
2116
|
if (!data->opts.disable_filters) {
|
@@ -2127,7 +2131,7 @@ static int checkout_write_merge(
|
|
2127
2131
|
}
|
2128
2132
|
|
2129
2133
|
if ((error = mkpath2file(data, path_workdir.ptr, data->opts.dir_mode)) < 0 ||
|
2130
|
-
(error = git_filebuf_open(&output,
|
2134
|
+
(error = git_filebuf_open(&output, git_str_cstr(&path_workdir), GIT_FILEBUF_DO_NOT_BUFFER, result.mode)) < 0 ||
|
2131
2135
|
(error = git_filebuf_write(&output, out_data.ptr, out_data.size)) < 0 ||
|
2132
2136
|
(error = git_filebuf_commit(&output)) < 0)
|
2133
2137
|
goto done;
|
@@ -2135,13 +2139,13 @@ static int checkout_write_merge(
|
|
2135
2139
|
done:
|
2136
2140
|
git_filter_list_free(fl);
|
2137
2141
|
|
2138
|
-
|
2139
|
-
|
2140
|
-
|
2142
|
+
git_str_dispose(&out_data);
|
2143
|
+
git_str_dispose(&our_label);
|
2144
|
+
git_str_dispose(&their_label);
|
2141
2145
|
|
2142
2146
|
git_merge_file_result_free(&result);
|
2143
|
-
|
2144
|
-
|
2147
|
+
git_str_dispose(&path_workdir);
|
2148
|
+
git_str_dispose(&path_suffixed);
|
2145
2149
|
|
2146
2150
|
return error;
|
2147
2151
|
}
|
@@ -2321,8 +2325,8 @@ static void checkout_data_clear(checkout_data *data)
|
|
2321
2325
|
git__free(data->pfx);
|
2322
2326
|
data->pfx = NULL;
|
2323
2327
|
|
2324
|
-
|
2325
|
-
|
2328
|
+
git_str_dispose(&data->target_path);
|
2329
|
+
git_str_dispose(&data->tmp);
|
2326
2330
|
|
2327
2331
|
git_index_free(data->index);
|
2328
2332
|
data->index = NULL;
|
@@ -2337,10 +2341,10 @@ static int validate_target_directory(checkout_data *data)
|
|
2337
2341
|
{
|
2338
2342
|
int error;
|
2339
2343
|
|
2340
|
-
if ((error =
|
2344
|
+
if ((error = git_path_validate_length(data->repo, data->opts.target_directory)) < 0)
|
2341
2345
|
return error;
|
2342
2346
|
|
2343
|
-
if (
|
2347
|
+
if (git_fs_path_isdir(data->opts.target_directory))
|
2344
2348
|
return 0;
|
2345
2349
|
|
2346
2350
|
error = checkout_mkdir(data, data->opts.target_directory, NULL,
|
@@ -2492,6 +2496,8 @@ static int checkout_data_init(
|
|
2492
2496
|
data->opts.checkout_strategy |= GIT_CHECKOUT_CONFLICT_STYLE_MERGE;
|
2493
2497
|
else if (strcmp(conflict_style->value, "diff3") == 0)
|
2494
2498
|
data->opts.checkout_strategy |= GIT_CHECKOUT_CONFLICT_STYLE_DIFF3;
|
2499
|
+
else if (strcmp(conflict_style->value, "zdiff3") == 0)
|
2500
|
+
data->opts.checkout_strategy |= GIT_CHECKOUT_CONFLICT_STYLE_ZDIFF3;
|
2495
2501
|
else {
|
2496
2502
|
git_error_set(GIT_ERROR_CHECKOUT, "unknown style '%s' given for 'merge.conflictstyle'",
|
2497
2503
|
conflict_style->value);
|
@@ -2506,12 +2512,12 @@ static int checkout_data_init(
|
|
2506
2512
|
(error = git_vector_init(&data->removes, 0, git__strcmp_cb)) < 0 ||
|
2507
2513
|
(error = git_vector_init(&data->remove_conflicts, 0, NULL)) < 0 ||
|
2508
2514
|
(error = git_vector_init(&data->update_conflicts, 0, NULL)) < 0 ||
|
2509
|
-
(error =
|
2510
|
-
(error =
|
2515
|
+
(error = git_str_puts(&data->target_path, data->opts.target_directory)) < 0 ||
|
2516
|
+
(error = git_fs_path_to_dir(&data->target_path)) < 0 ||
|
2511
2517
|
(error = git_strmap_new(&data->mkdir_map)) < 0)
|
2512
2518
|
goto cleanup;
|
2513
2519
|
|
2514
|
-
data->target_len =
|
2520
|
+
data->target_len = git_str_len(&data->target_path);
|
2515
2521
|
|
2516
2522
|
git_attr_session__init(&data->attr_session, data->repo);
|
2517
2523
|
|
@@ -2623,7 +2629,7 @@ int git_checkout_iterator(
|
|
2623
2629
|
|
2624
2630
|
if (data.strategy & GIT_CHECKOUT_DRY_RUN)
|
2625
2631
|
goto cleanup;
|
2626
|
-
|
2632
|
+
|
2627
2633
|
data.total_steps = counts[CHECKOUT_ACTION__REMOVE] +
|
2628
2634
|
counts[CHECKOUT_ACTION__REMOVE_CONFLICT] +
|
2629
2635
|
counts[CHECKOUT_ACTION__UPDATE_BLOB] +
|
@@ -26,10 +26,10 @@ static int write_cherrypick_head(
|
|
26
26
|
const char *commit_oidstr)
|
27
27
|
{
|
28
28
|
git_filebuf file = GIT_FILEBUF_INIT;
|
29
|
-
|
29
|
+
git_str file_path = GIT_STR_INIT;
|
30
30
|
int error = 0;
|
31
31
|
|
32
|
-
if ((error =
|
32
|
+
if ((error = git_str_joinpath(&file_path, repo->gitdir, GIT_CHERRYPICK_HEAD_FILE)) >= 0 &&
|
33
33
|
(error = git_filebuf_open(&file, file_path.ptr, GIT_FILEBUF_CREATE_LEADING_DIRS, GIT_CHERRYPICK_FILE_MODE)) >= 0 &&
|
34
34
|
(error = git_filebuf_printf(&file, "%s\n", commit_oidstr)) >= 0)
|
35
35
|
error = git_filebuf_commit(&file);
|
@@ -37,7 +37,7 @@ static int write_cherrypick_head(
|
|
37
37
|
if (error < 0)
|
38
38
|
git_filebuf_cleanup(&file);
|
39
39
|
|
40
|
-
|
40
|
+
git_str_dispose(&file_path);
|
41
41
|
|
42
42
|
return error;
|
43
43
|
}
|
@@ -47,10 +47,10 @@ static int write_merge_msg(
|
|
47
47
|
const char *commit_msg)
|
48
48
|
{
|
49
49
|
git_filebuf file = GIT_FILEBUF_INIT;
|
50
|
-
|
50
|
+
git_str file_path = GIT_STR_INIT;
|
51
51
|
int error = 0;
|
52
52
|
|
53
|
-
if ((error =
|
53
|
+
if ((error = git_str_joinpath(&file_path, repo->gitdir, GIT_MERGE_MSG_FILE)) < 0 ||
|
54
54
|
(error = git_filebuf_open(&file, file_path.ptr, GIT_FILEBUF_CREATE_LEADING_DIRS, GIT_CHERRYPICK_FILE_MODE)) < 0 ||
|
55
55
|
(error = git_filebuf_printf(&file, "%s", commit_msg)) < 0)
|
56
56
|
goto cleanup;
|
@@ -61,7 +61,7 @@ cleanup:
|
|
61
61
|
if (error < 0)
|
62
62
|
git_filebuf_cleanup(&file);
|
63
63
|
|
64
|
-
|
64
|
+
git_str_dispose(&file_path);
|
65
65
|
|
66
66
|
return error;
|
67
67
|
}
|
@@ -175,7 +175,7 @@ int git_cherrypick(
|
|
175
175
|
git_commit *our_commit = NULL;
|
176
176
|
char commit_oidstr[GIT_OID_HEXSZ + 1];
|
177
177
|
const char *commit_msg, *commit_summary;
|
178
|
-
|
178
|
+
git_str their_label = GIT_STR_INIT;
|
179
179
|
git_index *index = NULL;
|
180
180
|
git_indexwriter indexwriter = GIT_INDEXWRITER_INIT;
|
181
181
|
int error = 0;
|
@@ -197,8 +197,8 @@ int git_cherrypick(
|
|
197
197
|
git_oid_nfmt(commit_oidstr, sizeof(commit_oidstr), git_commit_id(commit));
|
198
198
|
|
199
199
|
if ((error = write_merge_msg(repo, commit_msg)) < 0 ||
|
200
|
-
(error =
|
201
|
-
(error = cherrypick_normalize_opts(repo, &opts, given_opts,
|
200
|
+
(error = git_str_printf(&their_label, "%.7s... %s", commit_oidstr, commit_summary)) < 0 ||
|
201
|
+
(error = cherrypick_normalize_opts(repo, &opts, given_opts, git_str_cstr(&their_label))) < 0 ||
|
202
202
|
(error = git_indexwriter_init_for_operation(&indexwriter, repo, &opts.checkout_opts.checkout_strategy)) < 0 ||
|
203
203
|
(error = write_cherrypick_head(repo, commit_oidstr)) < 0 ||
|
204
204
|
(error = git_repository_head(&our_ref, repo)) < 0 ||
|
@@ -220,7 +220,7 @@ done:
|
|
220
220
|
git_index_free(index);
|
221
221
|
git_commit_free(our_commit);
|
222
222
|
git_reference_free(our_ref);
|
223
|
-
|
223
|
+
git_str_dispose(&their_label);
|
224
224
|
|
225
225
|
return error;
|
226
226
|
}
|