rugged 1.7.2 → 1.9.0
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/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +120 -63
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +99 -14
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +23 -24
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +94 -18
- data/vendor/libgit2/include/git2/repository.h +57 -21
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +43 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +24 -3
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +130 -44
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +186 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +92 -0
- data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +389 -298
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +99 -88
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +68 -90
- data/vendor/libgit2/src/libgit2/index.h +2 -2
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +34 -38
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +42 -37
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/midx.c +28 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +5 -4
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +32 -5
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +30 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +26 -7
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +121 -61
- data/vendor/libgit2/src/libgit2/repository.c +231 -51
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +4 -1
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/fs_path.c +15 -4
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +13 -7
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +2 -2
- data/vendor/libgit2/src/util/util.h +4 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- metadata +45 -28
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -293
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
|
@@ -0,0 +1,285 @@
|
|
|
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 "config_list.h"
|
|
9
|
+
#include "hashmap_str.h"
|
|
10
|
+
|
|
11
|
+
typedef struct config_entry_list {
|
|
12
|
+
struct config_entry_list *next;
|
|
13
|
+
struct config_entry_list *last;
|
|
14
|
+
git_config_list_entry *entry;
|
|
15
|
+
} config_entry_list;
|
|
16
|
+
|
|
17
|
+
typedef struct {
|
|
18
|
+
git_config_list_entry *entry;
|
|
19
|
+
bool multivar;
|
|
20
|
+
} config_entry_map_head;
|
|
21
|
+
|
|
22
|
+
typedef struct config_list_iterator {
|
|
23
|
+
git_config_iterator parent;
|
|
24
|
+
git_config_list *list;
|
|
25
|
+
config_entry_list *head;
|
|
26
|
+
} config_list_iterator;
|
|
27
|
+
|
|
28
|
+
GIT_HASHMAP_STR_SETUP(git_config_list_pathmap, char *);
|
|
29
|
+
GIT_HASHMAP_STR_SETUP(git_config_list_headmap, config_entry_map_head *);
|
|
30
|
+
|
|
31
|
+
struct git_config_list {
|
|
32
|
+
git_refcount rc;
|
|
33
|
+
|
|
34
|
+
/* Interned strings - paths to config files or backend types */
|
|
35
|
+
git_config_list_pathmap strings;
|
|
36
|
+
|
|
37
|
+
/* Config entries */
|
|
38
|
+
git_config_list_headmap map;
|
|
39
|
+
config_entry_list *entries;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
int git_config_list_new(git_config_list **out)
|
|
43
|
+
{
|
|
44
|
+
git_config_list *config_list;
|
|
45
|
+
|
|
46
|
+
config_list = git__calloc(1, sizeof(git_config_list));
|
|
47
|
+
GIT_ERROR_CHECK_ALLOC(config_list);
|
|
48
|
+
GIT_REFCOUNT_INC(config_list);
|
|
49
|
+
|
|
50
|
+
*out = config_list;
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
int git_config_list_dup_entry(git_config_list *config_list, const git_config_entry *entry)
|
|
55
|
+
{
|
|
56
|
+
git_config_list_entry *duplicated;
|
|
57
|
+
int error;
|
|
58
|
+
|
|
59
|
+
duplicated = git__calloc(1, sizeof(git_config_list_entry));
|
|
60
|
+
GIT_ERROR_CHECK_ALLOC(duplicated);
|
|
61
|
+
|
|
62
|
+
duplicated->base.entry.name = git__strdup(entry->name);
|
|
63
|
+
GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.name);
|
|
64
|
+
|
|
65
|
+
if (entry->value) {
|
|
66
|
+
duplicated->base.entry.value = git__strdup(entry->value);
|
|
67
|
+
GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.value);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
duplicated->base.entry.backend_type = git_config_list_add_string(config_list, entry->backend_type);
|
|
71
|
+
GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.backend_type);
|
|
72
|
+
|
|
73
|
+
if (entry->origin_path) {
|
|
74
|
+
duplicated->base.entry.origin_path = git_config_list_add_string(config_list, entry->origin_path);
|
|
75
|
+
GIT_ERROR_CHECK_ALLOC(duplicated->base.entry.origin_path);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
duplicated->base.entry.level = entry->level;
|
|
79
|
+
duplicated->base.entry.include_depth = entry->include_depth;
|
|
80
|
+
duplicated->base.free = git_config_list_entry_free;
|
|
81
|
+
duplicated->config_list = config_list;
|
|
82
|
+
|
|
83
|
+
if ((error = git_config_list_append(config_list, duplicated)) < 0)
|
|
84
|
+
goto out;
|
|
85
|
+
|
|
86
|
+
out:
|
|
87
|
+
if (error && duplicated) {
|
|
88
|
+
git__free((char *) duplicated->base.entry.name);
|
|
89
|
+
git__free((char *) duplicated->base.entry.value);
|
|
90
|
+
git__free(duplicated);
|
|
91
|
+
}
|
|
92
|
+
return error;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
int git_config_list_dup(git_config_list **out, git_config_list *config_list)
|
|
96
|
+
{
|
|
97
|
+
git_config_list *result = NULL;
|
|
98
|
+
config_entry_list *head;
|
|
99
|
+
int error;
|
|
100
|
+
|
|
101
|
+
if ((error = git_config_list_new(&result)) < 0)
|
|
102
|
+
goto out;
|
|
103
|
+
|
|
104
|
+
for (head = config_list->entries; head; head = head->next)
|
|
105
|
+
if ((git_config_list_dup_entry(result, &head->entry->base.entry)) < 0)
|
|
106
|
+
goto out;
|
|
107
|
+
|
|
108
|
+
*out = result;
|
|
109
|
+
result = NULL;
|
|
110
|
+
|
|
111
|
+
out:
|
|
112
|
+
git_config_list_free(result);
|
|
113
|
+
return error;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
void git_config_list_incref(git_config_list *config_list)
|
|
117
|
+
{
|
|
118
|
+
GIT_REFCOUNT_INC(config_list);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static void config_list_free(git_config_list *config_list)
|
|
122
|
+
{
|
|
123
|
+
config_entry_list *entry_list = NULL, *next;
|
|
124
|
+
config_entry_map_head *head;
|
|
125
|
+
char *str;
|
|
126
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
127
|
+
|
|
128
|
+
while (git_config_list_pathmap_iterate(&iter, NULL, &str, &config_list->strings) == 0)
|
|
129
|
+
git__free(str);
|
|
130
|
+
|
|
131
|
+
git_config_list_pathmap_dispose(&config_list->strings);
|
|
132
|
+
|
|
133
|
+
iter = GIT_HASHMAP_ITER_INIT;
|
|
134
|
+
while (git_config_list_headmap_iterate(&iter, NULL, &head, &config_list->map) == 0) {
|
|
135
|
+
git__free((char *) head->entry->base.entry.name);
|
|
136
|
+
git__free(head);
|
|
137
|
+
}
|
|
138
|
+
git_config_list_headmap_dispose(&config_list->map);
|
|
139
|
+
|
|
140
|
+
entry_list = config_list->entries;
|
|
141
|
+
while (entry_list != NULL) {
|
|
142
|
+
next = entry_list->next;
|
|
143
|
+
git__free((char *) entry_list->entry->base.entry.value);
|
|
144
|
+
git__free(entry_list->entry);
|
|
145
|
+
git__free(entry_list);
|
|
146
|
+
entry_list = next;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
git__free(config_list);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
void git_config_list_free(git_config_list *config_list)
|
|
153
|
+
{
|
|
154
|
+
if (config_list)
|
|
155
|
+
GIT_REFCOUNT_DEC(config_list, config_list_free);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
int git_config_list_append(git_config_list *config_list, git_config_list_entry *entry)
|
|
159
|
+
{
|
|
160
|
+
config_entry_list *list_head;
|
|
161
|
+
config_entry_map_head *map_head;
|
|
162
|
+
|
|
163
|
+
if (git_config_list_headmap_get(&map_head, &config_list->map, entry->base.entry.name) == 0) {
|
|
164
|
+
map_head->multivar = true;
|
|
165
|
+
/*
|
|
166
|
+
* This is a micro-optimization for configuration files
|
|
167
|
+
* with a lot of same keys. As for multivars the entry's
|
|
168
|
+
* key will be the same for all list, we can just free
|
|
169
|
+
* all except the first entry's name and just re-use it.
|
|
170
|
+
*/
|
|
171
|
+
git__free((char *) entry->base.entry.name);
|
|
172
|
+
entry->base.entry.name = map_head->entry->base.entry.name;
|
|
173
|
+
} else {
|
|
174
|
+
map_head = git__calloc(1, sizeof(*map_head));
|
|
175
|
+
if ((git_config_list_headmap_put(&config_list->map, entry->base.entry.name, map_head)) < 0)
|
|
176
|
+
return -1;
|
|
177
|
+
}
|
|
178
|
+
map_head->entry = entry;
|
|
179
|
+
|
|
180
|
+
list_head = git__calloc(1, sizeof(config_entry_list));
|
|
181
|
+
GIT_ERROR_CHECK_ALLOC(list_head);
|
|
182
|
+
list_head->entry = entry;
|
|
183
|
+
|
|
184
|
+
if (config_list->entries)
|
|
185
|
+
config_list->entries->last->next = list_head;
|
|
186
|
+
else
|
|
187
|
+
config_list->entries = list_head;
|
|
188
|
+
config_list->entries->last = list_head;
|
|
189
|
+
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
int git_config_list_get(git_config_list_entry **out, git_config_list *config_list, const char *key)
|
|
194
|
+
{
|
|
195
|
+
config_entry_map_head *entry;
|
|
196
|
+
|
|
197
|
+
if (git_config_list_headmap_get(&entry, &config_list->map, key) != 0)
|
|
198
|
+
return GIT_ENOTFOUND;
|
|
199
|
+
|
|
200
|
+
*out = entry->entry;
|
|
201
|
+
return 0;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
int git_config_list_get_unique(git_config_list_entry **out, git_config_list *config_list, const char *key)
|
|
205
|
+
{
|
|
206
|
+
config_entry_map_head *entry;
|
|
207
|
+
|
|
208
|
+
if (git_config_list_headmap_get(&entry, &config_list->map, key) != 0)
|
|
209
|
+
return GIT_ENOTFOUND;
|
|
210
|
+
|
|
211
|
+
if (entry->multivar) {
|
|
212
|
+
git_error_set(GIT_ERROR_CONFIG, "entry is not unique due to being a multivar");
|
|
213
|
+
return -1;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (entry->entry->base.entry.include_depth) {
|
|
217
|
+
git_error_set(GIT_ERROR_CONFIG, "entry is not unique due to being included");
|
|
218
|
+
return -1;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
*out = entry->entry;
|
|
222
|
+
return 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
static void config_iterator_free(git_config_iterator *iter)
|
|
226
|
+
{
|
|
227
|
+
config_list_iterator *it = (config_list_iterator *) iter;
|
|
228
|
+
git_config_list_free(it->list);
|
|
229
|
+
git__free(it);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
static int config_iterator_next(
|
|
233
|
+
git_config_backend_entry **entry,
|
|
234
|
+
git_config_iterator *iter)
|
|
235
|
+
{
|
|
236
|
+
config_list_iterator *it = (config_list_iterator *) iter;
|
|
237
|
+
|
|
238
|
+
if (!it->head)
|
|
239
|
+
return GIT_ITEROVER;
|
|
240
|
+
|
|
241
|
+
*entry = &it->head->entry->base;
|
|
242
|
+
it->head = it->head->next;
|
|
243
|
+
|
|
244
|
+
return 0;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
int git_config_list_iterator_new(git_config_iterator **out, git_config_list *config_list)
|
|
248
|
+
{
|
|
249
|
+
config_list_iterator *it;
|
|
250
|
+
|
|
251
|
+
it = git__calloc(1, sizeof(config_list_iterator));
|
|
252
|
+
GIT_ERROR_CHECK_ALLOC(it);
|
|
253
|
+
it->parent.next = config_iterator_next;
|
|
254
|
+
it->parent.free = config_iterator_free;
|
|
255
|
+
it->head = config_list->entries;
|
|
256
|
+
it->list = config_list;
|
|
257
|
+
|
|
258
|
+
git_config_list_incref(config_list);
|
|
259
|
+
*out = &it->parent;
|
|
260
|
+
|
|
261
|
+
return 0;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* release the map containing the entry as an equivalent to freeing it */
|
|
265
|
+
void git_config_list_entry_free(git_config_backend_entry *e)
|
|
266
|
+
{
|
|
267
|
+
git_config_list_entry *entry = (git_config_list_entry *)e;
|
|
268
|
+
git_config_list_free(entry->config_list);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const char *git_config_list_add_string(
|
|
272
|
+
git_config_list *config_list,
|
|
273
|
+
const char *str)
|
|
274
|
+
{
|
|
275
|
+
char *s;
|
|
276
|
+
|
|
277
|
+
if (git_config_list_pathmap_get(&s, &config_list->strings, str) == 0)
|
|
278
|
+
return s;
|
|
279
|
+
|
|
280
|
+
if ((s = git__strdup(str)) == NULL ||
|
|
281
|
+
git_config_list_pathmap_put(&config_list->strings, s, s) < 0)
|
|
282
|
+
return NULL;
|
|
283
|
+
|
|
284
|
+
return s;
|
|
285
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 "common.h"
|
|
9
|
+
|
|
10
|
+
#include "git2/sys/config.h"
|
|
11
|
+
#include "config.h"
|
|
12
|
+
|
|
13
|
+
typedef struct git_config_list git_config_list;
|
|
14
|
+
|
|
15
|
+
typedef struct {
|
|
16
|
+
git_config_backend_entry base;
|
|
17
|
+
git_config_list *config_list;
|
|
18
|
+
} git_config_list_entry;
|
|
19
|
+
|
|
20
|
+
int git_config_list_new(git_config_list **out);
|
|
21
|
+
int git_config_list_dup(git_config_list **out, git_config_list *list);
|
|
22
|
+
int git_config_list_dup_entry(git_config_list *list, const git_config_entry *entry);
|
|
23
|
+
void git_config_list_incref(git_config_list *list);
|
|
24
|
+
void git_config_list_free(git_config_list *list);
|
|
25
|
+
/* Add or append the new config option */
|
|
26
|
+
int git_config_list_append(git_config_list *list, git_config_list_entry *entry);
|
|
27
|
+
int git_config_list_get(git_config_list_entry **out, git_config_list *list, const char *key);
|
|
28
|
+
int git_config_list_get_unique(git_config_list_entry **out, git_config_list *list, const char *key);
|
|
29
|
+
int git_config_list_iterator_new(git_config_iterator **out, git_config_list *list);
|
|
30
|
+
const char *git_config_list_add_string(git_config_list *list, const char *str);
|
|
31
|
+
|
|
32
|
+
void git_config_list_entry_free(git_config_backend_entry *entry);
|
|
@@ -9,16 +9,29 @@
|
|
|
9
9
|
|
|
10
10
|
#include "config_backend.h"
|
|
11
11
|
#include "config_parse.h"
|
|
12
|
-
#include "
|
|
12
|
+
#include "config_list.h"
|
|
13
|
+
#include "strlist.h"
|
|
13
14
|
|
|
14
15
|
typedef struct {
|
|
15
16
|
git_config_backend parent;
|
|
16
|
-
|
|
17
|
+
|
|
18
|
+
char *backend_type;
|
|
19
|
+
char *origin_path;
|
|
20
|
+
|
|
21
|
+
git_config_list *config_list;
|
|
22
|
+
|
|
23
|
+
/* Configuration data in the config file format */
|
|
17
24
|
git_str cfg;
|
|
25
|
+
|
|
26
|
+
/* Array of key=value pairs */
|
|
27
|
+
char **values;
|
|
28
|
+
size_t values_len;
|
|
18
29
|
} config_memory_backend;
|
|
19
30
|
|
|
20
31
|
typedef struct {
|
|
21
|
-
|
|
32
|
+
const char *backend_type;
|
|
33
|
+
const char *origin_path;
|
|
34
|
+
git_config_list *config_list;
|
|
22
35
|
git_config_level_t level;
|
|
23
36
|
} config_memory_parse_data;
|
|
24
37
|
|
|
@@ -39,7 +52,7 @@ static int read_variable_cb(
|
|
|
39
52
|
{
|
|
40
53
|
config_memory_parse_data *parse_data = (config_memory_parse_data *) payload;
|
|
41
54
|
git_str buf = GIT_STR_INIT;
|
|
42
|
-
|
|
55
|
+
git_config_list_entry *entry;
|
|
43
56
|
const char *c;
|
|
44
57
|
int result;
|
|
45
58
|
|
|
@@ -62,35 +75,46 @@ static int read_variable_cb(
|
|
|
62
75
|
if (git_str_oom(&buf))
|
|
63
76
|
return -1;
|
|
64
77
|
|
|
65
|
-
entry = git__calloc(1, sizeof(
|
|
78
|
+
entry = git__calloc(1, sizeof(git_config_list_entry));
|
|
66
79
|
GIT_ERROR_CHECK_ALLOC(entry);
|
|
67
|
-
entry->name = git_str_detach(&buf);
|
|
68
|
-
entry->value = var_value ? git__strdup(var_value) : NULL;
|
|
69
|
-
entry->level = parse_data->level;
|
|
70
|
-
entry->include_depth = 0;
|
|
71
|
-
|
|
72
|
-
|
|
80
|
+
entry->base.entry.name = git_str_detach(&buf);
|
|
81
|
+
entry->base.entry.value = var_value ? git__strdup(var_value) : NULL;
|
|
82
|
+
entry->base.entry.level = parse_data->level;
|
|
83
|
+
entry->base.entry.include_depth = 0;
|
|
84
|
+
entry->base.entry.backend_type = parse_data->backend_type;
|
|
85
|
+
entry->base.entry.origin_path = parse_data->origin_path;
|
|
86
|
+
entry->base.free = git_config_list_entry_free;
|
|
87
|
+
entry->config_list = parse_data->config_list;
|
|
88
|
+
|
|
89
|
+
if ((result = git_config_list_append(parse_data->config_list, entry)) < 0)
|
|
73
90
|
return result;
|
|
74
91
|
|
|
75
92
|
return result;
|
|
76
93
|
}
|
|
77
94
|
|
|
78
|
-
static int
|
|
95
|
+
static int parse_config(
|
|
96
|
+
config_memory_backend *memory_backend,
|
|
97
|
+
git_config_level_t level)
|
|
79
98
|
{
|
|
80
|
-
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
81
99
|
git_config_parser parser = GIT_PARSE_CTX_INIT;
|
|
82
100
|
config_memory_parse_data parse_data;
|
|
83
101
|
int error;
|
|
84
102
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if ((error = git_config_parser_init(&parser, "in-memory", memory_backend->cfg.ptr,
|
|
88
|
-
memory_backend->cfg.size)) < 0)
|
|
103
|
+
if ((error = git_config_parser_init(&parser, "in-memory",
|
|
104
|
+
memory_backend->cfg.ptr, memory_backend->cfg.size)) < 0)
|
|
89
105
|
goto out;
|
|
90
|
-
|
|
106
|
+
|
|
107
|
+
parse_data.backend_type = git_config_list_add_string(
|
|
108
|
+
memory_backend->config_list, memory_backend->backend_type);
|
|
109
|
+
parse_data.origin_path = memory_backend->origin_path ?
|
|
110
|
+
git_config_list_add_string(memory_backend->config_list,
|
|
111
|
+
memory_backend->origin_path) :
|
|
112
|
+
NULL;
|
|
113
|
+
parse_data.config_list = memory_backend->config_list;
|
|
91
114
|
parse_data.level = level;
|
|
92
115
|
|
|
93
|
-
if ((error = git_config_parse(&parser, NULL, read_variable_cb,
|
|
116
|
+
if ((error = git_config_parse(&parser, NULL, read_variable_cb,
|
|
117
|
+
NULL, NULL, &parse_data)) < 0)
|
|
94
118
|
goto out;
|
|
95
119
|
|
|
96
120
|
out:
|
|
@@ -98,10 +122,85 @@ out:
|
|
|
98
122
|
return error;
|
|
99
123
|
}
|
|
100
124
|
|
|
101
|
-
static int
|
|
125
|
+
static int parse_values(
|
|
126
|
+
config_memory_backend *memory_backend,
|
|
127
|
+
git_config_level_t level)
|
|
128
|
+
{
|
|
129
|
+
git_config_list_entry *entry;
|
|
130
|
+
const char *eql, *backend_type, *origin_path;
|
|
131
|
+
size_t name_len, i;
|
|
132
|
+
|
|
133
|
+
backend_type = git_config_list_add_string(
|
|
134
|
+
memory_backend->config_list, memory_backend->backend_type);
|
|
135
|
+
GIT_ERROR_CHECK_ALLOC(backend_type);
|
|
136
|
+
|
|
137
|
+
origin_path = memory_backend->origin_path ?
|
|
138
|
+
git_config_list_add_string(memory_backend->config_list,
|
|
139
|
+
memory_backend->origin_path) :
|
|
140
|
+
NULL;
|
|
141
|
+
|
|
142
|
+
for (i = 0; i < memory_backend->values_len; i++) {
|
|
143
|
+
eql = strchr(memory_backend->values[i], '=');
|
|
144
|
+
name_len = eql - memory_backend->values[i];
|
|
145
|
+
|
|
146
|
+
if (name_len == 0) {
|
|
147
|
+
git_error_set(GIT_ERROR_CONFIG, "empty config key");
|
|
148
|
+
return -1;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
entry = git__calloc(1, sizeof(git_config_list_entry));
|
|
152
|
+
GIT_ERROR_CHECK_ALLOC(entry);
|
|
153
|
+
|
|
154
|
+
entry->base.entry.name = git__strndup(memory_backend->values[i], name_len);
|
|
155
|
+
GIT_ERROR_CHECK_ALLOC(entry->base.entry.name);
|
|
156
|
+
|
|
157
|
+
if (eql) {
|
|
158
|
+
entry->base.entry.value = git__strdup(eql + 1);
|
|
159
|
+
GIT_ERROR_CHECK_ALLOC(entry->base.entry.value);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
entry->base.entry.level = level;
|
|
163
|
+
entry->base.entry.include_depth = 0;
|
|
164
|
+
entry->base.entry.backend_type = backend_type;
|
|
165
|
+
entry->base.entry.origin_path = origin_path;
|
|
166
|
+
entry->base.free = git_config_list_entry_free;
|
|
167
|
+
entry->config_list = memory_backend->config_list;
|
|
168
|
+
|
|
169
|
+
if (git_config_list_append(memory_backend->config_list, entry) < 0)
|
|
170
|
+
return -1;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
static int config_memory_open(git_config_backend *backend, git_config_level_t level, const git_repository *repo)
|
|
177
|
+
{
|
|
178
|
+
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
179
|
+
|
|
180
|
+
GIT_UNUSED(repo);
|
|
181
|
+
|
|
182
|
+
if (memory_backend->cfg.size > 0 &&
|
|
183
|
+
parse_config(memory_backend, level) < 0)
|
|
184
|
+
return -1;
|
|
185
|
+
|
|
186
|
+
if (memory_backend->values_len > 0 &&
|
|
187
|
+
parse_values(memory_backend, level) < 0)
|
|
188
|
+
return -1;
|
|
189
|
+
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
static int config_memory_get(git_config_backend *backend, const char *key, git_config_backend_entry **out)
|
|
102
194
|
{
|
|
103
195
|
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
104
|
-
|
|
196
|
+
git_config_list_entry *entry;
|
|
197
|
+
int error;
|
|
198
|
+
|
|
199
|
+
if ((error = git_config_list_get(&entry, memory_backend->config_list, key)) != 0)
|
|
200
|
+
return error;
|
|
201
|
+
|
|
202
|
+
*out = &entry->base;
|
|
203
|
+
return 0;
|
|
105
204
|
}
|
|
106
205
|
|
|
107
206
|
static int config_memory_iterator(
|
|
@@ -109,18 +208,18 @@ static int config_memory_iterator(
|
|
|
109
208
|
git_config_backend *backend)
|
|
110
209
|
{
|
|
111
210
|
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
112
|
-
|
|
211
|
+
git_config_list *config_list;
|
|
113
212
|
int error;
|
|
114
213
|
|
|
115
|
-
if ((error =
|
|
214
|
+
if ((error = git_config_list_dup(&config_list, memory_backend->config_list)) < 0)
|
|
116
215
|
goto out;
|
|
117
216
|
|
|
118
|
-
if ((error =
|
|
217
|
+
if ((error = git_config_list_iterator_new(iter, config_list)) < 0)
|
|
119
218
|
goto out;
|
|
120
219
|
|
|
121
220
|
out:
|
|
122
|
-
/* Let iterator delete duplicated
|
|
123
|
-
|
|
221
|
+
/* Let iterator delete duplicated config_list when it's done */
|
|
222
|
+
git_config_list_free(config_list);
|
|
124
223
|
return error;
|
|
125
224
|
}
|
|
126
225
|
|
|
@@ -177,28 +276,24 @@ static void config_memory_free(git_config_backend *_backend)
|
|
|
177
276
|
if (backend == NULL)
|
|
178
277
|
return;
|
|
179
278
|
|
|
180
|
-
|
|
279
|
+
git__free(backend->origin_path);
|
|
280
|
+
git__free(backend->backend_type);
|
|
281
|
+
git_config_list_free(backend->config_list);
|
|
282
|
+
git_strlist_free(backend->values, backend->values_len);
|
|
181
283
|
git_str_dispose(&backend->cfg);
|
|
182
284
|
git__free(backend);
|
|
183
285
|
}
|
|
184
286
|
|
|
185
|
-
|
|
287
|
+
static config_memory_backend *config_backend_new(
|
|
288
|
+
git_config_backend_memory_options *opts)
|
|
186
289
|
{
|
|
187
290
|
config_memory_backend *backend;
|
|
188
291
|
|
|
189
|
-
backend = git__calloc(1, sizeof(config_memory_backend))
|
|
190
|
-
|
|
292
|
+
if ((backend = git__calloc(1, sizeof(config_memory_backend))) == NULL)
|
|
293
|
+
return NULL;
|
|
191
294
|
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
return -1;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (git_str_set(&backend->cfg, cfg, len) < 0) {
|
|
198
|
-
git_config_entries_free(backend->entries);
|
|
199
|
-
git__free(backend);
|
|
200
|
-
return -1;
|
|
201
|
-
}
|
|
295
|
+
if (git_config_list_new(&backend->config_list) < 0)
|
|
296
|
+
goto on_error;
|
|
202
297
|
|
|
203
298
|
backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
|
|
204
299
|
backend->parent.readonly = 1;
|
|
@@ -214,7 +309,66 @@ int git_config_backend_from_string(git_config_backend **out, const char *cfg, si
|
|
|
214
309
|
backend->parent.snapshot = git_config_backend_snapshot;
|
|
215
310
|
backend->parent.free = config_memory_free;
|
|
216
311
|
|
|
312
|
+
backend->backend_type = git__strdup(opts && opts->backend_type ?
|
|
313
|
+
opts->backend_type : "in-memory");
|
|
314
|
+
|
|
315
|
+
if (backend->backend_type == NULL)
|
|
316
|
+
goto on_error;
|
|
317
|
+
|
|
318
|
+
if (opts && opts->origin_path &&
|
|
319
|
+
(backend->origin_path = git__strdup(opts->origin_path)) == NULL)
|
|
320
|
+
goto on_error;
|
|
321
|
+
|
|
322
|
+
return backend;
|
|
323
|
+
|
|
324
|
+
on_error:
|
|
325
|
+
git_config_list_free(backend->config_list);
|
|
326
|
+
git__free(backend->origin_path);
|
|
327
|
+
git__free(backend->backend_type);
|
|
328
|
+
git__free(backend);
|
|
329
|
+
return NULL;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
int git_config_backend_from_string(
|
|
333
|
+
git_config_backend **out,
|
|
334
|
+
const char *cfg,
|
|
335
|
+
size_t len,
|
|
336
|
+
git_config_backend_memory_options *opts)
|
|
337
|
+
{
|
|
338
|
+
config_memory_backend *backend;
|
|
339
|
+
|
|
340
|
+
if ((backend = config_backend_new(opts)) == NULL)
|
|
341
|
+
return -1;
|
|
342
|
+
|
|
343
|
+
if (git_str_set(&backend->cfg, cfg, len) < 0) {
|
|
344
|
+
git_config_list_free(backend->config_list);
|
|
345
|
+
git__free(backend);
|
|
346
|
+
return -1;
|
|
347
|
+
}
|
|
348
|
+
|
|
217
349
|
*out = (git_config_backend *)backend;
|
|
350
|
+
return 0;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
int git_config_backend_from_values(
|
|
354
|
+
git_config_backend **out,
|
|
355
|
+
const char **values,
|
|
356
|
+
size_t len,
|
|
357
|
+
git_config_backend_memory_options *opts)
|
|
358
|
+
{
|
|
359
|
+
config_memory_backend *backend;
|
|
218
360
|
|
|
361
|
+
if ((backend = config_backend_new(opts)) == NULL)
|
|
362
|
+
return -1;
|
|
363
|
+
|
|
364
|
+
if (git_strlist_copy(&backend->values, values, len) < 0) {
|
|
365
|
+
git_config_list_free(backend->config_list);
|
|
366
|
+
git__free(backend);
|
|
367
|
+
return -1;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
backend->values_len = len;
|
|
371
|
+
|
|
372
|
+
*out = (git_config_backend *)backend;
|
|
219
373
|
return 0;
|
|
220
374
|
}
|
|
@@ -25,9 +25,9 @@ static void set_parse_error(git_config_parser *reader, int col, const char *erro
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
GIT_INLINE(int) config_keychar(
|
|
28
|
+
GIT_INLINE(int) config_keychar(char c)
|
|
29
29
|
{
|
|
30
|
-
return
|
|
30
|
+
return git__isalnum(c) || c == '-';
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
static int strip_comments(char *line, int in_quotes)
|
|
@@ -158,9 +158,10 @@ end_error:
|
|
|
158
158
|
static int parse_section_header(git_config_parser *reader, char **section_out)
|
|
159
159
|
{
|
|
160
160
|
char *name, *name_end;
|
|
161
|
-
int name_length,
|
|
161
|
+
int name_length, pos;
|
|
162
162
|
int result;
|
|
163
163
|
char *line;
|
|
164
|
+
char c;
|
|
164
165
|
size_t line_len;
|
|
165
166
|
|
|
166
167
|
git_parse_advance_ws(&reader->ctx);
|
|
@@ -279,8 +280,7 @@ static int skip_bom(git_parse_ctx *parser)
|
|
|
279
280
|
*/
|
|
280
281
|
|
|
281
282
|
/* '\"' -> '"' etc */
|
|
282
|
-
static int unescape_line(
|
|
283
|
-
char **out, bool *is_multi, const char *ptr, int quote_count)
|
|
283
|
+
static int unescape_line(char **out, bool *is_multi, const char *ptr, int *quote_count)
|
|
284
284
|
{
|
|
285
285
|
char *str, *fixed, *esc;
|
|
286
286
|
size_t ptr_len = strlen(ptr), alloc_len;
|
|
@@ -296,7 +296,8 @@ static int unescape_line(
|
|
|
296
296
|
|
|
297
297
|
while (*ptr != '\0') {
|
|
298
298
|
if (*ptr == '"') {
|
|
299
|
-
quote_count
|
|
299
|
+
if (quote_count)
|
|
300
|
+
(*quote_count)++;
|
|
300
301
|
} else if (*ptr != '\\') {
|
|
301
302
|
*fixed++ = *ptr;
|
|
302
303
|
} else {
|
|
@@ -358,7 +359,7 @@ static int parse_multiline_variable(git_config_parser *reader, git_str *value, i
|
|
|
358
359
|
goto next;
|
|
359
360
|
|
|
360
361
|
if ((error = unescape_line(&proc_line, &multiline,
|
|
361
|
-
line, in_quotes)) < 0)
|
|
362
|
+
line, &in_quotes)) < 0)
|
|
362
363
|
goto out;
|
|
363
364
|
|
|
364
365
|
/* Add this line to the multiline var */
|
|
@@ -382,7 +383,7 @@ out:
|
|
|
382
383
|
|
|
383
384
|
GIT_INLINE(bool) is_namechar(char c)
|
|
384
385
|
{
|
|
385
|
-
return
|
|
386
|
+
return git__isalnum(c) || c == '-';
|
|
386
387
|
}
|
|
387
388
|
|
|
388
389
|
static int parse_name(
|
|
@@ -445,7 +446,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
|
|
|
445
446
|
while (git__isspace(value_start[0]))
|
|
446
447
|
value_start++;
|
|
447
448
|
|
|
448
|
-
if ((error = unescape_line(&value, &multiline, value_start,
|
|
449
|
+
if ((error = unescape_line(&value, &multiline, value_start, NULL)) < 0)
|
|
449
450
|
goto out;
|
|
450
451
|
|
|
451
452
|
if (multiline) {
|