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,7 +11,7 @@
|
|
|
11
11
|
#include "git2/sys/config.h"
|
|
12
12
|
|
|
13
13
|
#include "array.h"
|
|
14
|
-
#include "
|
|
14
|
+
#include "str.h"
|
|
15
15
|
#include "config_backend.h"
|
|
16
16
|
#include "config_entries.h"
|
|
17
17
|
#include "config_parse.h"
|
|
@@ -19,13 +19,14 @@
|
|
|
19
19
|
#include "regexp.h"
|
|
20
20
|
#include "sysdir.h"
|
|
21
21
|
#include "wildmatch.h"
|
|
22
|
+
#include "hash.h"
|
|
22
23
|
|
|
23
24
|
/* Max depth for [include] directives */
|
|
24
25
|
#define MAX_INCLUDE_DEPTH 10
|
|
25
26
|
|
|
26
27
|
typedef struct config_file {
|
|
27
28
|
git_futils_filestamp stamp;
|
|
28
|
-
|
|
29
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
29
30
|
char *path;
|
|
30
31
|
git_array_t(struct config_file) includes;
|
|
31
32
|
} config_file;
|
|
@@ -41,7 +42,7 @@ typedef struct {
|
|
|
41
42
|
|
|
42
43
|
bool locked;
|
|
43
44
|
git_filebuf locked_buf;
|
|
44
|
-
|
|
45
|
+
git_str locked_content;
|
|
45
46
|
|
|
46
47
|
config_file file;
|
|
47
48
|
} config_file_backend;
|
|
@@ -108,7 +109,7 @@ static int config_file_open(git_config_backend *cfg, git_config_level_t level, c
|
|
|
108
109
|
if ((res = git_config_entries_new(&b->entries)) < 0)
|
|
109
110
|
return res;
|
|
110
111
|
|
|
111
|
-
if (!
|
|
112
|
+
if (!git_fs_path_exists(b->file.path))
|
|
112
113
|
return 0;
|
|
113
114
|
|
|
114
115
|
/*
|
|
@@ -131,8 +132,8 @@ static int config_file_open(git_config_backend *cfg, git_config_level_t level, c
|
|
|
131
132
|
static int config_file_is_modified(int *modified, config_file *file)
|
|
132
133
|
{
|
|
133
134
|
config_file *include;
|
|
134
|
-
|
|
135
|
-
|
|
135
|
+
git_str buf = GIT_STR_INIT;
|
|
136
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
|
136
137
|
uint32_t i;
|
|
137
138
|
int error = 0;
|
|
138
139
|
|
|
@@ -144,10 +145,10 @@ static int config_file_is_modified(int *modified, config_file *file)
|
|
|
144
145
|
if ((error = git_futils_readbuffer(&buf, file->path)) < 0)
|
|
145
146
|
goto out;
|
|
146
147
|
|
|
147
|
-
if ((error = git_hash_buf(
|
|
148
|
+
if ((error = git_hash_buf(checksum, buf.ptr, buf.size, GIT_HASH_ALGORITHM_SHA1)) < 0)
|
|
148
149
|
goto out;
|
|
149
150
|
|
|
150
|
-
if (
|
|
151
|
+
if (memcmp(checksum, file->checksum, GIT_HASH_SHA1_SIZE) != 0) {
|
|
151
152
|
*modified = 1;
|
|
152
153
|
goto out;
|
|
153
154
|
}
|
|
@@ -159,7 +160,7 @@ check_includes:
|
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
out:
|
|
162
|
-
|
|
163
|
+
git_str_dispose(&buf);
|
|
163
164
|
|
|
164
165
|
return error;
|
|
165
166
|
}
|
|
@@ -486,7 +487,7 @@ static int config_file_unlock(git_config_backend *_cfg, int success)
|
|
|
486
487
|
}
|
|
487
488
|
|
|
488
489
|
git_filebuf_cleanup(&cfg->locked_buf);
|
|
489
|
-
|
|
490
|
+
git_str_dispose(&cfg->locked_content);
|
|
490
491
|
cfg->locked = false;
|
|
491
492
|
|
|
492
493
|
return error;
|
|
@@ -523,19 +524,19 @@ int git_config_backend_from_file(git_config_backend **out, const char *path)
|
|
|
523
524
|
return 0;
|
|
524
525
|
}
|
|
525
526
|
|
|
526
|
-
static int included_path(
|
|
527
|
+
static int included_path(git_str *out, const char *dir, const char *path)
|
|
527
528
|
{
|
|
528
529
|
/* From the user's home */
|
|
529
530
|
if (path[0] == '~' && path[1] == '/')
|
|
530
531
|
return git_sysdir_expand_global_file(out, &path[1]);
|
|
531
532
|
|
|
532
|
-
return
|
|
533
|
+
return git_fs_path_join_unrooted(out, path, dir, NULL);
|
|
533
534
|
}
|
|
534
535
|
|
|
535
536
|
/* Escape the values to write them to the file */
|
|
536
537
|
static char *escape_value(const char *ptr)
|
|
537
538
|
{
|
|
538
|
-
|
|
539
|
+
git_str buf;
|
|
539
540
|
size_t len;
|
|
540
541
|
const char *esc;
|
|
541
542
|
|
|
@@ -545,39 +546,39 @@ static char *escape_value(const char *ptr)
|
|
|
545
546
|
if (!len)
|
|
546
547
|
return git__calloc(1, sizeof(char));
|
|
547
548
|
|
|
548
|
-
if (
|
|
549
|
+
if (git_str_init(&buf, len) < 0)
|
|
549
550
|
return NULL;
|
|
550
551
|
|
|
551
552
|
while (*ptr != '\0') {
|
|
552
553
|
if ((esc = strchr(git_config_escaped, *ptr)) != NULL) {
|
|
553
|
-
|
|
554
|
-
|
|
554
|
+
git_str_putc(&buf, '\\');
|
|
555
|
+
git_str_putc(&buf, git_config_escapes[esc - git_config_escaped]);
|
|
555
556
|
} else {
|
|
556
|
-
|
|
557
|
+
git_str_putc(&buf, *ptr);
|
|
557
558
|
}
|
|
558
559
|
ptr++;
|
|
559
560
|
}
|
|
560
561
|
|
|
561
|
-
if (
|
|
562
|
+
if (git_str_oom(&buf))
|
|
562
563
|
return NULL;
|
|
563
564
|
|
|
564
|
-
return
|
|
565
|
+
return git_str_detach(&buf);
|
|
565
566
|
}
|
|
566
567
|
|
|
567
568
|
static int parse_include(config_file_parse_data *parse_data, const char *file)
|
|
568
569
|
{
|
|
569
570
|
config_file *include;
|
|
570
|
-
|
|
571
|
+
git_str path = GIT_STR_INIT;
|
|
571
572
|
char *dir;
|
|
572
573
|
int result;
|
|
573
574
|
|
|
574
575
|
if (!file)
|
|
575
576
|
return 0;
|
|
576
577
|
|
|
577
|
-
if ((result =
|
|
578
|
+
if ((result = git_fs_path_dirname_r(&path, parse_data->file->path)) < 0)
|
|
578
579
|
return result;
|
|
579
580
|
|
|
580
|
-
dir =
|
|
581
|
+
dir = git_str_detach(&path);
|
|
581
582
|
result = included_path(&path, dir, file);
|
|
582
583
|
git__free(dir);
|
|
583
584
|
|
|
@@ -588,7 +589,7 @@ static int parse_include(config_file_parse_data *parse_data, const char *file)
|
|
|
588
589
|
GIT_ERROR_CHECK_ALLOC(include);
|
|
589
590
|
memset(include, 0, sizeof(*include));
|
|
590
591
|
git_array_init(include->includes);
|
|
591
|
-
include->path =
|
|
592
|
+
include->path = git_str_detach(&path);
|
|
592
593
|
|
|
593
594
|
result = config_file_read(parse_data->entries, parse_data->repo, include,
|
|
594
595
|
parse_data->level, parse_data->depth+1);
|
|
@@ -608,38 +609,38 @@ static int do_match_gitdir(
|
|
|
608
609
|
const char *condition,
|
|
609
610
|
bool case_insensitive)
|
|
610
611
|
{
|
|
611
|
-
|
|
612
|
+
git_str pattern = GIT_STR_INIT, gitdir = GIT_STR_INIT;
|
|
612
613
|
int error;
|
|
613
614
|
|
|
614
|
-
if (condition[0] == '.' &&
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
} else if (condition[0] == '~' &&
|
|
615
|
+
if (condition[0] == '.' && git_fs_path_is_dirsep(condition[1])) {
|
|
616
|
+
git_fs_path_dirname_r(&pattern, cfg_file);
|
|
617
|
+
git_str_joinpath(&pattern, pattern.ptr, condition + 2);
|
|
618
|
+
} else if (condition[0] == '~' && git_fs_path_is_dirsep(condition[1]))
|
|
618
619
|
git_sysdir_expand_global_file(&pattern, condition + 1);
|
|
619
|
-
else if (!
|
|
620
|
-
|
|
620
|
+
else if (!git_fs_path_is_absolute(condition))
|
|
621
|
+
git_str_joinpath(&pattern, "**", condition);
|
|
621
622
|
else
|
|
622
|
-
|
|
623
|
+
git_str_sets(&pattern, condition);
|
|
623
624
|
|
|
624
|
-
if (
|
|
625
|
-
|
|
625
|
+
if (git_fs_path_is_dirsep(condition[strlen(condition) - 1]))
|
|
626
|
+
git_str_puts(&pattern, "**");
|
|
626
627
|
|
|
627
|
-
if (
|
|
628
|
+
if (git_str_oom(&pattern)) {
|
|
628
629
|
error = -1;
|
|
629
630
|
goto out;
|
|
630
631
|
}
|
|
631
632
|
|
|
632
|
-
if ((error =
|
|
633
|
+
if ((error = git_repository__item_path(&gitdir, repo, GIT_REPOSITORY_ITEM_GITDIR)) < 0)
|
|
633
634
|
goto out;
|
|
634
635
|
|
|
635
|
-
if (
|
|
636
|
-
|
|
636
|
+
if (git_fs_path_is_dirsep(gitdir.ptr[gitdir.size - 1]))
|
|
637
|
+
git_str_truncate(&gitdir, gitdir.size - 1);
|
|
637
638
|
|
|
638
639
|
*matches = wildmatch(pattern.ptr, gitdir.ptr,
|
|
639
640
|
WM_PATHNAME | (case_insensitive ? WM_CASEFOLD : 0)) == WM_MATCH;
|
|
640
641
|
out:
|
|
641
|
-
|
|
642
|
-
|
|
642
|
+
git_str_dispose(&pattern);
|
|
643
|
+
git_str_dispose(&gitdir);
|
|
643
644
|
return error;
|
|
644
645
|
}
|
|
645
646
|
|
|
@@ -667,7 +668,7 @@ static int conditional_match_onbranch(
|
|
|
667
668
|
const char *cfg_file,
|
|
668
669
|
const char *condition)
|
|
669
670
|
{
|
|
670
|
-
|
|
671
|
+
git_str reference = GIT_STR_INIT, buf = GIT_STR_INIT;
|
|
671
672
|
int error;
|
|
672
673
|
|
|
673
674
|
GIT_UNUSED(cfg_file);
|
|
@@ -680,33 +681,33 @@ static int conditional_match_onbranch(
|
|
|
680
681
|
* an endless recursion.
|
|
681
682
|
*/
|
|
682
683
|
|
|
683
|
-
if ((error =
|
|
684
|
+
if ((error = git_str_joinpath(&buf, git_repository_path(repo), GIT_HEAD_FILE)) < 0 ||
|
|
684
685
|
(error = git_futils_readbuffer(&reference, buf.ptr)) < 0)
|
|
685
686
|
goto out;
|
|
686
|
-
|
|
687
|
+
git_str_rtrim(&reference);
|
|
687
688
|
|
|
688
689
|
if (git__strncmp(reference.ptr, GIT_SYMREF, strlen(GIT_SYMREF)))
|
|
689
690
|
goto out;
|
|
690
|
-
|
|
691
|
+
git_str_consume(&reference, reference.ptr + strlen(GIT_SYMREF));
|
|
691
692
|
|
|
692
693
|
if (git__strncmp(reference.ptr, GIT_REFS_HEADS_DIR, strlen(GIT_REFS_HEADS_DIR)))
|
|
693
694
|
goto out;
|
|
694
|
-
|
|
695
|
+
git_str_consume(&reference, reference.ptr + strlen(GIT_REFS_HEADS_DIR));
|
|
695
696
|
|
|
696
697
|
/*
|
|
697
698
|
* If the condition ends with a '/', then we should treat it as if
|
|
698
699
|
* it had '**' appended.
|
|
699
700
|
*/
|
|
700
|
-
if ((error =
|
|
701
|
+
if ((error = git_str_sets(&buf, condition)) < 0)
|
|
701
702
|
goto out;
|
|
702
|
-
if (
|
|
703
|
-
(error =
|
|
703
|
+
if (git_fs_path_is_dirsep(condition[strlen(condition) - 1]) &&
|
|
704
|
+
(error = git_str_puts(&buf, "**")) < 0)
|
|
704
705
|
goto out;
|
|
705
706
|
|
|
706
707
|
*matches = wildmatch(buf.ptr, reference.ptr, WM_PATHNAME) == WM_MATCH;
|
|
707
708
|
out:
|
|
708
|
-
|
|
709
|
-
|
|
709
|
+
git_str_dispose(&reference);
|
|
710
|
+
git_str_dispose(&buf);
|
|
710
711
|
|
|
711
712
|
return error;
|
|
712
713
|
|
|
@@ -724,14 +725,25 @@ static const struct {
|
|
|
724
725
|
static int parse_conditional_include(config_file_parse_data *parse_data, const char *section, const char *file)
|
|
725
726
|
{
|
|
726
727
|
char *condition;
|
|
727
|
-
size_t i;
|
|
728
|
+
size_t section_len, i;
|
|
728
729
|
int error = 0, matches;
|
|
729
730
|
|
|
730
731
|
if (!parse_data->repo || !file)
|
|
731
732
|
return 0;
|
|
732
733
|
|
|
733
|
-
|
|
734
|
-
|
|
734
|
+
section_len = strlen(section);
|
|
735
|
+
|
|
736
|
+
/*
|
|
737
|
+
* We checked that the string starts with `includeIf.` and ends
|
|
738
|
+
* in `.path` to get here. Make sure it consists of more.
|
|
739
|
+
*/
|
|
740
|
+
if (section_len < CONST_STRLEN("includeIf.") + CONST_STRLEN(".path"))
|
|
741
|
+
return 0;
|
|
742
|
+
|
|
743
|
+
condition = git__substrdup(section + CONST_STRLEN("includeIf."),
|
|
744
|
+
section_len - CONST_STRLEN("includeIf.") - CONST_STRLEN(".path"));
|
|
745
|
+
|
|
746
|
+
GIT_ERROR_CHECK_ALLOC(condition);
|
|
735
747
|
|
|
736
748
|
for (i = 0; i < ARRAY_SIZE(conditions); i++) {
|
|
737
749
|
if (git__prefixcmp(condition, conditions[i].prefix))
|
|
@@ -763,7 +775,7 @@ static int read_on_variable(
|
|
|
763
775
|
void *data)
|
|
764
776
|
{
|
|
765
777
|
config_file_parse_data *parse_data = (config_file_parse_data *)data;
|
|
766
|
-
|
|
778
|
+
git_str buf = GIT_STR_INIT;
|
|
767
779
|
git_config_entry *entry;
|
|
768
780
|
const char *c;
|
|
769
781
|
int result = 0;
|
|
@@ -777,19 +789,19 @@ static int read_on_variable(
|
|
|
777
789
|
* here. Git appears to warn in most cases if it sees
|
|
778
790
|
* un-namespaced config options.
|
|
779
791
|
*/
|
|
780
|
-
|
|
781
|
-
|
|
792
|
+
git_str_puts(&buf, current_section);
|
|
793
|
+
git_str_putc(&buf, '.');
|
|
782
794
|
}
|
|
783
795
|
|
|
784
796
|
for (c = var_name; *c; c++)
|
|
785
|
-
|
|
797
|
+
git_str_putc(&buf, git__tolower(*c));
|
|
786
798
|
|
|
787
|
-
if (
|
|
799
|
+
if (git_str_oom(&buf))
|
|
788
800
|
return -1;
|
|
789
801
|
|
|
790
802
|
entry = git__calloc(1, sizeof(git_config_entry));
|
|
791
803
|
GIT_ERROR_CHECK_ALLOC(entry);
|
|
792
|
-
entry->name =
|
|
804
|
+
entry->name = git_str_detach(&buf);
|
|
793
805
|
entry->value = var_value ? git__strdup(var_value) : NULL;
|
|
794
806
|
entry->level = parse_data->level;
|
|
795
807
|
entry->include_depth = parse_data->depth;
|
|
@@ -856,12 +868,12 @@ static int config_file_read(
|
|
|
856
868
|
git_config_level_t level,
|
|
857
869
|
int depth)
|
|
858
870
|
{
|
|
859
|
-
|
|
871
|
+
git_str contents = GIT_STR_INIT;
|
|
860
872
|
struct stat st;
|
|
861
873
|
int error;
|
|
862
874
|
|
|
863
875
|
if (p_stat(file->path, &st) < 0) {
|
|
864
|
-
error =
|
|
876
|
+
error = git_fs_path_set_error(errno, file->path, "stat");
|
|
865
877
|
goto out;
|
|
866
878
|
}
|
|
867
879
|
|
|
@@ -869,7 +881,7 @@ static int config_file_read(
|
|
|
869
881
|
goto out;
|
|
870
882
|
|
|
871
883
|
git_futils_filestamp_set_from_stat(&file->stamp, &st);
|
|
872
|
-
if ((error = git_hash_buf(
|
|
884
|
+
if ((error = git_hash_buf(file->checksum, contents.ptr, contents.size, GIT_HASH_ALGORITHM_SHA1)) < 0)
|
|
873
885
|
goto out;
|
|
874
886
|
|
|
875
887
|
if ((error = config_file_read_buffer(entries, repo, file, level, depth,
|
|
@@ -877,36 +889,36 @@ static int config_file_read(
|
|
|
877
889
|
goto out;
|
|
878
890
|
|
|
879
891
|
out:
|
|
880
|
-
|
|
892
|
+
git_str_dispose(&contents);
|
|
881
893
|
return error;
|
|
882
894
|
}
|
|
883
895
|
|
|
884
|
-
static int write_section(
|
|
896
|
+
static int write_section(git_str *fbuf, const char *key)
|
|
885
897
|
{
|
|
886
898
|
int result;
|
|
887
899
|
const char *dot;
|
|
888
|
-
|
|
900
|
+
git_str buf = GIT_STR_INIT;
|
|
889
901
|
|
|
890
902
|
/* All of this just for [section "subsection"] */
|
|
891
903
|
dot = strchr(key, '.');
|
|
892
|
-
|
|
904
|
+
git_str_putc(&buf, '[');
|
|
893
905
|
if (dot == NULL) {
|
|
894
|
-
|
|
906
|
+
git_str_puts(&buf, key);
|
|
895
907
|
} else {
|
|
896
908
|
char *escaped;
|
|
897
|
-
|
|
909
|
+
git_str_put(&buf, key, dot - key);
|
|
898
910
|
escaped = escape_value(dot + 1);
|
|
899
911
|
GIT_ERROR_CHECK_ALLOC(escaped);
|
|
900
|
-
|
|
912
|
+
git_str_printf(&buf, " \"%s\"", escaped);
|
|
901
913
|
git__free(escaped);
|
|
902
914
|
}
|
|
903
|
-
|
|
915
|
+
git_str_puts(&buf, "]\n");
|
|
904
916
|
|
|
905
|
-
if (
|
|
917
|
+
if (git_str_oom(&buf))
|
|
906
918
|
return -1;
|
|
907
919
|
|
|
908
|
-
result =
|
|
909
|
-
|
|
920
|
+
result = git_str_put(fbuf, git_str_cstr(&buf), buf.size);
|
|
921
|
+
git_str_dispose(&buf);
|
|
910
922
|
|
|
911
923
|
return result;
|
|
912
924
|
}
|
|
@@ -930,8 +942,8 @@ static const char *quotes_for_value(const char *value)
|
|
|
930
942
|
}
|
|
931
943
|
|
|
932
944
|
struct write_data {
|
|
933
|
-
|
|
934
|
-
|
|
945
|
+
git_str *buf;
|
|
946
|
+
git_str buffered_comment;
|
|
935
947
|
unsigned int in_section : 1,
|
|
936
948
|
preg_replaced : 1;
|
|
937
949
|
const char *orig_section;
|
|
@@ -942,12 +954,12 @@ struct write_data {
|
|
|
942
954
|
const char *value;
|
|
943
955
|
};
|
|
944
956
|
|
|
945
|
-
static int write_line_to(
|
|
957
|
+
static int write_line_to(git_str *buf, const char *line, size_t line_len)
|
|
946
958
|
{
|
|
947
|
-
int result =
|
|
959
|
+
int result = git_str_put(buf, line, line_len);
|
|
948
960
|
|
|
949
961
|
if (!result && line_len && line[line_len-1] != '\n')
|
|
950
|
-
result =
|
|
962
|
+
result = git_str_printf(buf, "\n");
|
|
951
963
|
|
|
952
964
|
return result;
|
|
953
965
|
}
|
|
@@ -963,7 +975,7 @@ static int write_value(struct write_data *write_data)
|
|
|
963
975
|
int result;
|
|
964
976
|
|
|
965
977
|
q = quotes_for_value(write_data->value);
|
|
966
|
-
result =
|
|
978
|
+
result = git_str_printf(write_data->buf,
|
|
967
979
|
"\t%s = %s%s%s\n", write_data->orig_name, q, write_data->value, q);
|
|
968
980
|
|
|
969
981
|
/* If we are updating a single name/value, we're done. Setting `value`
|
|
@@ -1002,8 +1014,8 @@ static int write_on_section(
|
|
|
1002
1014
|
* If there were comments just before this section, dump them as well.
|
|
1003
1015
|
*/
|
|
1004
1016
|
if (!result) {
|
|
1005
|
-
result =
|
|
1006
|
-
|
|
1017
|
+
result = git_str_put(write_data->buf, write_data->buffered_comment.ptr, write_data->buffered_comment.size);
|
|
1018
|
+
git_str_clear(&write_data->buffered_comment);
|
|
1007
1019
|
}
|
|
1008
1020
|
|
|
1009
1021
|
if (!result)
|
|
@@ -1031,10 +1043,10 @@ static int write_on_variable(
|
|
|
1031
1043
|
/*
|
|
1032
1044
|
* If there were comments just before this variable, let's dump them as well.
|
|
1033
1045
|
*/
|
|
1034
|
-
if ((error =
|
|
1046
|
+
if ((error = git_str_put(write_data->buf, write_data->buffered_comment.ptr, write_data->buffered_comment.size)) < 0)
|
|
1035
1047
|
return error;
|
|
1036
1048
|
|
|
1037
|
-
|
|
1049
|
+
git_str_clear(&write_data->buffered_comment);
|
|
1038
1050
|
|
|
1039
1051
|
/* See if we are to update this name/value pair; first examine name */
|
|
1040
1052
|
if (write_data->in_section &&
|
|
@@ -1081,7 +1093,7 @@ static int write_on_eof(
|
|
|
1081
1093
|
/*
|
|
1082
1094
|
* If we've buffered comments when reaching EOF, make sure to dump them.
|
|
1083
1095
|
*/
|
|
1084
|
-
if ((result =
|
|
1096
|
+
if ((result = git_str_put(write_data->buf, write_data->buffered_comment.ptr, write_data->buffered_comment.size)) < 0)
|
|
1085
1097
|
return result;
|
|
1086
1098
|
|
|
1087
1099
|
/* If we are at the EOF and have not written our value (again, for a
|
|
@@ -1108,7 +1120,7 @@ static int config_file_write(config_file_backend *cfg, const char *orig_key, con
|
|
|
1108
1120
|
|
|
1109
1121
|
{
|
|
1110
1122
|
char *orig_section = NULL, *section = NULL, *orig_name, *name, *ldot;
|
|
1111
|
-
|
|
1123
|
+
git_str buf = GIT_STR_INIT, contents = GIT_STR_INIT;
|
|
1112
1124
|
git_config_parser parser = GIT_CONFIG_PARSER_INIT;
|
|
1113
1125
|
git_filebuf file = GIT_FILEBUF_INIT;
|
|
1114
1126
|
struct write_data write_data;
|
|
@@ -1117,7 +1129,7 @@ static int config_file_write(config_file_backend *cfg, const char *orig_key, con
|
|
|
1117
1129
|
memset(&write_data, 0, sizeof(write_data));
|
|
1118
1130
|
|
|
1119
1131
|
if (cfg->locked) {
|
|
1120
|
-
error =
|
|
1132
|
+
error = git_str_puts(&contents, git_str_cstr(&cfg->locked_content) == NULL ? "" : git_str_cstr(&cfg->locked_content));
|
|
1121
1133
|
} else {
|
|
1122
1134
|
if ((error = git_filebuf_open(&file, cfg->file.path, GIT_FILEBUF_HASH_CONTENTS,
|
|
1123
1135
|
GIT_CONFIG_FILE_MODE)) < 0)
|
|
@@ -1157,10 +1169,10 @@ static int config_file_write(config_file_backend *cfg, const char *orig_key, con
|
|
|
1157
1169
|
if (cfg->locked) {
|
|
1158
1170
|
size_t len = buf.asize;
|
|
1159
1171
|
/* Update our copy with the modified contents */
|
|
1160
|
-
|
|
1161
|
-
|
|
1172
|
+
git_str_dispose(&cfg->locked_content);
|
|
1173
|
+
git_str_attach(&cfg->locked_content, git_str_detach(&buf), len);
|
|
1162
1174
|
} else {
|
|
1163
|
-
git_filebuf_write(&file,
|
|
1175
|
+
git_filebuf_write(&file, git_str_cstr(&buf), git_str_len(&buf));
|
|
1164
1176
|
|
|
1165
1177
|
if ((error = git_filebuf_commit(&file)) < 0)
|
|
1166
1178
|
goto done;
|
|
@@ -1172,9 +1184,9 @@ static int config_file_write(config_file_backend *cfg, const char *orig_key, con
|
|
|
1172
1184
|
done:
|
|
1173
1185
|
git__free(section);
|
|
1174
1186
|
git__free(orig_section);
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1187
|
+
git_str_dispose(&write_data.buffered_comment);
|
|
1188
|
+
git_str_dispose(&buf);
|
|
1189
|
+
git_str_dispose(&contents);
|
|
1178
1190
|
git_filebuf_cleanup(&file);
|
|
1179
1191
|
git_config_parser_dispose(&parser);
|
|
1180
1192
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
typedef struct {
|
|
15
15
|
git_config_backend parent;
|
|
16
16
|
git_config_entries *entries;
|
|
17
|
-
|
|
17
|
+
git_str cfg;
|
|
18
18
|
} config_memory_backend;
|
|
19
19
|
|
|
20
20
|
typedef struct {
|
|
@@ -38,7 +38,7 @@ static int read_variable_cb(
|
|
|
38
38
|
void *payload)
|
|
39
39
|
{
|
|
40
40
|
config_memory_parse_data *parse_data = (config_memory_parse_data *) payload;
|
|
41
|
-
|
|
41
|
+
git_str buf = GIT_STR_INIT;
|
|
42
42
|
git_config_entry *entry;
|
|
43
43
|
const char *c;
|
|
44
44
|
int result;
|
|
@@ -52,19 +52,19 @@ static int read_variable_cb(
|
|
|
52
52
|
* here. Git appears to warn in most cases if it sees
|
|
53
53
|
* un-namespaced config options.
|
|
54
54
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
git_str_puts(&buf, current_section);
|
|
56
|
+
git_str_putc(&buf, '.');
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
for (c = var_name; *c; c++)
|
|
60
|
-
|
|
60
|
+
git_str_putc(&buf, git__tolower(*c));
|
|
61
61
|
|
|
62
|
-
if (
|
|
62
|
+
if (git_str_oom(&buf))
|
|
63
63
|
return -1;
|
|
64
64
|
|
|
65
65
|
entry = git__calloc(1, sizeof(git_config_entry));
|
|
66
66
|
GIT_ERROR_CHECK_ALLOC(entry);
|
|
67
|
-
entry->name =
|
|
67
|
+
entry->name = git_str_detach(&buf);
|
|
68
68
|
entry->value = var_value ? git__strdup(var_value) : NULL;
|
|
69
69
|
entry->level = parse_data->level;
|
|
70
70
|
entry->include_depth = 0;
|
|
@@ -178,7 +178,7 @@ static void config_memory_free(git_config_backend *_backend)
|
|
|
178
178
|
return;
|
|
179
179
|
|
|
180
180
|
git_config_entries_free(backend->entries);
|
|
181
|
-
|
|
181
|
+
git_str_dispose(&backend->cfg);
|
|
182
182
|
git__free(backend);
|
|
183
183
|
}
|
|
184
184
|
|
|
@@ -194,7 +194,7 @@ int git_config_backend_from_string(git_config_backend **out, const char *cfg, si
|
|
|
194
194
|
return -1;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
if (
|
|
197
|
+
if (git_str_set(&backend->cfg, cfg, len) < 0) {
|
|
198
198
|
git_config_entries_free(backend->entries);
|
|
199
199
|
git__free(backend);
|
|
200
200
|
return -1;
|