rugged 1.7.1 → 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +73 -92
- 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 +6 -3
- 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 +4 -3
- 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
@@ -22,83 +22,112 @@
|
|
22
22
|
|
23
23
|
#include <ctype.h>
|
24
24
|
|
25
|
+
/*
|
26
|
+
* A refcounted instance of a config_backend that can be shared across
|
27
|
+
* a configuration instance, any snapshots, and individual configuration
|
28
|
+
* levels (from `git_config_open_level`).
|
29
|
+
*/
|
30
|
+
typedef struct {
|
31
|
+
git_refcount rc;
|
32
|
+
git_config_backend *backend;
|
33
|
+
} backend_instance;
|
34
|
+
|
35
|
+
/*
|
36
|
+
* An entry in the readers or writers vector in the configuration.
|
37
|
+
* This is kept separate from the refcounted instance so that different
|
38
|
+
* views of the configuration can have different notions of levels or
|
39
|
+
* write orders.
|
40
|
+
*
|
41
|
+
* (eg, a standard configuration has a priority ordering of writers, a
|
42
|
+
* snapshot has *no* writers, and an individual level has a single
|
43
|
+
* writer.)
|
44
|
+
*/
|
45
|
+
typedef struct {
|
46
|
+
backend_instance *instance;
|
47
|
+
git_config_level_t level;
|
48
|
+
int write_order;
|
49
|
+
} backend_entry;
|
50
|
+
|
25
51
|
void git_config_entry_free(git_config_entry *entry)
|
26
52
|
{
|
53
|
+
git_config_backend_entry *be;
|
54
|
+
|
27
55
|
if (!entry)
|
28
56
|
return;
|
29
57
|
|
30
|
-
|
58
|
+
be = (git_config_backend_entry *)entry;
|
59
|
+
be->free(be);
|
31
60
|
}
|
32
61
|
|
33
|
-
|
34
|
-
git_refcount rc;
|
35
|
-
|
36
|
-
git_config_backend *backend;
|
37
|
-
git_config_level_t level;
|
38
|
-
} backend_internal;
|
39
|
-
|
40
|
-
static void backend_internal_free(backend_internal *internal)
|
62
|
+
static void backend_instance_free(backend_instance *instance)
|
41
63
|
{
|
42
64
|
git_config_backend *backend;
|
43
65
|
|
44
|
-
backend =
|
66
|
+
backend = instance->backend;
|
45
67
|
backend->free(backend);
|
46
|
-
git__free(
|
68
|
+
git__free(instance);
|
47
69
|
}
|
48
70
|
|
49
|
-
static void config_free(git_config *
|
71
|
+
static void config_free(git_config *config)
|
50
72
|
{
|
51
73
|
size_t i;
|
52
|
-
|
74
|
+
backend_entry *entry;
|
53
75
|
|
54
|
-
|
55
|
-
|
56
|
-
|
76
|
+
git_vector_foreach(&config->readers, i, entry) {
|
77
|
+
GIT_REFCOUNT_DEC(entry->instance, backend_instance_free);
|
78
|
+
git__free(entry);
|
57
79
|
}
|
58
80
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
git__free(cfg);
|
81
|
+
git_vector_dispose(&config->readers);
|
82
|
+
git_vector_dispose(&config->writers);
|
83
|
+
git__free(config);
|
63
84
|
}
|
64
85
|
|
65
|
-
void git_config_free(git_config *
|
86
|
+
void git_config_free(git_config *config)
|
66
87
|
{
|
67
|
-
if (
|
88
|
+
if (config == NULL)
|
68
89
|
return;
|
69
90
|
|
70
|
-
GIT_REFCOUNT_DEC(
|
91
|
+
GIT_REFCOUNT_DEC(config, config_free);
|
71
92
|
}
|
72
93
|
|
73
|
-
static int
|
94
|
+
static int reader_cmp(const void *_a, const void *_b)
|
74
95
|
{
|
75
|
-
const
|
76
|
-
const
|
96
|
+
const backend_entry *a = _a;
|
97
|
+
const backend_entry *b = _b;
|
77
98
|
|
78
|
-
return
|
99
|
+
return b->level - a->level;
|
79
100
|
}
|
80
101
|
|
81
|
-
int
|
102
|
+
static int writer_cmp(const void *_a, const void *_b)
|
82
103
|
{
|
83
|
-
|
104
|
+
const backend_entry *a = _a;
|
105
|
+
const backend_entry *b = _b;
|
84
106
|
|
85
|
-
|
86
|
-
|
107
|
+
return b->write_order - a->write_order;
|
108
|
+
}
|
109
|
+
|
110
|
+
int git_config_new(git_config **out)
|
111
|
+
{
|
112
|
+
git_config *config;
|
87
113
|
|
88
|
-
|
114
|
+
config = git__calloc(1, sizeof(git_config));
|
115
|
+
GIT_ERROR_CHECK_ALLOC(config);
|
89
116
|
|
90
|
-
if (git_vector_init(&
|
91
|
-
|
117
|
+
if (git_vector_init(&config->readers, 8, reader_cmp) < 0 ||
|
118
|
+
git_vector_init(&config->writers, 8, writer_cmp) < 0) {
|
119
|
+
config_free(config);
|
92
120
|
return -1;
|
93
121
|
}
|
94
122
|
|
95
|
-
|
96
|
-
|
123
|
+
GIT_REFCOUNT_INC(config);
|
124
|
+
|
125
|
+
*out = config;
|
97
126
|
return 0;
|
98
127
|
}
|
99
128
|
|
100
129
|
int git_config_add_file_ondisk(
|
101
|
-
git_config *
|
130
|
+
git_config *config,
|
102
131
|
const char *path,
|
103
132
|
git_config_level_t level,
|
104
133
|
const git_repository *repo,
|
@@ -108,7 +137,7 @@ int git_config_add_file_ondisk(
|
|
108
137
|
struct stat st;
|
109
138
|
int res;
|
110
139
|
|
111
|
-
GIT_ASSERT_ARG(
|
140
|
+
GIT_ASSERT_ARG(config);
|
112
141
|
GIT_ASSERT_ARG(path);
|
113
142
|
|
114
143
|
res = p_stat(path, &st);
|
@@ -120,7 +149,7 @@ int git_config_add_file_ondisk(
|
|
120
149
|
if (git_config_backend_from_file(&file, path) < 0)
|
121
150
|
return -1;
|
122
151
|
|
123
|
-
if ((res = git_config_add_backend(
|
152
|
+
if ((res = git_config_add_backend(config, file, level, repo, force)) < 0) {
|
124
153
|
/*
|
125
154
|
* free manually; the file is not owned by the config
|
126
155
|
* instance yet and will not be freed on cleanup
|
@@ -154,7 +183,7 @@ int git_config_snapshot(git_config **out, git_config *in)
|
|
154
183
|
{
|
155
184
|
int error = 0;
|
156
185
|
size_t i;
|
157
|
-
|
186
|
+
backend_entry *entry;
|
158
187
|
git_config *config;
|
159
188
|
|
160
189
|
*out = NULL;
|
@@ -162,18 +191,20 @@ int git_config_snapshot(git_config **out, git_config *in)
|
|
162
191
|
if (git_config_new(&config) < 0)
|
163
192
|
return -1;
|
164
193
|
|
165
|
-
git_vector_foreach(&in->
|
194
|
+
git_vector_foreach(&in->readers, i, entry) {
|
166
195
|
git_config_backend *b;
|
167
196
|
|
168
|
-
if ((error =
|
197
|
+
if ((error = entry->instance->backend->snapshot(&b, entry->instance->backend)) < 0)
|
169
198
|
break;
|
170
199
|
|
171
|
-
if ((error = git_config_add_backend(config, b,
|
200
|
+
if ((error = git_config_add_backend(config, b, entry->level, NULL, 0)) < 0) {
|
172
201
|
b->free(b);
|
173
202
|
break;
|
174
203
|
}
|
175
204
|
}
|
176
205
|
|
206
|
+
git_config_set_writeorder(config, NULL, 0);
|
207
|
+
|
177
208
|
if (error < 0)
|
178
209
|
git_config_free(config);
|
179
210
|
else
|
@@ -183,141 +214,162 @@ int git_config_snapshot(git_config **out, git_config *in)
|
|
183
214
|
}
|
184
215
|
|
185
216
|
static int find_backend_by_level(
|
186
|
-
|
187
|
-
const git_config *
|
217
|
+
backend_instance **out,
|
218
|
+
const git_config *config,
|
188
219
|
git_config_level_t level)
|
189
220
|
{
|
190
|
-
|
191
|
-
backend_internal *internal;
|
221
|
+
backend_entry *entry, *found = NULL;
|
192
222
|
size_t i;
|
193
223
|
|
194
|
-
/*
|
195
|
-
*
|
196
|
-
*
|
197
|
-
*
|
224
|
+
/*
|
225
|
+
* when passing GIT_CONFIG_HIGHEST_LEVEL, the idea is to get the
|
226
|
+
* config backend which has the highest level. As config backends
|
227
|
+
* are stored in a vector sorted by decreasing order of level,
|
228
|
+
* getting the backend at position 0 will do the job.
|
198
229
|
*/
|
199
230
|
if (level == GIT_CONFIG_HIGHEST_LEVEL) {
|
200
|
-
|
231
|
+
found = git_vector_get(&config->readers, 0);
|
201
232
|
} else {
|
202
|
-
git_vector_foreach(&
|
203
|
-
if (
|
204
|
-
|
233
|
+
git_vector_foreach(&config->readers, i, entry) {
|
234
|
+
if (entry->level == level) {
|
235
|
+
found = entry;
|
236
|
+
break;
|
237
|
+
}
|
205
238
|
}
|
206
239
|
}
|
207
240
|
|
208
|
-
if (
|
241
|
+
if (!found) {
|
209
242
|
git_error_set(GIT_ERROR_CONFIG,
|
210
|
-
"no configuration exists for the given level '%
|
243
|
+
"no configuration exists for the given level '%d'", level);
|
211
244
|
return GIT_ENOTFOUND;
|
212
245
|
}
|
213
246
|
|
214
|
-
*out =
|
215
|
-
|
247
|
+
*out = found->instance;
|
216
248
|
return 0;
|
217
249
|
}
|
218
250
|
|
219
|
-
static int duplicate_level(void **
|
251
|
+
static int duplicate_level(void **_old, void *_new)
|
220
252
|
{
|
221
|
-
|
253
|
+
backend_entry **old = (backend_entry **)_old;
|
222
254
|
|
223
|
-
GIT_UNUSED(
|
255
|
+
GIT_UNUSED(_new);
|
224
256
|
|
225
|
-
git_error_set(GIT_ERROR_CONFIG, "
|
257
|
+
git_error_set(GIT_ERROR_CONFIG, "configuration at level %d already exists", (*old)->level);
|
226
258
|
return GIT_EEXISTS;
|
227
259
|
}
|
228
260
|
|
229
261
|
static void try_remove_existing_backend(
|
230
|
-
git_config *
|
262
|
+
git_config *config,
|
231
263
|
git_config_level_t level)
|
232
264
|
{
|
233
|
-
|
234
|
-
backend_internal *internal;
|
265
|
+
backend_entry *entry, *found = NULL;
|
235
266
|
size_t i;
|
236
267
|
|
237
|
-
git_vector_foreach(&
|
238
|
-
if (
|
239
|
-
|
268
|
+
git_vector_foreach(&config->readers, i, entry) {
|
269
|
+
if (entry->level == level) {
|
270
|
+
git_vector_remove(&config->readers, i);
|
271
|
+
found = entry;
|
272
|
+
break;
|
273
|
+
}
|
240
274
|
}
|
241
275
|
|
242
|
-
if (
|
276
|
+
if (!found)
|
243
277
|
return;
|
244
278
|
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
279
|
+
git_vector_foreach(&config->writers, i, entry) {
|
280
|
+
if (entry->level == level) {
|
281
|
+
git_vector_remove(&config->writers, i);
|
282
|
+
break;
|
283
|
+
}
|
284
|
+
}
|
249
285
|
|
250
|
-
GIT_REFCOUNT_DEC(
|
286
|
+
GIT_REFCOUNT_DEC(found->instance, backend_instance_free);
|
287
|
+
git__free(found);
|
251
288
|
}
|
252
289
|
|
253
|
-
static int
|
254
|
-
git_config *
|
255
|
-
|
290
|
+
static int git_config__add_instance(
|
291
|
+
git_config *config,
|
292
|
+
backend_instance *instance,
|
256
293
|
git_config_level_t level,
|
257
294
|
int force)
|
258
295
|
{
|
296
|
+
backend_entry *entry;
|
259
297
|
int result;
|
260
298
|
|
261
299
|
/* delete existing config backend for level if it exists */
|
262
300
|
if (force)
|
263
|
-
try_remove_existing_backend(
|
301
|
+
try_remove_existing_backend(config, level);
|
264
302
|
|
265
|
-
|
266
|
-
|
267
|
-
return result;
|
303
|
+
entry = git__malloc(sizeof(backend_entry));
|
304
|
+
GIT_ERROR_CHECK_ALLOC(entry);
|
268
305
|
|
269
|
-
|
270
|
-
|
306
|
+
entry->instance = instance;
|
307
|
+
entry->level = level;
|
308
|
+
entry->write_order = level;
|
271
309
|
|
272
|
-
|
310
|
+
if ((result = git_vector_insert_sorted(&config->readers,
|
311
|
+
entry, &duplicate_level)) < 0 ||
|
312
|
+
(result = git_vector_insert_sorted(&config->writers,
|
313
|
+
entry, NULL)) < 0) {
|
314
|
+
git__free(entry);
|
315
|
+
return result;
|
316
|
+
}
|
317
|
+
|
318
|
+
GIT_REFCOUNT_INC(entry->instance);
|
273
319
|
|
274
320
|
return 0;
|
275
321
|
}
|
276
322
|
|
277
|
-
int git_config_open_global(git_config **
|
323
|
+
int git_config_open_global(git_config **out, git_config *config)
|
278
324
|
{
|
279
|
-
|
325
|
+
int error;
|
326
|
+
|
327
|
+
error = git_config_open_level(out, config, GIT_CONFIG_LEVEL_XDG);
|
328
|
+
|
329
|
+
if (error == 0)
|
280
330
|
return 0;
|
331
|
+
else if (error != GIT_ENOTFOUND)
|
332
|
+
return error;
|
281
333
|
|
282
|
-
return git_config_open_level(
|
334
|
+
return git_config_open_level(out, config, GIT_CONFIG_LEVEL_GLOBAL);
|
283
335
|
}
|
284
336
|
|
285
337
|
int git_config_open_level(
|
286
|
-
git_config **
|
287
|
-
const git_config *
|
338
|
+
git_config **out,
|
339
|
+
const git_config *parent,
|
288
340
|
git_config_level_t level)
|
289
341
|
{
|
290
|
-
git_config *
|
291
|
-
|
342
|
+
git_config *config;
|
343
|
+
backend_instance *instance;
|
292
344
|
int res;
|
293
345
|
|
294
|
-
if ((res = find_backend_by_level(&
|
346
|
+
if ((res = find_backend_by_level(&instance, parent, level)) < 0)
|
295
347
|
return res;
|
296
348
|
|
297
|
-
if ((res = git_config_new(&
|
349
|
+
if ((res = git_config_new(&config)) < 0)
|
298
350
|
return res;
|
299
351
|
|
300
|
-
if ((res =
|
301
|
-
git_config_free(
|
352
|
+
if ((res = git_config__add_instance(config, instance, level, true)) < 0) {
|
353
|
+
git_config_free(config);
|
302
354
|
return res;
|
303
355
|
}
|
304
356
|
|
305
|
-
*
|
357
|
+
*out = config;
|
306
358
|
|
307
359
|
return 0;
|
308
360
|
}
|
309
361
|
|
310
362
|
int git_config_add_backend(
|
311
|
-
git_config *
|
363
|
+
git_config *config,
|
312
364
|
git_config_backend *backend,
|
313
365
|
git_config_level_t level,
|
314
366
|
const git_repository *repo,
|
315
367
|
int force)
|
316
368
|
{
|
317
|
-
|
369
|
+
backend_instance *instance;
|
318
370
|
int result;
|
319
371
|
|
320
|
-
GIT_ASSERT_ARG(
|
372
|
+
GIT_ASSERT_ARG(config);
|
321
373
|
GIT_ASSERT_ARG(backend);
|
322
374
|
|
323
375
|
GIT_ERROR_CHECK_VERSION(backend, GIT_CONFIG_BACKEND_VERSION, "git_config_backend");
|
@@ -325,22 +377,50 @@ int git_config_add_backend(
|
|
325
377
|
if ((result = backend->open(backend, level, repo)) < 0)
|
326
378
|
return result;
|
327
379
|
|
328
|
-
|
329
|
-
GIT_ERROR_CHECK_ALLOC(
|
330
|
-
|
331
|
-
memset(internal, 0x0, sizeof(backend_internal));
|
380
|
+
instance = git__calloc(1, sizeof(backend_instance));
|
381
|
+
GIT_ERROR_CHECK_ALLOC(instance);
|
332
382
|
|
333
|
-
|
334
|
-
|
383
|
+
instance->backend = backend;
|
384
|
+
instance->backend->cfg = config;
|
335
385
|
|
336
|
-
if ((result =
|
337
|
-
git__free(
|
386
|
+
if ((result = git_config__add_instance(config, instance, level, force)) < 0) {
|
387
|
+
git__free(instance);
|
338
388
|
return result;
|
339
389
|
}
|
340
390
|
|
341
391
|
return 0;
|
342
392
|
}
|
343
393
|
|
394
|
+
int git_config_set_writeorder(
|
395
|
+
git_config *config,
|
396
|
+
git_config_level_t *levels,
|
397
|
+
size_t len)
|
398
|
+
{
|
399
|
+
backend_entry *entry;
|
400
|
+
size_t i, j;
|
401
|
+
|
402
|
+
GIT_ASSERT(len < INT_MAX);
|
403
|
+
|
404
|
+
git_vector_foreach(&config->readers, i, entry) {
|
405
|
+
bool found = false;
|
406
|
+
|
407
|
+
for (j = 0; j < len; j++) {
|
408
|
+
if (levels[j] == entry->level) {
|
409
|
+
entry->write_order = (int)j;
|
410
|
+
found = true;
|
411
|
+
break;
|
412
|
+
}
|
413
|
+
}
|
414
|
+
|
415
|
+
if (!found)
|
416
|
+
entry->write_order = -1;
|
417
|
+
}
|
418
|
+
|
419
|
+
git_vector_sort(&config->writers);
|
420
|
+
|
421
|
+
return 0;
|
422
|
+
}
|
423
|
+
|
344
424
|
/*
|
345
425
|
* Loop over all the variables
|
346
426
|
*/
|
@@ -348,37 +428,24 @@ int git_config_add_backend(
|
|
348
428
|
typedef struct {
|
349
429
|
git_config_iterator parent;
|
350
430
|
git_config_iterator *current;
|
351
|
-
const git_config *
|
431
|
+
const git_config *config;
|
352
432
|
git_regexp regex;
|
353
433
|
size_t i;
|
354
434
|
} all_iter;
|
355
435
|
|
356
|
-
static int
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
for (; i > 0; --i) {
|
361
|
-
internal = git_vector_get(&cfg->backends, i - 1);
|
362
|
-
if (!internal || !internal->backend)
|
363
|
-
continue;
|
364
|
-
|
365
|
-
*out = i;
|
366
|
-
return 0;
|
367
|
-
}
|
368
|
-
|
369
|
-
return -1;
|
370
|
-
}
|
371
|
-
|
372
|
-
static int all_iter_next(git_config_entry **entry, git_config_iterator *_iter)
|
436
|
+
static int all_iter_next(
|
437
|
+
git_config_backend_entry **out,
|
438
|
+
git_config_iterator *_iter)
|
373
439
|
{
|
374
440
|
all_iter *iter = (all_iter *) _iter;
|
375
|
-
|
441
|
+
backend_entry *entry;
|
376
442
|
git_config_backend *backend;
|
377
|
-
|
443
|
+
git_config_backend_entry *be;
|
378
444
|
int error = 0;
|
379
445
|
|
380
446
|
if (iter->current != NULL &&
|
381
|
-
(error = iter->current->next(
|
447
|
+
(error = iter->current->next(&be, iter->current)) == 0) {
|
448
|
+
*out = be;
|
382
449
|
return 0;
|
383
450
|
}
|
384
451
|
|
@@ -386,25 +453,32 @@ static int all_iter_next(git_config_entry **entry, git_config_iterator *_iter)
|
|
386
453
|
return error;
|
387
454
|
|
388
455
|
do {
|
389
|
-
if (
|
456
|
+
if (iter->i == 0)
|
390
457
|
return GIT_ITEROVER;
|
391
458
|
|
392
|
-
|
393
|
-
|
394
|
-
|
459
|
+
entry = git_vector_get(&iter->config->readers, iter->i - 1);
|
460
|
+
GIT_ASSERT(entry && entry->instance && entry->instance->backend);
|
461
|
+
|
462
|
+
backend = entry->instance->backend;
|
463
|
+
iter->i--;
|
395
464
|
|
396
465
|
if (iter->current)
|
397
466
|
iter->current->free(iter->current);
|
398
467
|
|
399
468
|
iter->current = NULL;
|
400
469
|
error = backend->iterator(&iter->current, backend);
|
470
|
+
|
401
471
|
if (error == GIT_ENOTFOUND)
|
402
472
|
continue;
|
403
473
|
|
404
474
|
if (error < 0)
|
405
475
|
return error;
|
406
476
|
|
407
|
-
error = iter->current->next(
|
477
|
+
if ((error = iter->current->next(&be, iter->current)) == 0) {
|
478
|
+
*out = be;
|
479
|
+
return 0;
|
480
|
+
}
|
481
|
+
|
408
482
|
/* If this backend is empty, then keep going */
|
409
483
|
if (error == GIT_ITEROVER)
|
410
484
|
continue;
|
@@ -416,18 +490,20 @@ static int all_iter_next(git_config_entry **entry, git_config_iterator *_iter)
|
|
416
490
|
return GIT_ITEROVER;
|
417
491
|
}
|
418
492
|
|
419
|
-
static int all_iter_glob_next(
|
493
|
+
static int all_iter_glob_next(
|
494
|
+
git_config_backend_entry **entry,
|
495
|
+
git_config_iterator *_iter)
|
420
496
|
{
|
421
497
|
int error;
|
422
498
|
all_iter *iter = (all_iter *) _iter;
|
423
499
|
|
424
500
|
/*
|
425
501
|
* We use the "normal" function to grab the next one across
|
426
|
-
*
|
502
|
+
* readers and then apply the regex
|
427
503
|
*/
|
428
504
|
while ((error = all_iter_next(entry, _iter)) == 0) {
|
429
505
|
/* skip non-matching keys if regexp was provided */
|
430
|
-
if (git_regexp_match(&iter->regex, (*entry)->name) != 0)
|
506
|
+
if (git_regexp_match(&iter->regex, (*entry)->entry.name) != 0)
|
431
507
|
continue;
|
432
508
|
|
433
509
|
/* and simply return if we like the entry's name */
|
@@ -455,7 +531,7 @@ static void all_iter_glob_free(git_config_iterator *_iter)
|
|
455
531
|
all_iter_free(_iter);
|
456
532
|
}
|
457
533
|
|
458
|
-
int git_config_iterator_new(git_config_iterator **out, const git_config *
|
534
|
+
int git_config_iterator_new(git_config_iterator **out, const git_config *config)
|
459
535
|
{
|
460
536
|
all_iter *iter;
|
461
537
|
|
@@ -465,21 +541,21 @@ int git_config_iterator_new(git_config_iterator **out, const git_config *cfg)
|
|
465
541
|
iter->parent.free = all_iter_free;
|
466
542
|
iter->parent.next = all_iter_next;
|
467
543
|
|
468
|
-
iter->i =
|
469
|
-
iter->
|
544
|
+
iter->i = config->readers.length;
|
545
|
+
iter->config = config;
|
470
546
|
|
471
547
|
*out = (git_config_iterator *) iter;
|
472
548
|
|
473
549
|
return 0;
|
474
550
|
}
|
475
551
|
|
476
|
-
int git_config_iterator_glob_new(git_config_iterator **out, const git_config *
|
552
|
+
int git_config_iterator_glob_new(git_config_iterator **out, const git_config *config, const char *regexp)
|
477
553
|
{
|
478
554
|
all_iter *iter;
|
479
555
|
int result;
|
480
556
|
|
481
557
|
if (regexp == NULL)
|
482
|
-
return git_config_iterator_new(out,
|
558
|
+
return git_config_iterator_new(out, config);
|
483
559
|
|
484
560
|
iter = git__calloc(1, sizeof(all_iter));
|
485
561
|
GIT_ERROR_CHECK_ALLOC(iter);
|
@@ -491,8 +567,8 @@ int git_config_iterator_glob_new(git_config_iterator **out, const git_config *cf
|
|
491
567
|
|
492
568
|
iter->parent.next = all_iter_glob_next;
|
493
569
|
iter->parent.free = all_iter_glob_free;
|
494
|
-
iter->i =
|
495
|
-
iter->
|
570
|
+
iter->i = config->readers.length;
|
571
|
+
iter->config = config;
|
496
572
|
|
497
573
|
*out = (git_config_iterator *) iter;
|
498
574
|
|
@@ -500,9 +576,9 @@ int git_config_iterator_glob_new(git_config_iterator **out, const git_config *cf
|
|
500
576
|
}
|
501
577
|
|
502
578
|
int git_config_foreach(
|
503
|
-
const git_config *
|
579
|
+
const git_config *config, git_config_foreach_cb cb, void *payload)
|
504
580
|
{
|
505
|
-
return git_config_foreach_match(
|
581
|
+
return git_config_foreach_match(config, NULL, cb, payload);
|
506
582
|
}
|
507
583
|
|
508
584
|
int git_config_backend_foreach_match(
|
@@ -511,7 +587,7 @@ int git_config_backend_foreach_match(
|
|
511
587
|
git_config_foreach_cb cb,
|
512
588
|
void *payload)
|
513
589
|
{
|
514
|
-
|
590
|
+
git_config_backend_entry *entry;
|
515
591
|
git_config_iterator *iter;
|
516
592
|
git_regexp regex;
|
517
593
|
int error = 0;
|
@@ -529,11 +605,11 @@ int git_config_backend_foreach_match(
|
|
529
605
|
|
530
606
|
while (!(iter->next(&entry, iter) < 0)) {
|
531
607
|
/* skip non-matching keys if regexp was provided */
|
532
|
-
if (regexp && git_regexp_match(®ex, entry->name) != 0)
|
608
|
+
if (regexp && git_regexp_match(®ex, entry->entry.name) != 0)
|
533
609
|
continue;
|
534
610
|
|
535
611
|
/* abort iterator on non-zero return value */
|
536
|
-
if ((error = cb(entry, payload)) != 0) {
|
612
|
+
if ((error = cb(&entry->entry, payload)) != 0) {
|
537
613
|
git_error_set_after_callback(error);
|
538
614
|
break;
|
539
615
|
}
|
@@ -548,7 +624,7 @@ int git_config_backend_foreach_match(
|
|
548
624
|
}
|
549
625
|
|
550
626
|
int git_config_foreach_match(
|
551
|
-
const git_config *
|
627
|
+
const git_config *config,
|
552
628
|
const char *regexp,
|
553
629
|
git_config_foreach_cb cb,
|
554
630
|
void *payload)
|
@@ -557,7 +633,7 @@ int git_config_foreach_match(
|
|
557
633
|
git_config_iterator *iter;
|
558
634
|
git_config_entry *entry;
|
559
635
|
|
560
|
-
if ((error = git_config_iterator_glob_new(&iter,
|
636
|
+
if ((error = git_config_iterator_glob_new(&iter, config, regexp)) < 0)
|
561
637
|
return error;
|
562
638
|
|
563
639
|
while (!(error = git_config_next(&entry, iter))) {
|
@@ -579,72 +655,59 @@ int git_config_foreach_match(
|
|
579
655
|
* Setters
|
580
656
|
**************/
|
581
657
|
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
} backend_use;
|
586
|
-
|
587
|
-
static const char *uses[] = {
|
588
|
-
"set",
|
589
|
-
"delete"
|
590
|
-
};
|
591
|
-
|
592
|
-
static int get_backend_for_use(git_config_backend **out,
|
593
|
-
git_config *cfg, const char *name, backend_use use)
|
594
|
-
{
|
658
|
+
static backend_instance *get_writer_instance(git_config *config)
|
659
|
+
{
|
660
|
+
backend_entry *entry;
|
595
661
|
size_t i;
|
596
|
-
backend_internal *backend;
|
597
662
|
|
598
|
-
|
663
|
+
git_vector_foreach(&config->writers, i, entry) {
|
664
|
+
if (entry->instance->backend->readonly)
|
665
|
+
continue;
|
599
666
|
|
600
|
-
|
601
|
-
|
602
|
-
"cannot %s value for '%s' when no config backends exist",
|
603
|
-
uses[use], name);
|
604
|
-
return GIT_ENOTFOUND;
|
605
|
-
}
|
667
|
+
if (entry->write_order < 0)
|
668
|
+
continue;
|
606
669
|
|
607
|
-
|
608
|
-
if (!backend->backend->readonly) {
|
609
|
-
*out = backend->backend;
|
610
|
-
return 0;
|
611
|
-
}
|
670
|
+
return entry->instance;
|
612
671
|
}
|
613
672
|
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
673
|
+
return NULL;
|
674
|
+
}
|
675
|
+
|
676
|
+
static git_config_backend *get_writer(git_config *config)
|
677
|
+
{
|
678
|
+
backend_instance *instance = get_writer_instance(config);
|
679
|
+
|
680
|
+
return instance ? instance->backend : NULL;
|
618
681
|
}
|
619
682
|
|
620
|
-
int git_config_delete_entry(git_config *
|
683
|
+
int git_config_delete_entry(git_config *config, const char *name)
|
621
684
|
{
|
622
685
|
git_config_backend *backend;
|
623
686
|
|
624
|
-
if (
|
625
|
-
return
|
687
|
+
if ((backend = get_writer(config)) == NULL)
|
688
|
+
return GIT_EREADONLY;
|
626
689
|
|
627
690
|
return backend->del(backend, name);
|
628
691
|
}
|
629
692
|
|
630
|
-
int git_config_set_int64(git_config *
|
693
|
+
int git_config_set_int64(git_config *config, const char *name, int64_t value)
|
631
694
|
{
|
632
695
|
char str_value[32]; /* All numbers should fit in here */
|
633
696
|
p_snprintf(str_value, sizeof(str_value), "%" PRId64, value);
|
634
|
-
return git_config_set_string(
|
697
|
+
return git_config_set_string(config, name, str_value);
|
635
698
|
}
|
636
699
|
|
637
|
-
int git_config_set_int32(git_config *
|
700
|
+
int git_config_set_int32(git_config *config, const char *name, int32_t value)
|
638
701
|
{
|
639
|
-
return git_config_set_int64(
|
702
|
+
return git_config_set_int64(config, name, (int64_t)value);
|
640
703
|
}
|
641
704
|
|
642
|
-
int git_config_set_bool(git_config *
|
705
|
+
int git_config_set_bool(git_config *config, const char *name, int value)
|
643
706
|
{
|
644
|
-
return git_config_set_string(
|
707
|
+
return git_config_set_string(config, name, value ? "true" : "false");
|
645
708
|
}
|
646
709
|
|
647
|
-
int git_config_set_string(git_config *
|
710
|
+
int git_config_set_string(git_config *config, const char *name, const char *value)
|
648
711
|
{
|
649
712
|
int error;
|
650
713
|
git_config_backend *backend;
|
@@ -654,13 +717,15 @@ int git_config_set_string(git_config *cfg, const char *name, const char *value)
|
|
654
717
|
return -1;
|
655
718
|
}
|
656
719
|
|
657
|
-
if (
|
658
|
-
|
720
|
+
if ((backend = get_writer(config)) == NULL) {
|
721
|
+
git_error_set(GIT_ERROR_CONFIG, "cannot set '%s': the configuration is read-only", name);
|
722
|
+
return GIT_EREADONLY;
|
723
|
+
}
|
659
724
|
|
660
725
|
error = backend->set(backend, name, value);
|
661
726
|
|
662
|
-
if (!error && GIT_REFCOUNT_OWNER(
|
663
|
-
git_repository__configmap_lookup_cache_clear(GIT_REFCOUNT_OWNER(
|
727
|
+
if (!error && GIT_REFCOUNT_OWNER(config) != NULL)
|
728
|
+
git_repository__configmap_lookup_cache_clear(GIT_REFCOUNT_OWNER(config));
|
664
729
|
|
665
730
|
return error;
|
666
731
|
}
|
@@ -714,16 +779,18 @@ enum {
|
|
714
779
|
|
715
780
|
static int get_entry(
|
716
781
|
git_config_entry **out,
|
717
|
-
const git_config *
|
782
|
+
const git_config *config,
|
718
783
|
const char *name,
|
719
784
|
bool normalize_name,
|
720
785
|
int want_errors)
|
721
786
|
{
|
787
|
+
backend_entry *entry;
|
788
|
+
git_config_backend *backend;
|
789
|
+
git_config_backend_entry *be;
|
722
790
|
int res = GIT_ENOTFOUND;
|
723
791
|
const char *key = name;
|
724
792
|
char *normalized = NULL;
|
725
793
|
size_t i;
|
726
|
-
backend_internal *internal;
|
727
794
|
|
728
795
|
*out = NULL;
|
729
796
|
|
@@ -734,21 +801,24 @@ static int get_entry(
|
|
734
801
|
}
|
735
802
|
|
736
803
|
res = GIT_ENOTFOUND;
|
737
|
-
git_vector_foreach(&
|
738
|
-
|
739
|
-
|
804
|
+
git_vector_foreach(&config->readers, i, entry) {
|
805
|
+
GIT_ASSERT(entry->instance && entry->instance->backend);
|
806
|
+
|
807
|
+
backend = entry->instance->backend;
|
808
|
+
res = backend->get(backend, key, &be);
|
740
809
|
|
741
|
-
|
742
|
-
|
810
|
+
if (res != GIT_ENOTFOUND) {
|
811
|
+
*out = &be->entry;
|
743
812
|
break;
|
813
|
+
}
|
744
814
|
}
|
745
815
|
|
746
816
|
git__free(normalized);
|
747
817
|
|
748
818
|
cleanup:
|
749
|
-
if (res == GIT_ENOTFOUND)
|
819
|
+
if (res == GIT_ENOTFOUND) {
|
750
820
|
res = (want_errors > GET_ALL_ERRORS) ? 0 : config_error_notfound(name);
|
751
|
-
else if (res && (want_errors == GET_NO_ERRORS)) {
|
821
|
+
} else if (res && (want_errors == GET_NO_ERRORS)) {
|
752
822
|
git_error_clear();
|
753
823
|
res = 0;
|
754
824
|
}
|
@@ -757,24 +827,24 @@ cleanup:
|
|
757
827
|
}
|
758
828
|
|
759
829
|
int git_config_get_entry(
|
760
|
-
git_config_entry **out, const git_config *
|
830
|
+
git_config_entry **out, const git_config *config, const char *name)
|
761
831
|
{
|
762
|
-
return get_entry(out,
|
832
|
+
return get_entry(out, config, name, true, GET_ALL_ERRORS);
|
763
833
|
}
|
764
834
|
|
765
835
|
int git_config__lookup_entry(
|
766
836
|
git_config_entry **out,
|
767
|
-
const git_config *
|
837
|
+
const git_config *config,
|
768
838
|
const char *key,
|
769
839
|
bool no_errors)
|
770
840
|
{
|
771
841
|
return get_entry(
|
772
|
-
out,
|
842
|
+
out, config, key, false, no_errors ? GET_NO_ERRORS : GET_NO_MISSING);
|
773
843
|
}
|
774
844
|
|
775
845
|
int git_config_get_mapped(
|
776
846
|
int *out,
|
777
|
-
const git_config *
|
847
|
+
const git_config *config,
|
778
848
|
const char *name,
|
779
849
|
const git_configmap *maps,
|
780
850
|
size_t map_n)
|
@@ -782,7 +852,7 @@ int git_config_get_mapped(
|
|
782
852
|
git_config_entry *entry;
|
783
853
|
int ret;
|
784
854
|
|
785
|
-
if ((ret = get_entry(&entry,
|
855
|
+
if ((ret = get_entry(&entry, config, name, true, GET_ALL_ERRORS)) < 0)
|
786
856
|
return ret;
|
787
857
|
|
788
858
|
ret = git_config_lookup_map_value(out, maps, map_n, entry->value);
|
@@ -791,12 +861,12 @@ int git_config_get_mapped(
|
|
791
861
|
return ret;
|
792
862
|
}
|
793
863
|
|
794
|
-
int git_config_get_int64(int64_t *out, const git_config *
|
864
|
+
int git_config_get_int64(int64_t *out, const git_config *config, const char *name)
|
795
865
|
{
|
796
866
|
git_config_entry *entry;
|
797
867
|
int ret;
|
798
868
|
|
799
|
-
if ((ret = get_entry(&entry,
|
869
|
+
if ((ret = get_entry(&entry, config, name, true, GET_ALL_ERRORS)) < 0)
|
800
870
|
return ret;
|
801
871
|
|
802
872
|
ret = git_config_parse_int64(out, entry->value);
|
@@ -805,12 +875,12 @@ int git_config_get_int64(int64_t *out, const git_config *cfg, const char *name)
|
|
805
875
|
return ret;
|
806
876
|
}
|
807
877
|
|
808
|
-
int git_config_get_int32(int32_t *out, const git_config *
|
878
|
+
int git_config_get_int32(int32_t *out, const git_config *config, const char *name)
|
809
879
|
{
|
810
880
|
git_config_entry *entry;
|
811
881
|
int ret;
|
812
882
|
|
813
|
-
if ((ret = get_entry(&entry,
|
883
|
+
if ((ret = get_entry(&entry, config, name, true, GET_ALL_ERRORS)) < 0)
|
814
884
|
return ret;
|
815
885
|
|
816
886
|
ret = git_config_parse_int32(out, entry->value);
|
@@ -819,12 +889,12 @@ int git_config_get_int32(int32_t *out, const git_config *cfg, const char *name)
|
|
819
889
|
return ret;
|
820
890
|
}
|
821
891
|
|
822
|
-
int git_config_get_bool(int *out, const git_config *
|
892
|
+
int git_config_get_bool(int *out, const git_config *config, const char *name)
|
823
893
|
{
|
824
894
|
git_config_entry *entry;
|
825
895
|
int ret;
|
826
896
|
|
827
|
-
if ((ret = get_entry(&entry,
|
897
|
+
if ((ret = get_entry(&entry, config, name, true, GET_ALL_ERRORS)) < 0)
|
828
898
|
return ret;
|
829
899
|
|
830
900
|
ret = git_config_parse_bool(out, entry->value);
|
@@ -833,16 +903,15 @@ int git_config_get_bool(int *out, const git_config *cfg, const char *name)
|
|
833
903
|
return ret;
|
834
904
|
}
|
835
905
|
|
836
|
-
static int is_readonly(const git_config *
|
906
|
+
static int is_readonly(const git_config *config)
|
837
907
|
{
|
908
|
+
backend_entry *entry;
|
838
909
|
size_t i;
|
839
|
-
backend_internal *internal;
|
840
910
|
|
841
|
-
git_vector_foreach(&
|
842
|
-
|
843
|
-
continue;
|
911
|
+
git_vector_foreach(&config->writers, i, entry) {
|
912
|
+
GIT_ASSERT(entry->instance && entry->instance->backend);
|
844
913
|
|
845
|
-
if (!
|
914
|
+
if (!entry->instance->backend->readonly)
|
846
915
|
return 0;
|
847
916
|
}
|
848
917
|
|
@@ -873,21 +942,21 @@ int git_config_parse_path(git_buf *out, const char *value)
|
|
873
942
|
|
874
943
|
int git_config_get_path(
|
875
944
|
git_buf *out,
|
876
|
-
const git_config *
|
945
|
+
const git_config *config,
|
877
946
|
const char *name)
|
878
947
|
{
|
879
|
-
GIT_BUF_WRAP_PRIVATE(out, git_config__get_path,
|
948
|
+
GIT_BUF_WRAP_PRIVATE(out, git_config__get_path, config, name);
|
880
949
|
}
|
881
950
|
|
882
951
|
int git_config__get_path(
|
883
952
|
git_str *out,
|
884
|
-
const git_config *
|
953
|
+
const git_config *config,
|
885
954
|
const char *name)
|
886
955
|
{
|
887
956
|
git_config_entry *entry;
|
888
957
|
int error;
|
889
958
|
|
890
|
-
if ((error = get_entry(&entry,
|
959
|
+
if ((error = get_entry(&entry, config, name, true, GET_ALL_ERRORS)) < 0)
|
891
960
|
return error;
|
892
961
|
|
893
962
|
error = git_config__parse_path(out, entry->value);
|
@@ -897,17 +966,17 @@ int git_config__get_path(
|
|
897
966
|
}
|
898
967
|
|
899
968
|
int git_config_get_string(
|
900
|
-
const char **out, const git_config *
|
969
|
+
const char **out, const git_config *config, const char *name)
|
901
970
|
{
|
902
971
|
git_config_entry *entry;
|
903
972
|
int ret;
|
904
973
|
|
905
|
-
if (!is_readonly(
|
974
|
+
if (!is_readonly(config)) {
|
906
975
|
git_error_set(GIT_ERROR_CONFIG, "get_string called on a live config object");
|
907
976
|
return -1;
|
908
977
|
}
|
909
978
|
|
910
|
-
ret = get_entry(&entry,
|
979
|
+
ret = get_entry(&entry, config, name, true, GET_ALL_ERRORS);
|
911
980
|
*out = !ret ? (entry->value ? entry->value : "") : NULL;
|
912
981
|
|
913
982
|
git_config_entry_free(entry);
|
@@ -916,22 +985,22 @@ int git_config_get_string(
|
|
916
985
|
}
|
917
986
|
|
918
987
|
int git_config_get_string_buf(
|
919
|
-
git_buf *out, const git_config *
|
988
|
+
git_buf *out, const git_config *config, const char *name)
|
920
989
|
{
|
921
|
-
GIT_BUF_WRAP_PRIVATE(out, git_config__get_string_buf,
|
990
|
+
GIT_BUF_WRAP_PRIVATE(out, git_config__get_string_buf, config, name);
|
922
991
|
}
|
923
992
|
|
924
993
|
int git_config__get_string_buf(
|
925
|
-
git_str *out, const git_config *
|
994
|
+
git_str *out, const git_config *config, const char *name)
|
926
995
|
{
|
927
996
|
git_config_entry *entry;
|
928
997
|
int ret;
|
929
998
|
const char *str;
|
930
999
|
|
931
1000
|
GIT_ASSERT_ARG(out);
|
932
|
-
GIT_ASSERT_ARG(
|
1001
|
+
GIT_ASSERT_ARG(config);
|
933
1002
|
|
934
|
-
ret = get_entry(&entry,
|
1003
|
+
ret = get_entry(&entry, config, name, true, GET_ALL_ERRORS);
|
935
1004
|
str = !ret ? (entry->value ? entry->value : "") : NULL;
|
936
1005
|
|
937
1006
|
if (str)
|
@@ -943,12 +1012,12 @@ int git_config__get_string_buf(
|
|
943
1012
|
}
|
944
1013
|
|
945
1014
|
char *git_config__get_string_force(
|
946
|
-
const git_config *
|
1015
|
+
const git_config *config, const char *key, const char *fallback_value)
|
947
1016
|
{
|
948
1017
|
git_config_entry *entry;
|
949
1018
|
char *ret;
|
950
1019
|
|
951
|
-
get_entry(&entry,
|
1020
|
+
get_entry(&entry, config, key, false, GET_NO_ERRORS);
|
952
1021
|
ret = (entry && entry->value) ? git__strdup(entry->value) : fallback_value ? git__strdup(fallback_value) : NULL;
|
953
1022
|
git_config_entry_free(entry);
|
954
1023
|
|
@@ -956,12 +1025,12 @@ char *git_config__get_string_force(
|
|
956
1025
|
}
|
957
1026
|
|
958
1027
|
int git_config__get_bool_force(
|
959
|
-
const git_config *
|
1028
|
+
const git_config *config, const char *key, int fallback_value)
|
960
1029
|
{
|
961
1030
|
int val = fallback_value;
|
962
1031
|
git_config_entry *entry;
|
963
1032
|
|
964
|
-
get_entry(&entry,
|
1033
|
+
get_entry(&entry, config, key, false, GET_NO_ERRORS);
|
965
1034
|
|
966
1035
|
if (entry && git_config_parse_bool(&val, entry->value) < 0)
|
967
1036
|
git_error_clear();
|
@@ -971,12 +1040,12 @@ int git_config__get_bool_force(
|
|
971
1040
|
}
|
972
1041
|
|
973
1042
|
int git_config__get_int_force(
|
974
|
-
const git_config *
|
1043
|
+
const git_config *config, const char *key, int fallback_value)
|
975
1044
|
{
|
976
1045
|
int32_t val = (int32_t)fallback_value;
|
977
1046
|
git_config_entry *entry;
|
978
1047
|
|
979
|
-
get_entry(&entry,
|
1048
|
+
get_entry(&entry, config, key, false, GET_NO_ERRORS);
|
980
1049
|
|
981
1050
|
if (entry && git_config_parse_int32(&val, entry->value) < 0)
|
982
1051
|
git_error_clear();
|
@@ -986,21 +1055,21 @@ int git_config__get_int_force(
|
|
986
1055
|
}
|
987
1056
|
|
988
1057
|
int git_config_get_multivar_foreach(
|
989
|
-
const git_config *
|
1058
|
+
const git_config *config, const char *name, const char *regexp,
|
990
1059
|
git_config_foreach_cb cb, void *payload)
|
991
1060
|
{
|
992
1061
|
int err, found;
|
993
1062
|
git_config_iterator *iter;
|
994
|
-
|
1063
|
+
git_config_backend_entry *be;
|
995
1064
|
|
996
|
-
if ((err = git_config_multivar_iterator_new(&iter,
|
1065
|
+
if ((err = git_config_multivar_iterator_new(&iter, config, name, regexp)) < 0)
|
997
1066
|
return err;
|
998
1067
|
|
999
1068
|
found = 0;
|
1000
|
-
while ((err = iter->next(&
|
1069
|
+
while ((err = iter->next(&be, iter)) == 0) {
|
1001
1070
|
found = 1;
|
1002
1071
|
|
1003
|
-
if ((err = cb(entry, payload)) != 0) {
|
1072
|
+
if ((err = cb(&be->entry, payload)) != 0) {
|
1004
1073
|
git_error_set_after_callback(err);
|
1005
1074
|
break;
|
1006
1075
|
}
|
@@ -1024,19 +1093,21 @@ typedef struct {
|
|
1024
1093
|
int have_regex;
|
1025
1094
|
} multivar_iter;
|
1026
1095
|
|
1027
|
-
static int multivar_iter_next(
|
1096
|
+
static int multivar_iter_next(
|
1097
|
+
git_config_backend_entry **entry,
|
1098
|
+
git_config_iterator *_iter)
|
1028
1099
|
{
|
1029
1100
|
multivar_iter *iter = (multivar_iter *) _iter;
|
1030
1101
|
int error = 0;
|
1031
1102
|
|
1032
1103
|
while ((error = iter->iter->next(entry, iter->iter)) == 0) {
|
1033
|
-
if (git__strcmp(iter->name, (*entry)->name))
|
1104
|
+
if (git__strcmp(iter->name, (*entry)->entry.name))
|
1034
1105
|
continue;
|
1035
1106
|
|
1036
1107
|
if (!iter->have_regex)
|
1037
1108
|
return 0;
|
1038
1109
|
|
1039
|
-
if (git_regexp_match(&iter->regex, (*entry)->value) == 0)
|
1110
|
+
if (git_regexp_match(&iter->regex, (*entry)->entry.value) == 0)
|
1040
1111
|
return 0;
|
1041
1112
|
}
|
1042
1113
|
|
@@ -1055,13 +1126,13 @@ static void multivar_iter_free(git_config_iterator *_iter)
|
|
1055
1126
|
git__free(iter);
|
1056
1127
|
}
|
1057
1128
|
|
1058
|
-
int git_config_multivar_iterator_new(git_config_iterator **out, const git_config *
|
1129
|
+
int git_config_multivar_iterator_new(git_config_iterator **out, const git_config *config, const char *name, const char *regexp)
|
1059
1130
|
{
|
1060
1131
|
multivar_iter *iter = NULL;
|
1061
1132
|
git_config_iterator *inner = NULL;
|
1062
1133
|
int error;
|
1063
1134
|
|
1064
|
-
if ((error = git_config_iterator_new(&inner,
|
1135
|
+
if ((error = git_config_iterator_new(&inner, config)) < 0)
|
1065
1136
|
return error;
|
1066
1137
|
|
1067
1138
|
iter = git__calloc(1, sizeof(multivar_iter));
|
@@ -1092,29 +1163,38 @@ on_error:
|
|
1092
1163
|
return error;
|
1093
1164
|
}
|
1094
1165
|
|
1095
|
-
int git_config_set_multivar(git_config *
|
1166
|
+
int git_config_set_multivar(git_config *config, const char *name, const char *regexp, const char *value)
|
1096
1167
|
{
|
1097
1168
|
git_config_backend *backend;
|
1098
1169
|
|
1099
|
-
if (
|
1100
|
-
|
1170
|
+
if ((backend = get_writer(config)) == NULL) {
|
1171
|
+
git_error_set(GIT_ERROR_CONFIG, "cannot set '%s': the configuration is read-only", name);
|
1172
|
+
return GIT_EREADONLY;
|
1173
|
+
}
|
1101
1174
|
|
1102
1175
|
return backend->set_multivar(backend, name, regexp, value);
|
1103
1176
|
}
|
1104
1177
|
|
1105
|
-
int git_config_delete_multivar(git_config *
|
1178
|
+
int git_config_delete_multivar(git_config *config, const char *name, const char *regexp)
|
1106
1179
|
{
|
1107
1180
|
git_config_backend *backend;
|
1108
1181
|
|
1109
|
-
if (
|
1110
|
-
return
|
1182
|
+
if ((backend = get_writer(config)) == NULL)
|
1183
|
+
return GIT_EREADONLY;
|
1111
1184
|
|
1112
1185
|
return backend->del_multivar(backend, name, regexp);
|
1113
1186
|
}
|
1114
1187
|
|
1115
1188
|
int git_config_next(git_config_entry **entry, git_config_iterator *iter)
|
1116
1189
|
{
|
1117
|
-
|
1190
|
+
git_config_backend_entry *be;
|
1191
|
+
int error;
|
1192
|
+
|
1193
|
+
if ((error = iter->next(&be, iter)) != 0)
|
1194
|
+
return error;
|
1195
|
+
|
1196
|
+
*entry = &be->entry;
|
1197
|
+
return 0;
|
1118
1198
|
}
|
1119
1199
|
|
1120
1200
|
void git_config_iterator_free(git_config_iterator *iter)
|
@@ -1218,79 +1298,77 @@ int git_config__global_location(git_str *buf)
|
|
1218
1298
|
int git_config_open_default(git_config **out)
|
1219
1299
|
{
|
1220
1300
|
int error;
|
1221
|
-
git_config *
|
1301
|
+
git_config *config = NULL;
|
1222
1302
|
git_str buf = GIT_STR_INIT;
|
1223
1303
|
|
1224
|
-
if ((error = git_config_new(&
|
1304
|
+
if ((error = git_config_new(&config)) < 0)
|
1225
1305
|
return error;
|
1226
1306
|
|
1227
1307
|
if (!git_config__find_global(&buf) ||
|
1228
1308
|
!git_config__global_location(&buf)) {
|
1229
|
-
error = git_config_add_file_ondisk(
|
1309
|
+
error = git_config_add_file_ondisk(config, buf.ptr,
|
1230
1310
|
GIT_CONFIG_LEVEL_GLOBAL, NULL, 0);
|
1231
1311
|
}
|
1232
1312
|
|
1233
1313
|
if (!error && !git_config__find_xdg(&buf))
|
1234
|
-
error = git_config_add_file_ondisk(
|
1314
|
+
error = git_config_add_file_ondisk(config, buf.ptr,
|
1235
1315
|
GIT_CONFIG_LEVEL_XDG, NULL, 0);
|
1236
1316
|
|
1237
1317
|
if (!error && !git_config__find_system(&buf))
|
1238
|
-
error = git_config_add_file_ondisk(
|
1318
|
+
error = git_config_add_file_ondisk(config, buf.ptr,
|
1239
1319
|
GIT_CONFIG_LEVEL_SYSTEM, NULL, 0);
|
1240
1320
|
|
1241
1321
|
if (!error && !git_config__find_programdata(&buf))
|
1242
|
-
error = git_config_add_file_ondisk(
|
1322
|
+
error = git_config_add_file_ondisk(config, buf.ptr,
|
1243
1323
|
GIT_CONFIG_LEVEL_PROGRAMDATA, NULL, 0);
|
1244
1324
|
|
1245
1325
|
git_str_dispose(&buf);
|
1246
1326
|
|
1247
1327
|
if (error) {
|
1248
|
-
git_config_free(
|
1249
|
-
|
1328
|
+
git_config_free(config);
|
1329
|
+
config = NULL;
|
1250
1330
|
}
|
1251
1331
|
|
1252
|
-
*out =
|
1332
|
+
*out = config;
|
1253
1333
|
|
1254
1334
|
return error;
|
1255
1335
|
}
|
1256
1336
|
|
1257
|
-
int git_config_lock(git_transaction **out, git_config *
|
1337
|
+
int git_config_lock(git_transaction **out, git_config *config)
|
1258
1338
|
{
|
1339
|
+
backend_instance *instance;
|
1259
1340
|
int error;
|
1260
|
-
git_config_backend *backend;
|
1261
|
-
backend_internal *internal;
|
1262
1341
|
|
1263
|
-
GIT_ASSERT_ARG(
|
1342
|
+
GIT_ASSERT_ARG(config);
|
1264
1343
|
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
return -1;
|
1344
|
+
if ((instance = get_writer_instance(config)) == NULL) {
|
1345
|
+
git_error_set(GIT_ERROR_CONFIG, "cannot lock: the configuration is read-only");
|
1346
|
+
return GIT_EREADONLY;
|
1269
1347
|
}
|
1270
|
-
backend = internal->backend;
|
1271
1348
|
|
1272
|
-
if ((error = backend->lock(backend)) < 0
|
1349
|
+
if ((error = instance->backend->lock(instance->backend)) < 0 ||
|
1350
|
+
(error = git_transaction_config_new(out, config, instance)) < 0)
|
1273
1351
|
return error;
|
1274
1352
|
|
1275
|
-
|
1353
|
+
GIT_REFCOUNT_INC(instance);
|
1354
|
+
return 0;
|
1276
1355
|
}
|
1277
1356
|
|
1278
|
-
int git_config_unlock(
|
1357
|
+
int git_config_unlock(
|
1358
|
+
git_config *config,
|
1359
|
+
void *data,
|
1360
|
+
int commit)
|
1279
1361
|
{
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
GIT_ASSERT_ARG(cfg);
|
1362
|
+
backend_instance *instance = data;
|
1363
|
+
int error;
|
1284
1364
|
|
1285
|
-
|
1286
|
-
|
1287
|
-
git_error_set(GIT_ERROR_CONFIG, "cannot lock; the config has no backends");
|
1288
|
-
return -1;
|
1289
|
-
}
|
1365
|
+
GIT_ASSERT_ARG(config && data);
|
1366
|
+
GIT_UNUSED(config);
|
1290
1367
|
|
1291
|
-
|
1368
|
+
error = instance->backend->unlock(instance->backend, commit);
|
1369
|
+
GIT_REFCOUNT_DEC(instance, backend_instance_free);
|
1292
1370
|
|
1293
|
-
return
|
1371
|
+
return error;
|
1294
1372
|
}
|
1295
1373
|
|
1296
1374
|
/***********
|
@@ -1447,7 +1525,7 @@ static int normalize_section(char *start, char *end)
|
|
1447
1525
|
for (scan = start; *scan; ++scan) {
|
1448
1526
|
if (end && scan >= end)
|
1449
1527
|
break;
|
1450
|
-
if (
|
1528
|
+
if (git__isalnum(*scan))
|
1451
1529
|
*scan = (char)git__tolower(*scan);
|
1452
1530
|
else if (*scan != '-' || scan == start)
|
1453
1531
|
return GIT_EINVALIDSPEC;
|
@@ -1509,19 +1587,32 @@ static int rename_config_entries_cb(
|
|
1509
1587
|
int error = 0;
|
1510
1588
|
struct rename_data *data = (struct rename_data *)payload;
|
1511
1589
|
size_t base_len = git_str_len(data->name);
|
1590
|
+
git_str value = GIT_STR_INIT;
|
1591
|
+
|
1592
|
+
if (base_len > 0) {
|
1593
|
+
if ((error = git_str_puts(data->name,
|
1594
|
+
entry->name + data->old_len)) < 0 ||
|
1595
|
+
(error = git_config_set_multivar(
|
1596
|
+
data->config, git_str_cstr(data->name), "^$",
|
1597
|
+
entry->value)) < 0)
|
1598
|
+
goto cleanup;
|
1599
|
+
}
|
1512
1600
|
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
error = git_config_set_string(
|
1517
|
-
data->config, git_str_cstr(data->name), entry->value);
|
1601
|
+
git_str_putc(&value, '^');
|
1602
|
+
git_str_puts_escape_regex(&value, entry->value);
|
1603
|
+
git_str_putc(&value, '$');
|
1518
1604
|
|
1519
|
-
|
1605
|
+
if (git_str_oom(&value)) {
|
1606
|
+
error = -1;
|
1607
|
+
goto cleanup;
|
1520
1608
|
}
|
1521
1609
|
|
1522
|
-
|
1523
|
-
|
1610
|
+
error = git_config_delete_multivar(
|
1611
|
+
data->config, entry->name, git_str_cstr(&value));
|
1524
1612
|
|
1613
|
+
cleanup:
|
1614
|
+
git_str_truncate(data->name, base_len);
|
1615
|
+
git_str_dispose(&value);
|
1525
1616
|
return error;
|
1526
1617
|
}
|
1527
1618
|
|