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
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "attr_file.h"
|
|
14
14
|
#include "ignore.h"
|
|
15
15
|
#include "git2/oid.h"
|
|
16
|
+
#include "hashmap_str.h"
|
|
16
17
|
#include <ctype.h>
|
|
17
18
|
|
|
18
19
|
const char *git_attr__true = "[internal]__TRUE__";
|
|
@@ -254,7 +255,7 @@ int git_attr_foreach_ext(
|
|
|
254
255
|
git_attr_file *file;
|
|
255
256
|
git_attr_rule *rule;
|
|
256
257
|
git_attr_assignment *assign;
|
|
257
|
-
|
|
258
|
+
git_hashset_str seen = GIT_HASHSET_INIT;
|
|
258
259
|
git_dir_flag dir_flag = GIT_DIR_FLAG_UNKNOWN;
|
|
259
260
|
|
|
260
261
|
GIT_ASSERT_ARG(repo);
|
|
@@ -267,8 +268,7 @@ int git_attr_foreach_ext(
|
|
|
267
268
|
if (git_attr_path__init(&path, pathname, git_repository_workdir(repo), dir_flag) < 0)
|
|
268
269
|
return -1;
|
|
269
270
|
|
|
270
|
-
if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0
|
|
271
|
-
(error = git_strmap_new(&seen)) < 0)
|
|
271
|
+
if ((error = collect_attr_files(repo, NULL, opts, pathname, &files)) < 0)
|
|
272
272
|
goto cleanup;
|
|
273
273
|
|
|
274
274
|
git_vector_foreach(&files, i, file) {
|
|
@@ -277,10 +277,10 @@ int git_attr_foreach_ext(
|
|
|
277
277
|
|
|
278
278
|
git_vector_foreach(&rule->assigns, k, assign) {
|
|
279
279
|
/* skip if higher priority assignment was already seen */
|
|
280
|
-
if (
|
|
280
|
+
if (git_hashset_str_contains(&seen, assign->name))
|
|
281
281
|
continue;
|
|
282
282
|
|
|
283
|
-
if ((error =
|
|
283
|
+
if ((error = git_hashset_str_add(&seen, assign->name)) < 0)
|
|
284
284
|
goto cleanup;
|
|
285
285
|
|
|
286
286
|
error = callback(assign->name, assign->value, payload);
|
|
@@ -293,7 +293,7 @@ int git_attr_foreach_ext(
|
|
|
293
293
|
}
|
|
294
294
|
|
|
295
295
|
cleanup:
|
|
296
|
-
|
|
296
|
+
git_hashset_str_dispose(&seen);
|
|
297
297
|
release_attr_files(&files);
|
|
298
298
|
git_attr_path__free(&path);
|
|
299
299
|
|
|
@@ -384,6 +384,8 @@ static int attr_setup(
|
|
|
384
384
|
git_attr_file_source index_source = { GIT_ATTR_FILE_SOURCE_INDEX, NULL, GIT_ATTR_FILE, NULL };
|
|
385
385
|
git_attr_file_source head_source = { GIT_ATTR_FILE_SOURCE_HEAD, NULL, GIT_ATTR_FILE, NULL };
|
|
386
386
|
git_attr_file_source commit_source = { GIT_ATTR_FILE_SOURCE_COMMIT, NULL, GIT_ATTR_FILE, NULL };
|
|
387
|
+
git_attr_cache *attrcache;
|
|
388
|
+
const char *attr_cfg_file = NULL;
|
|
387
389
|
git_index *idx = NULL;
|
|
388
390
|
const char *workdir;
|
|
389
391
|
int error = 0;
|
|
@@ -407,8 +409,10 @@ static int attr_setup(
|
|
|
407
409
|
error = 0;
|
|
408
410
|
}
|
|
409
411
|
|
|
410
|
-
if ((
|
|
411
|
-
|
|
412
|
+
if ((attrcache = git_repository_attr_cache(repo)) != NULL)
|
|
413
|
+
attr_cfg_file = git_attr_cache_attributesfile(attrcache);
|
|
414
|
+
|
|
415
|
+
if ((error = preload_attr_file(repo, attr_session, NULL, attr_cfg_file)) < 0)
|
|
412
416
|
goto out;
|
|
413
417
|
|
|
414
418
|
if ((error = git_repository__item_path(&info, repo, GIT_REPOSITORY_ITEM_INFO)) < 0 ||
|
|
@@ -424,9 +428,13 @@ static int attr_setup(
|
|
|
424
428
|
goto out;
|
|
425
429
|
|
|
426
430
|
if ((error = git_repository_index__weakptr(&idx, repo)) < 0 ||
|
|
427
|
-
(error = preload_attr_source(repo, attr_session, &index_source)) < 0)
|
|
431
|
+
(error = preload_attr_source(repo, attr_session, &index_source)) < 0) {
|
|
432
|
+
if (error != GIT_ENOTFOUND)
|
|
428
433
|
goto out;
|
|
429
434
|
|
|
435
|
+
error = 0;
|
|
436
|
+
}
|
|
437
|
+
|
|
430
438
|
if ((opts && (opts->flags & GIT_ATTR_CHECK_INCLUDE_HEAD) != 0) &&
|
|
431
439
|
(error = preload_attr_source(repo, attr_session, &head_source)) < 0)
|
|
432
440
|
goto out;
|
|
@@ -460,6 +468,7 @@ int git_attr_add_macro(
|
|
|
460
468
|
{
|
|
461
469
|
int error;
|
|
462
470
|
git_attr_rule *macro = NULL;
|
|
471
|
+
git_attr_cache *attrcache;
|
|
463
472
|
git_pool *pool;
|
|
464
473
|
|
|
465
474
|
GIT_ASSERT_ARG(repo);
|
|
@@ -471,7 +480,8 @@ int git_attr_add_macro(
|
|
|
471
480
|
macro = git__calloc(1, sizeof(git_attr_rule));
|
|
472
481
|
GIT_ERROR_CHECK_ALLOC(macro);
|
|
473
482
|
|
|
474
|
-
|
|
483
|
+
attrcache = git_repository_attr_cache(repo);
|
|
484
|
+
pool = git_attr_cache_pool(attrcache);
|
|
475
485
|
|
|
476
486
|
macro->match.pattern = git_pool_strdup(pool, name);
|
|
477
487
|
GIT_ERROR_CHECK_ALLOC(macro->match.pattern);
|
|
@@ -614,7 +624,7 @@ static void release_attr_files(git_vector *files)
|
|
|
614
624
|
git_attr_file__free(file);
|
|
615
625
|
files->contents[i] = NULL;
|
|
616
626
|
}
|
|
617
|
-
|
|
627
|
+
git_vector_dispose(files);
|
|
618
628
|
}
|
|
619
629
|
|
|
620
630
|
static int collect_attr_files(
|
|
@@ -627,6 +637,8 @@ static int collect_attr_files(
|
|
|
627
637
|
int error = 0;
|
|
628
638
|
git_str dir = GIT_STR_INIT, attrfile = GIT_STR_INIT;
|
|
629
639
|
const char *workdir = git_repository_workdir(repo);
|
|
640
|
+
git_attr_cache *attrcache;
|
|
641
|
+
const char *attr_cfg_file = NULL;
|
|
630
642
|
attr_walk_up_info info = { NULL };
|
|
631
643
|
|
|
632
644
|
GIT_ASSERT(!git_fs_path_is_absolute(path));
|
|
@@ -675,8 +687,13 @@ static int collect_attr_files(
|
|
|
675
687
|
if (error < 0)
|
|
676
688
|
goto cleanup;
|
|
677
689
|
|
|
678
|
-
if (git_repository_attr_cache(repo)
|
|
679
|
-
|
|
690
|
+
if ((attrcache = git_repository_attr_cache(repo)) != NULL)
|
|
691
|
+
attr_cfg_file = git_attr_cache_attributesfile(attrcache);
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
if (attr_cfg_file) {
|
|
695
|
+
error = push_attr_file(repo, attr_session, files, NULL, attr_cfg_file);
|
|
696
|
+
|
|
680
697
|
if (error < 0)
|
|
681
698
|
goto cleanup;
|
|
682
699
|
}
|
|
@@ -69,7 +69,7 @@ int git_attr_file__clear_rules(git_attr_file *file, bool need_lock)
|
|
|
69
69
|
|
|
70
70
|
git_vector_foreach(&file->rules, i, rule)
|
|
71
71
|
git_attr_rule__free(rule);
|
|
72
|
-
|
|
72
|
+
git_vector_dispose(&file->rules);
|
|
73
73
|
|
|
74
74
|
if (need_lock)
|
|
75
75
|
git_mutex_unlock(&file->lock);
|
|
@@ -143,6 +143,8 @@ int git_attr_file__load(
|
|
|
143
143
|
blobsize = git_blob_rawsize(blob);
|
|
144
144
|
|
|
145
145
|
GIT_ERROR_CHECK_BLOBSIZE(blobsize);
|
|
146
|
+
if (blobsize > GIT_ATTR_MAX_FILE_SIZE) /* TODO: issue warning when warning API is available */
|
|
147
|
+
goto cleanup;
|
|
146
148
|
git_str_put(&content, git_blob_rawcontent(blob), (size_t)blobsize);
|
|
147
149
|
break;
|
|
148
150
|
}
|
|
@@ -155,6 +157,7 @@ int git_attr_file__load(
|
|
|
155
157
|
if (p_stat(entry->fullpath, &st) < 0 ||
|
|
156
158
|
S_ISDIR(st.st_mode) ||
|
|
157
159
|
(fd = git_futils_open_ro(entry->fullpath)) < 0 ||
|
|
160
|
+
(st.st_size > GIT_ATTR_MAX_FILE_SIZE) ||
|
|
158
161
|
(error = git_futils_readbuffer_fd(&content, fd, (size_t)st.st_size)) < 0)
|
|
159
162
|
nonexistent = true;
|
|
160
163
|
|
|
@@ -198,6 +201,8 @@ int git_attr_file__load(
|
|
|
198
201
|
blobsize = git_blob_rawsize(blob);
|
|
199
202
|
|
|
200
203
|
GIT_ERROR_CHECK_BLOBSIZE(blobsize);
|
|
204
|
+
if (blobsize > GIT_ATTR_MAX_FILE_SIZE) /* TODO: issue warning when warning API is available */
|
|
205
|
+
goto cleanup;
|
|
201
206
|
if ((error = git_str_put(&content,
|
|
202
207
|
git_blob_rawcontent(blob), (size_t)blobsize)) < 0)
|
|
203
208
|
goto cleanup;
|
|
@@ -342,7 +347,7 @@ int git_attr_file__parse_buffer(
|
|
|
342
347
|
{
|
|
343
348
|
const char *scan = data, *context = NULL;
|
|
344
349
|
git_attr_rule *rule = NULL;
|
|
345
|
-
int error = 0;
|
|
350
|
+
int ignorecase = 0, error = 0;
|
|
346
351
|
|
|
347
352
|
/* If subdir file path, convert context for file paths */
|
|
348
353
|
if (attrs->entry && git_fs_path_root(attrs->entry->path) < 0 &&
|
|
@@ -374,6 +379,13 @@ int git_attr_file__parse_buffer(
|
|
|
374
379
|
continue;
|
|
375
380
|
}
|
|
376
381
|
|
|
382
|
+
if (repo &&
|
|
383
|
+
(error = git_repository__configmap_lookup(&ignorecase, repo, GIT_CONFIGMAP_IGNORECASE)) < 0)
|
|
384
|
+
goto out;
|
|
385
|
+
|
|
386
|
+
if (ignorecase)
|
|
387
|
+
rule->match.flags |= GIT_ATTR_FNMATCH_ICASE;
|
|
388
|
+
|
|
377
389
|
if (rule->match.flags & GIT_ATTR_FNMATCH_MACRO) {
|
|
378
390
|
/* TODO: warning if macro found in file below repo root */
|
|
379
391
|
if (!allow_macros)
|
|
@@ -477,7 +489,7 @@ bool git_attr_fnmatch__match(
|
|
|
477
489
|
*/
|
|
478
490
|
if (match->containing_dir) {
|
|
479
491
|
if (match->flags & GIT_ATTR_FNMATCH_ICASE) {
|
|
480
|
-
if (
|
|
492
|
+
if (git__prefixcmp_icase(path->path, match->containing_dir))
|
|
481
493
|
return 0;
|
|
482
494
|
} else {
|
|
483
495
|
if (git__prefixcmp(path->path, match->containing_dir))
|
|
@@ -799,7 +811,7 @@ int git_attr_fnmatch__parse(
|
|
|
799
811
|
}
|
|
800
812
|
|
|
801
813
|
if (context) {
|
|
802
|
-
char *slash = strrchr(context, '/');
|
|
814
|
+
const char *slash = strrchr(context, '/');
|
|
803
815
|
size_t len;
|
|
804
816
|
if (slash) {
|
|
805
817
|
/* include the slash for easier matching */
|
|
@@ -991,7 +1003,7 @@ static void git_attr_rule__clear(git_attr_rule *rule)
|
|
|
991
1003
|
if (!(rule->match.flags & GIT_ATTR_FNMATCH_IGNORE)) {
|
|
992
1004
|
git_vector_foreach(&rule->assigns, i, assign)
|
|
993
1005
|
GIT_REFCOUNT_DEC(assign, git_attr_assignment__free);
|
|
994
|
-
|
|
1006
|
+
git_vector_dispose(&rule->assigns);
|
|
995
1007
|
}
|
|
996
1008
|
|
|
997
1009
|
/* match.pattern is stored in a git_pool, so no need to free */
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
#define GIT_ATTR_FILE_SYSTEM "gitattributes"
|
|
22
22
|
#define GIT_ATTR_FILE_XDG "attributes"
|
|
23
23
|
|
|
24
|
+
#define GIT_ATTR_MAX_FILE_SIZE 100 * 1024 * 1024
|
|
25
|
+
|
|
24
26
|
#define GIT_ATTR_FNMATCH_NEGATIVE (1U << 0)
|
|
25
27
|
#define GIT_ATTR_FNMATCH_DIRECTORY (1U << 1)
|
|
26
28
|
#define GIT_ATTR_FNMATCH_FULLPATH (1U << 2)
|
|
@@ -13,6 +13,38 @@
|
|
|
13
13
|
#include "sysdir.h"
|
|
14
14
|
#include "ignore.h"
|
|
15
15
|
#include "path.h"
|
|
16
|
+
#include "hashmap_str.h"
|
|
17
|
+
|
|
18
|
+
GIT_HASHMAP_STR_SETUP(git_attr_cache_filemap, git_attr_file_entry *);
|
|
19
|
+
GIT_HASHMAP_STR_SETUP(git_attr_cache_macromap, git_attr_rule *);
|
|
20
|
+
|
|
21
|
+
struct git_attr_cache {
|
|
22
|
+
char *cfg_attr_file; /* cached value of core.attributesfile */
|
|
23
|
+
char *cfg_excl_file; /* cached value of core.excludesfile */
|
|
24
|
+
|
|
25
|
+
/* hash path to git_attr_file_entry records */
|
|
26
|
+
git_attr_cache_filemap files;
|
|
27
|
+
/* hash name to git_attr_rule */
|
|
28
|
+
git_attr_cache_macromap macros;
|
|
29
|
+
|
|
30
|
+
git_mutex lock;
|
|
31
|
+
git_pool pool;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const char *git_attr_cache_attributesfile(git_attr_cache *cache)
|
|
35
|
+
{
|
|
36
|
+
return cache->cfg_attr_file;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const char *git_attr_cache_excludesfile(git_attr_cache *cache)
|
|
40
|
+
{
|
|
41
|
+
return cache->cfg_excl_file;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
git_pool *git_attr_cache_pool(git_attr_cache *cache)
|
|
45
|
+
{
|
|
46
|
+
return &cache->pool;
|
|
47
|
+
}
|
|
16
48
|
|
|
17
49
|
GIT_INLINE(int) attr_cache_lock(git_attr_cache *cache)
|
|
18
50
|
{
|
|
@@ -34,7 +66,12 @@ GIT_INLINE(void) attr_cache_unlock(git_attr_cache *cache)
|
|
|
34
66
|
GIT_INLINE(git_attr_file_entry *) attr_cache_lookup_entry(
|
|
35
67
|
git_attr_cache *cache, const char *path)
|
|
36
68
|
{
|
|
37
|
-
|
|
69
|
+
git_attr_file_entry *result;
|
|
70
|
+
|
|
71
|
+
if (git_attr_cache_filemap_get(&result, &cache->files, path) == 0)
|
|
72
|
+
return result;
|
|
73
|
+
|
|
74
|
+
return NULL;
|
|
38
75
|
}
|
|
39
76
|
|
|
40
77
|
int git_attr_cache__alloc_file_entry(
|
|
@@ -92,7 +129,7 @@ static int attr_cache_make_entry(
|
|
|
92
129
|
git_repository_workdir(repo), path, &cache->pool)) < 0)
|
|
93
130
|
return error;
|
|
94
131
|
|
|
95
|
-
if ((error =
|
|
132
|
+
if ((error = git_attr_cache_filemap_put(&cache->files, entry->path, entry)) < 0)
|
|
96
133
|
return error;
|
|
97
134
|
|
|
98
135
|
*out = entry;
|
|
@@ -271,12 +308,11 @@ bool git_attr_cache__is_cached(
|
|
|
271
308
|
{
|
|
272
309
|
git_attr_cache *cache = git_repository_attr_cache(repo);
|
|
273
310
|
git_attr_file_entry *entry;
|
|
274
|
-
git_strmap *files;
|
|
275
311
|
|
|
276
|
-
if (!cache
|
|
312
|
+
if (!cache)
|
|
277
313
|
return false;
|
|
278
314
|
|
|
279
|
-
if ((entry
|
|
315
|
+
if (git_attr_cache_filemap_get(&entry, &cache->files, filename) != 0)
|
|
280
316
|
return false;
|
|
281
317
|
|
|
282
318
|
return entry && (entry->file[source_type] != NULL);
|
|
@@ -318,6 +354,9 @@ static int attr_cache__lookup_path(
|
|
|
318
354
|
|
|
319
355
|
static void attr_cache__free(git_attr_cache *cache)
|
|
320
356
|
{
|
|
357
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
358
|
+
git_attr_rule *rule;
|
|
359
|
+
git_attr_file_entry *entry;
|
|
321
360
|
bool unlock;
|
|
322
361
|
|
|
323
362
|
if (!cache)
|
|
@@ -325,30 +364,24 @@ static void attr_cache__free(git_attr_cache *cache)
|
|
|
325
364
|
|
|
326
365
|
unlock = (attr_cache_lock(cache) == 0);
|
|
327
366
|
|
|
328
|
-
|
|
329
|
-
git_attr_file_entry *entry;
|
|
367
|
+
while (git_attr_cache_filemap_iterate(&iter, NULL, &entry, &cache->files) == 0) {
|
|
330
368
|
git_attr_file *file;
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
git_attr_file__free(file);
|
|
338
|
-
}
|
|
369
|
+
size_t i;
|
|
370
|
+
|
|
371
|
+
for (i = 0; i < GIT_ATTR_FILE_NUM_SOURCES; i++) {
|
|
372
|
+
if ((file = git_atomic_swap(entry->file[i], NULL)) != NULL) {
|
|
373
|
+
GIT_REFCOUNT_OWN(file, NULL);
|
|
374
|
+
git_attr_file__free(file);
|
|
339
375
|
}
|
|
340
|
-
}
|
|
341
|
-
git_strmap_free(cache->files);
|
|
376
|
+
}
|
|
342
377
|
}
|
|
343
378
|
|
|
344
|
-
|
|
345
|
-
|
|
379
|
+
iter = GIT_HASHMAP_ITER_INIT;
|
|
380
|
+
while (git_attr_cache_macromap_iterate(&iter, NULL, &rule, &cache->macros) == 0)
|
|
381
|
+
git_attr_rule__free(rule);
|
|
346
382
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
});
|
|
350
|
-
git_strmap_free(cache->macros);
|
|
351
|
-
}
|
|
383
|
+
git_attr_cache_filemap_dispose(&cache->files);
|
|
384
|
+
git_attr_cache_macromap_dispose(&cache->macros);
|
|
352
385
|
|
|
353
386
|
git_pool_clear(&cache->pool);
|
|
354
387
|
|
|
@@ -401,9 +434,7 @@ int git_attr_cache__init(git_repository *repo)
|
|
|
401
434
|
/* allocate hashtable for attribute and ignore file contents,
|
|
402
435
|
* hashtable for attribute macros, and string pool
|
|
403
436
|
*/
|
|
404
|
-
if ((ret =
|
|
405
|
-
(ret = git_strmap_new(&cache->macros)) < 0 ||
|
|
406
|
-
(ret = git_pool_init(&cache->pool, 1)) < 0)
|
|
437
|
+
if ((ret = git_pool_init(&cache->pool, 1)) < 0)
|
|
407
438
|
goto cancel;
|
|
408
439
|
|
|
409
440
|
if (git_atomic_compare_and_swap(&repo->attrcache, NULL, cache) != NULL)
|
|
@@ -457,11 +488,11 @@ int git_attr_cache__insert_macro(git_repository *repo, git_attr_rule *macro)
|
|
|
457
488
|
goto out;
|
|
458
489
|
locked = true;
|
|
459
490
|
|
|
460
|
-
if ((preexisting
|
|
461
|
-
|
|
491
|
+
if (git_attr_cache_macromap_get(&preexisting, &cache->macros, macro->match.pattern) == 0)
|
|
492
|
+
git_attr_rule__free(preexisting);
|
|
462
493
|
|
|
463
|
-
if ((error =
|
|
464
|
-
|
|
494
|
+
if ((error = git_attr_cache_macromap_put(&cache->macros, macro->match.pattern, macro)) < 0)
|
|
495
|
+
goto out;
|
|
465
496
|
|
|
466
497
|
out:
|
|
467
498
|
if (locked)
|
|
@@ -472,7 +503,12 @@ out:
|
|
|
472
503
|
git_attr_rule *git_attr_cache__lookup_macro(
|
|
473
504
|
git_repository *repo, const char *name)
|
|
474
505
|
{
|
|
475
|
-
|
|
506
|
+
git_attr_cache *cache = git_repository_attr_cache(repo);
|
|
507
|
+
git_attr_rule *rule;
|
|
508
|
+
|
|
509
|
+
if (!cache ||
|
|
510
|
+
git_attr_cache_macromap_get(&rule, &cache->macros, name) != 0)
|
|
511
|
+
return NULL;
|
|
476
512
|
|
|
477
|
-
return
|
|
513
|
+
return rule;
|
|
478
514
|
}
|
|
@@ -10,22 +10,18 @@
|
|
|
10
10
|
#include "common.h"
|
|
11
11
|
|
|
12
12
|
#include "attr_file.h"
|
|
13
|
-
#include "strmap.h"
|
|
14
13
|
|
|
15
14
|
#define GIT_ATTR_CONFIG "core.attributesfile"
|
|
16
15
|
#define GIT_IGNORE_CONFIG "core.excludesfile"
|
|
17
16
|
|
|
18
|
-
typedef struct
|
|
19
|
-
char *cfg_attr_file; /* cached value of core.attributesfile */
|
|
20
|
-
char *cfg_excl_file; /* cached value of core.excludesfile */
|
|
21
|
-
git_strmap *files; /* hash path to git_attr_cache_entry records */
|
|
22
|
-
git_strmap *macros; /* hash name to vector<git_attr_assignment> */
|
|
23
|
-
git_mutex lock;
|
|
24
|
-
git_pool pool;
|
|
25
|
-
} git_attr_cache;
|
|
17
|
+
typedef struct git_attr_cache git_attr_cache;
|
|
26
18
|
|
|
27
19
|
extern int git_attr_cache__init(git_repository *repo);
|
|
28
20
|
|
|
21
|
+
extern const char *git_attr_cache_attributesfile(git_attr_cache *ac);
|
|
22
|
+
extern const char *git_attr_cache_excludesfile(git_attr_cache *ac);
|
|
23
|
+
extern git_pool *git_attr_cache_pool(git_attr_cache *ac);
|
|
24
|
+
|
|
29
25
|
/* get file - loading and reload as needed */
|
|
30
26
|
extern int git_attr_cache__get(
|
|
31
27
|
git_attr_file **file,
|