rugged 1.7.2 → 1.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +4 -4
- data/ext/rugged/rugged.c +12 -1
- data/ext/rugged/rugged_blame.c +22 -6
- data/ext/rugged/rugged_blob.c +24 -9
- data/ext/rugged/rugged_branch.c +10 -7
- data/ext/rugged/rugged_branch_collection.c +8 -6
- data/ext/rugged/rugged_commit.c +7 -6
- data/ext/rugged/rugged_config.c +20 -11
- data/ext/rugged/rugged_diff.c +26 -12
- data/ext/rugged/rugged_diff_hunk.c +2 -1
- data/ext/rugged/rugged_index.c +39 -29
- data/ext/rugged/rugged_note.c +7 -6
- data/ext/rugged/rugged_object.c +3 -2
- data/ext/rugged/rugged_patch.c +23 -9
- data/ext/rugged/rugged_rebase.c +22 -10
- data/ext/rugged/rugged_reference.c +22 -13
- data/ext/rugged/rugged_reference_collection.c +9 -7
- data/ext/rugged/rugged_remote.c +23 -12
- data/ext/rugged/rugged_remote_collection.c +11 -9
- data/ext/rugged/rugged_repo.c +60 -45
- data/ext/rugged/rugged_revwalk.c +22 -12
- data/ext/rugged/rugged_submodule.c +23 -20
- data/ext/rugged/rugged_submodule_collection.c +20 -9
- data/ext/rugged/rugged_tag.c +6 -4
- data/ext/rugged/rugged_tag_collection.c +7 -5
- data/ext/rugged/rugged_tree.c +27 -15
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +3 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -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 +30 -19
- 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 +3 -3
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
- 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 +134 -4
- 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 +100 -15
- 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 +50 -3
- 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 -25
- 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 +12 -3
- 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 +113 -25
- 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 +25 -4
- 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 +46 -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 +3 -4
- 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 +31 -5
- 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 +55 -21
- 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 +17 -5
- 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 +192 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +93 -1
- data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +390 -299
- 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 +101 -89
- 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 +195 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/delta.c +5 -1
- 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 +13 -20
- 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_stats.c +19 -12
- 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/fetchhead.c +1 -1
- 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 +76 -98
- data/vendor/libgit2/src/libgit2/index.h +5 -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 +36 -40
- 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 +43 -38
- data/vendor/libgit2/src/libgit2/merge.h +4 -0
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
- data/vendor/libgit2/src/libgit2/message.c +1 -1
- data/vendor/libgit2/src/libgit2/midx.c +30 -18
- 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 +7 -10
- data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
- 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 +36 -10
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +33 -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 +41 -13
- 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 +125 -62
- data/vendor/libgit2/src/libgit2/remote.h +0 -1
- data/vendor/libgit2/src/libgit2/repository.c +235 -54
- 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/socket.c +30 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +118 -68
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +4 -2
- 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/auth_sspi.c +2 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/git.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 +124 -81
- 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 +16 -8
- data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
- 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 +386 -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 +7 -10
- 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 +81 -10
- data/vendor/libgit2/src/util/fs_path.h +29 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +24 -7
- 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/builtin.c +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +148 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +425 -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 +17 -11
- 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 +223 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/runtime.c +2 -2
- 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 +20 -8
- data/vendor/libgit2/src/util/str.h +5 -3
- 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 +706 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +18 -5
- data/vendor/libgit2/src/util/util.h +5 -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/path_w32.c +81 -5
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +522 -0
- metadata +60 -32
- 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,86 @@ 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
|
+
git_config_list_incref(memory_backend->config_list);
|
|
203
|
+
*out = &entry->base;
|
|
204
|
+
return 0;
|
|
105
205
|
}
|
|
106
206
|
|
|
107
207
|
static int config_memory_iterator(
|
|
@@ -109,18 +209,18 @@ static int config_memory_iterator(
|
|
|
109
209
|
git_config_backend *backend)
|
|
110
210
|
{
|
|
111
211
|
config_memory_backend *memory_backend = (config_memory_backend *) backend;
|
|
112
|
-
|
|
212
|
+
git_config_list *config_list;
|
|
113
213
|
int error;
|
|
114
214
|
|
|
115
|
-
if ((error =
|
|
215
|
+
if ((error = git_config_list_dup(&config_list, memory_backend->config_list)) < 0)
|
|
116
216
|
goto out;
|
|
117
217
|
|
|
118
|
-
if ((error =
|
|
218
|
+
if ((error = git_config_list_iterator_new(iter, config_list)) < 0)
|
|
119
219
|
goto out;
|
|
120
220
|
|
|
121
221
|
out:
|
|
122
|
-
/* Let iterator delete duplicated
|
|
123
|
-
|
|
222
|
+
/* Let iterator delete duplicated config_list when it's done */
|
|
223
|
+
git_config_list_free(config_list);
|
|
124
224
|
return error;
|
|
125
225
|
}
|
|
126
226
|
|
|
@@ -177,28 +277,24 @@ static void config_memory_free(git_config_backend *_backend)
|
|
|
177
277
|
if (backend == NULL)
|
|
178
278
|
return;
|
|
179
279
|
|
|
180
|
-
|
|
280
|
+
git__free(backend->origin_path);
|
|
281
|
+
git__free(backend->backend_type);
|
|
282
|
+
git_config_list_free(backend->config_list);
|
|
283
|
+
git_strlist_free(backend->values, backend->values_len);
|
|
181
284
|
git_str_dispose(&backend->cfg);
|
|
182
285
|
git__free(backend);
|
|
183
286
|
}
|
|
184
287
|
|
|
185
|
-
|
|
288
|
+
static config_memory_backend *config_backend_new(
|
|
289
|
+
git_config_backend_memory_options *opts)
|
|
186
290
|
{
|
|
187
291
|
config_memory_backend *backend;
|
|
188
292
|
|
|
189
|
-
backend = git__calloc(1, sizeof(config_memory_backend))
|
|
190
|
-
|
|
293
|
+
if ((backend = git__calloc(1, sizeof(config_memory_backend))) == NULL)
|
|
294
|
+
return NULL;
|
|
191
295
|
|
|
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
|
-
}
|
|
296
|
+
if (git_config_list_new(&backend->config_list) < 0)
|
|
297
|
+
goto on_error;
|
|
202
298
|
|
|
203
299
|
backend->parent.version = GIT_CONFIG_BACKEND_VERSION;
|
|
204
300
|
backend->parent.readonly = 1;
|
|
@@ -214,7 +310,66 @@ int git_config_backend_from_string(git_config_backend **out, const char *cfg, si
|
|
|
214
310
|
backend->parent.snapshot = git_config_backend_snapshot;
|
|
215
311
|
backend->parent.free = config_memory_free;
|
|
216
312
|
|
|
313
|
+
backend->backend_type = git__strdup(opts && opts->backend_type ?
|
|
314
|
+
opts->backend_type : "in-memory");
|
|
315
|
+
|
|
316
|
+
if (backend->backend_type == NULL)
|
|
317
|
+
goto on_error;
|
|
318
|
+
|
|
319
|
+
if (opts && opts->origin_path &&
|
|
320
|
+
(backend->origin_path = git__strdup(opts->origin_path)) == NULL)
|
|
321
|
+
goto on_error;
|
|
322
|
+
|
|
323
|
+
return backend;
|
|
324
|
+
|
|
325
|
+
on_error:
|
|
326
|
+
git_config_list_free(backend->config_list);
|
|
327
|
+
git__free(backend->origin_path);
|
|
328
|
+
git__free(backend->backend_type);
|
|
329
|
+
git__free(backend);
|
|
330
|
+
return NULL;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
int git_config_backend_from_string(
|
|
334
|
+
git_config_backend **out,
|
|
335
|
+
const char *cfg,
|
|
336
|
+
size_t len,
|
|
337
|
+
git_config_backend_memory_options *opts)
|
|
338
|
+
{
|
|
339
|
+
config_memory_backend *backend;
|
|
340
|
+
|
|
341
|
+
if ((backend = config_backend_new(opts)) == NULL)
|
|
342
|
+
return -1;
|
|
343
|
+
|
|
344
|
+
if (git_str_set(&backend->cfg, cfg, len) < 0) {
|
|
345
|
+
git_config_list_free(backend->config_list);
|
|
346
|
+
git__free(backend);
|
|
347
|
+
return -1;
|
|
348
|
+
}
|
|
349
|
+
|
|
217
350
|
*out = (git_config_backend *)backend;
|
|
351
|
+
return 0;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
int git_config_backend_from_values(
|
|
355
|
+
git_config_backend **out,
|
|
356
|
+
const char **values,
|
|
357
|
+
size_t len,
|
|
358
|
+
git_config_backend_memory_options *opts)
|
|
359
|
+
{
|
|
360
|
+
config_memory_backend *backend;
|
|
218
361
|
|
|
362
|
+
if ((backend = config_backend_new(opts)) == NULL)
|
|
363
|
+
return -1;
|
|
364
|
+
|
|
365
|
+
if (git_strlist_copy(&backend->values, values, len) < 0) {
|
|
366
|
+
git_config_list_free(backend->config_list);
|
|
367
|
+
git__free(backend);
|
|
368
|
+
return -1;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
backend->values_len = len;
|
|
372
|
+
|
|
373
|
+
*out = (git_config_backend *)backend;
|
|
219
374
|
return 0;
|
|
220
375
|
}
|
|
@@ -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,10 +280,10 @@ 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
|
-
char *str, *fixed
|
|
285
|
+
char *str, *fixed;
|
|
286
|
+
const char *esc;
|
|
286
287
|
size_t ptr_len = strlen(ptr), alloc_len;
|
|
287
288
|
|
|
288
289
|
*is_multi = false;
|
|
@@ -296,7 +297,8 @@ static int unescape_line(
|
|
|
296
297
|
|
|
297
298
|
while (*ptr != '\0') {
|
|
298
299
|
if (*ptr == '"') {
|
|
299
|
-
quote_count
|
|
300
|
+
if (quote_count)
|
|
301
|
+
(*quote_count)++;
|
|
300
302
|
} else if (*ptr != '\\') {
|
|
301
303
|
*fixed++ = *ptr;
|
|
302
304
|
} else {
|
|
@@ -358,7 +360,7 @@ static int parse_multiline_variable(git_config_parser *reader, git_str *value, i
|
|
|
358
360
|
goto next;
|
|
359
361
|
|
|
360
362
|
if ((error = unescape_line(&proc_line, &multiline,
|
|
361
|
-
line, in_quotes)) < 0)
|
|
363
|
+
line, &in_quotes)) < 0)
|
|
362
364
|
goto out;
|
|
363
365
|
|
|
364
366
|
/* Add this line to the multiline var */
|
|
@@ -382,7 +384,7 @@ out:
|
|
|
382
384
|
|
|
383
385
|
GIT_INLINE(bool) is_namechar(char c)
|
|
384
386
|
{
|
|
385
|
-
return
|
|
387
|
+
return git__isalnum(c) || c == '-';
|
|
386
388
|
}
|
|
387
389
|
|
|
388
390
|
static int parse_name(
|
|
@@ -445,7 +447,7 @@ static int parse_variable(git_config_parser *reader, char **var_name, char **var
|
|
|
445
447
|
while (git__isspace(value_start[0]))
|
|
446
448
|
value_start++;
|
|
447
449
|
|
|
448
|
-
if ((error = unescape_line(&value, &multiline, value_start,
|
|
450
|
+
if ((error = unescape_line(&value, &multiline, value_start, NULL)) < 0)
|
|
449
451
|
goto out;
|
|
450
452
|
|
|
451
453
|
if (multiline) {
|