rugged 1.7.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +23 -10
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
- data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +120 -63
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +38 -8
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +46 -73
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +99 -14
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +23 -24
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +94 -18
- data/vendor/libgit2/include/git2/repository.h +57 -21
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +43 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +11 -2
- data/vendor/libgit2/include/git2/sys/transport.h +24 -3
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +16 -6
- data/vendor/libgit2/src/CMakeLists.txt +6 -4
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +51 -2
- data/vendor/libgit2/src/cli/progress.h +12 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
- data/vendor/libgit2/src/libgit2/apply.c +10 -13
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +130 -44
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
- data/vendor/libgit2/src/libgit2/clone.c +186 -166
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +92 -0
- data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
- data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
- data/vendor/libgit2/src/libgit2/config.c +389 -298
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +99 -88
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +24 -24
- data/vendor/libgit2/src/libgit2/diff.c +1 -1
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
- data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
- data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
- data/vendor/libgit2/src/libgit2/email.c +1 -0
- data/vendor/libgit2/src/libgit2/fetch.c +5 -3
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +18 -20
- data/vendor/libgit2/src/libgit2/grafts.h +0 -1
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +68 -90
- data/vendor/libgit2/src/libgit2/index.h +2 -2
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +34 -38
- data/vendor/libgit2/src/libgit2/iterator.c +14 -8
- data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +42 -37
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/midx.c +28 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/object.c +6 -5
- data/vendor/libgit2/src/libgit2/odb.c +5 -4
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
- data/vendor/libgit2/src/libgit2/oid.c +32 -5
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
- data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
- data/vendor/libgit2/src/libgit2/pack.c +30 -24
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +79 -28
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +26 -7
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +121 -61
- data/vendor/libgit2/src/libgit2/repository.c +231 -51
- data/vendor/libgit2/src/libgit2/repository.h +10 -6
- data/vendor/libgit2/src/libgit2/revert.c +1 -2
- data/vendor/libgit2/src/libgit2/revparse.c +2 -2
- data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
- data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +6 -7
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
- data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
- data/vendor/libgit2/src/libgit2/tree.c +34 -26
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +14 -17
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +4 -1
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
- data/vendor/libgit2/src/util/array.h +18 -17
- data/vendor/libgit2/src/util/cc-compat.h +2 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/fs_path.c +15 -4
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +6 -5
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +12 -1
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +13 -7
- data/vendor/libgit2/src/util/net.h +2 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +1 -7
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +2 -2
- data/vendor/libgit2/src/util/util.h +4 -38
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- metadata +45 -28
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -293
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
#ifndef CLI_opt_usage_h__
|
|
9
9
|
#define CLI_opt_usage_h__
|
|
10
10
|
|
|
11
|
+
typedef enum {
|
|
12
|
+
CLI_OPT_USAGE_SHOW_HIDDEN = (1 << 0),
|
|
13
|
+
} cli_opt_usage_flags;
|
|
14
|
+
|
|
11
15
|
/**
|
|
12
16
|
* Prints usage information to the given file handle.
|
|
13
17
|
*
|
|
@@ -21,7 +25,8 @@ int cli_opt_usage_fprint(
|
|
|
21
25
|
FILE *file,
|
|
22
26
|
const char *command,
|
|
23
27
|
const char *subcommand,
|
|
24
|
-
const cli_opt_spec specs[]
|
|
28
|
+
const cli_opt_spec specs[],
|
|
29
|
+
unsigned int print_flags);
|
|
25
30
|
|
|
26
31
|
int cli_opt_usage_error(
|
|
27
32
|
const char *subcommand,
|
|
@@ -242,7 +242,21 @@ static int fetch_receiving(
|
|
|
242
242
|
done ? ", done." : "");
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
static int
|
|
245
|
+
static int indexer_indexing(
|
|
246
|
+
cli_progress *progress,
|
|
247
|
+
const git_indexer_progress *stats)
|
|
248
|
+
{
|
|
249
|
+
bool done = (stats->received_objects == stats->total_objects);
|
|
250
|
+
|
|
251
|
+
return progress_printf(progress, false,
|
|
252
|
+
"Indexing objects: %3d%% (%d/%d)%s\r",
|
|
253
|
+
percent(stats->received_objects, stats->total_objects),
|
|
254
|
+
stats->received_objects,
|
|
255
|
+
stats->total_objects,
|
|
256
|
+
done ? ", done." : "");
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
static int indexer_resolving(
|
|
246
260
|
cli_progress *progress,
|
|
247
261
|
const git_indexer_progress *stats)
|
|
248
262
|
{
|
|
@@ -283,7 +297,42 @@ int cli_progress_fetch_transfer(const git_indexer_progress *stats, void *payload
|
|
|
283
297
|
/* fall through */
|
|
284
298
|
|
|
285
299
|
case CLI_PROGRESS_RESOLVING:
|
|
286
|
-
error =
|
|
300
|
+
error = indexer_resolving(progress, stats);
|
|
301
|
+
break;
|
|
302
|
+
|
|
303
|
+
default:
|
|
304
|
+
/* should not be reached */
|
|
305
|
+
GIT_ASSERT(!"unexpected progress state");
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return error;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
int cli_progress_indexer(
|
|
312
|
+
const git_indexer_progress *stats,
|
|
313
|
+
void *payload)
|
|
314
|
+
{
|
|
315
|
+
cli_progress *progress = (cli_progress *)payload;
|
|
316
|
+
int error = 0;
|
|
317
|
+
|
|
318
|
+
switch (progress->action) {
|
|
319
|
+
case CLI_PROGRESS_NONE:
|
|
320
|
+
progress->action = CLI_PROGRESS_INDEXING;
|
|
321
|
+
/* fall through */
|
|
322
|
+
|
|
323
|
+
case CLI_PROGRESS_INDEXING:
|
|
324
|
+
if ((error = indexer_indexing(progress, stats)) < 0)
|
|
325
|
+
break;
|
|
326
|
+
|
|
327
|
+
if (stats->indexed_deltas == stats->total_deltas)
|
|
328
|
+
break;
|
|
329
|
+
|
|
330
|
+
progress_complete(progress);
|
|
331
|
+
progress->action = CLI_PROGRESS_RESOLVING;
|
|
332
|
+
/* fall through */
|
|
333
|
+
|
|
334
|
+
case CLI_PROGRESS_RESOLVING:
|
|
335
|
+
error = indexer_resolving(progress, stats);
|
|
287
336
|
break;
|
|
288
337
|
|
|
289
338
|
default:
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
typedef enum {
|
|
23
23
|
CLI_PROGRESS_NONE,
|
|
24
24
|
CLI_PROGRESS_RECEIVING,
|
|
25
|
+
CLI_PROGRESS_INDEXING,
|
|
25
26
|
CLI_PROGRESS_RESOLVING,
|
|
26
27
|
CLI_PROGRESS_CHECKING_OUT
|
|
27
28
|
} cli_progress_t;
|
|
@@ -74,6 +75,17 @@ extern int cli_progress_fetch_transfer(
|
|
|
74
75
|
const git_indexer_progress *stats,
|
|
75
76
|
void *payload);
|
|
76
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Prints indexer progress to the console. Suitable for a
|
|
80
|
+
* `progress_cb` callback for `git_indexer_options`.
|
|
81
|
+
*
|
|
82
|
+
* @param stats The indexer stats
|
|
83
|
+
* @param payload A pointer to the cli_progress
|
|
84
|
+
*/
|
|
85
|
+
extern int cli_progress_indexer(
|
|
86
|
+
const git_indexer_progress *stats,
|
|
87
|
+
void *payload);
|
|
88
|
+
|
|
77
89
|
/**
|
|
78
90
|
* Prints checkout progress to the console. Suitable for a
|
|
79
91
|
* `progress_cb` callback for `git_checkout_options`.
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
# git library functionality.
|
|
3
3
|
|
|
4
4
|
add_library(libgit2 OBJECT)
|
|
5
|
-
set_target_properties(libgit2 PROPERTIES C_STANDARD 90)
|
|
6
|
-
set_target_properties(libgit2 PROPERTIES C_EXTENSIONS OFF)
|
|
7
5
|
|
|
8
6
|
include(PkgBuildConfig)
|
|
7
|
+
include(CMakePackageConfigHelpers)
|
|
9
8
|
|
|
10
9
|
set(LIBGIT2_INCLUDES
|
|
11
10
|
"${PROJECT_BINARY_DIR}/src/util"
|
|
@@ -59,18 +58,14 @@ set(LIBGIT2_SYSTEM_LIBS ${LIBGIT2_SYSTEM_LIBS} PARENT_SCOPE)
|
|
|
59
58
|
add_library(libgit2package ${SRC_RC} ${LIBGIT2_OBJECTS})
|
|
60
59
|
target_link_libraries(libgit2package ${LIBGIT2_SYSTEM_LIBS})
|
|
61
60
|
target_include_directories(libgit2package SYSTEM PRIVATE ${LIBGIT2_INCLUDES})
|
|
61
|
+
target_include_directories(libgit2package INTERFACE $<INSTALL_INTERFACE:./include/git2>)
|
|
62
62
|
|
|
63
63
|
set_target_properties(libgit2package PROPERTIES C_STANDARD 90)
|
|
64
|
+
set_target_properties(libgit2package PROPERTIES C_EXTENSIONS OFF)
|
|
64
65
|
set_target_properties(libgit2package PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
|
|
65
66
|
set_target_properties(libgit2package PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
|
|
66
67
|
set_target_properties(libgit2package PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
|
|
67
68
|
|
|
68
|
-
# Workaround for Cmake bug #0011240 (see http://public.kitware.com/Bug/view.php?id=11240)
|
|
69
|
-
# Win64+MSVC+static libs = linker error
|
|
70
|
-
if(MSVC AND GIT_ARCH_64 AND NOT BUILD_SHARED_LIBS)
|
|
71
|
-
set_target_properties(libgit2package PROPERTIES STATIC_LIBRARY_FLAGS "/MACHINE:x64")
|
|
72
|
-
endif()
|
|
73
|
-
|
|
74
69
|
ide_split_sources(libgit2package)
|
|
75
70
|
|
|
76
71
|
if(SONAME)
|
|
@@ -108,9 +103,32 @@ FILE(READ "${PROJECT_SOURCE_DIR}/include/git2.h" LIBGIT2_INCLUDE)
|
|
|
108
103
|
STRING(REGEX REPLACE "#include \"git2\/" "#include \"${LIBGIT2_FILENAME}/" LIBGIT2_INCLUDE "${LIBGIT2_INCLUDE}")
|
|
109
104
|
FILE(WRITE "${PROJECT_BINARY_DIR}/include/${LIBGIT2_FILENAME}.h" ${LIBGIT2_INCLUDE})
|
|
110
105
|
|
|
106
|
+
# cmake package targets
|
|
107
|
+
|
|
108
|
+
set(LIBGIT2_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
|
|
109
|
+
|
|
110
|
+
write_basic_package_version_file(
|
|
111
|
+
"${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake"
|
|
112
|
+
VERSION ${PROJECT_VERSION}
|
|
113
|
+
COMPATIBILITY SameMajorVersion)
|
|
114
|
+
|
|
115
|
+
configure_file(config.cmake.in
|
|
116
|
+
"${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}Config.cmake"
|
|
117
|
+
@ONLY)
|
|
118
|
+
|
|
119
|
+
install(FILES
|
|
120
|
+
"${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}Config.cmake"
|
|
121
|
+
"${PROJECT_BINARY_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake"
|
|
122
|
+
DESTINATION "lib/cmake/${PROJECT_NAME}")
|
|
123
|
+
install(
|
|
124
|
+
EXPORT ${LIBGIT2_TARGETS_EXPORT_NAME}
|
|
125
|
+
NAMESPACE "${PROJECT_NAME}::"
|
|
126
|
+
DESTINATION "lib/cmake/${PROJECT_NAME}")
|
|
127
|
+
|
|
111
128
|
# Install
|
|
112
129
|
|
|
113
130
|
install(TARGETS libgit2package
|
|
131
|
+
EXPORT ${LIBGIT2_TARGETS_EXPORT_NAME}
|
|
114
132
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
115
133
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
116
134
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#include "reader.h"
|
|
21
21
|
#include "index.h"
|
|
22
22
|
#include "repository.h"
|
|
23
|
+
#include "hashmap_str.h"
|
|
23
24
|
#include "apply.h"
|
|
24
25
|
|
|
25
26
|
typedef struct {
|
|
@@ -96,7 +97,7 @@ static void patch_image_free(patch_image *image)
|
|
|
96
97
|
return;
|
|
97
98
|
|
|
98
99
|
git_pool_clear(&image->pool);
|
|
99
|
-
|
|
100
|
+
git_vector_dispose(&image->lines);
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
static bool match_hunk(
|
|
@@ -452,7 +453,7 @@ static int apply_one(
|
|
|
452
453
|
git_reader *postimage_reader,
|
|
453
454
|
git_index *postimage,
|
|
454
455
|
git_diff *diff,
|
|
455
|
-
|
|
456
|
+
git_hashset_str *removed_paths,
|
|
456
457
|
size_t i,
|
|
457
458
|
const git_apply_options *opts)
|
|
458
459
|
{
|
|
@@ -489,7 +490,7 @@ static int apply_one(
|
|
|
489
490
|
*/
|
|
490
491
|
if (delta->status != GIT_DELTA_RENAMED &&
|
|
491
492
|
delta->status != GIT_DELTA_ADDED) {
|
|
492
|
-
if (
|
|
493
|
+
if (git_hashset_str_contains(removed_paths, delta->old_file.path)) {
|
|
493
494
|
error = apply_err("path '%s' has been renamed or deleted", delta->old_file.path);
|
|
494
495
|
goto done;
|
|
495
496
|
}
|
|
@@ -573,11 +574,11 @@ static int apply_one(
|
|
|
573
574
|
|
|
574
575
|
if (delta->status == GIT_DELTA_RENAMED ||
|
|
575
576
|
delta->status == GIT_DELTA_DELETED)
|
|
576
|
-
error =
|
|
577
|
+
error = git_hashset_str_add(removed_paths, delta->old_file.path);
|
|
577
578
|
|
|
578
579
|
if (delta->status == GIT_DELTA_RENAMED ||
|
|
579
580
|
delta->status == GIT_DELTA_ADDED)
|
|
580
|
-
|
|
581
|
+
git_hashset_str_remove(removed_paths, delta->new_file.path);
|
|
581
582
|
|
|
582
583
|
done:
|
|
583
584
|
git_str_dispose(&pre_contents);
|
|
@@ -597,20 +598,17 @@ static int apply_deltas(
|
|
|
597
598
|
git_diff *diff,
|
|
598
599
|
const git_apply_options *opts)
|
|
599
600
|
{
|
|
600
|
-
|
|
601
|
+
git_hashset_str removed_paths = GIT_HASHSET_INIT;
|
|
601
602
|
size_t i;
|
|
602
603
|
int error = 0;
|
|
603
604
|
|
|
604
|
-
if (git_strmap_new(&removed_paths) < 0)
|
|
605
|
-
return -1;
|
|
606
|
-
|
|
607
605
|
for (i = 0; i < git_diff_num_deltas(diff); i++) {
|
|
608
|
-
if ((error = apply_one(repo, pre_reader, preimage, post_reader, postimage, diff, removed_paths, i, opts)) < 0)
|
|
606
|
+
if ((error = apply_one(repo, pre_reader, preimage, post_reader, postimage, diff, &removed_paths, i, opts)) < 0)
|
|
609
607
|
goto done;
|
|
610
608
|
}
|
|
611
609
|
|
|
612
610
|
done:
|
|
613
|
-
|
|
611
|
+
git_hashset_str_dispose(&removed_paths);
|
|
614
612
|
return error;
|
|
615
613
|
}
|
|
616
614
|
|
|
@@ -715,7 +713,6 @@ static int git_apply__to_workdir(
|
|
|
715
713
|
goto done;
|
|
716
714
|
}
|
|
717
715
|
|
|
718
|
-
checkout_opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
|
|
719
716
|
checkout_opts.checkout_strategy |= GIT_CHECKOUT_DISABLE_PATHSPEC_MATCH;
|
|
720
717
|
checkout_opts.checkout_strategy |= GIT_CHECKOUT_DONT_WRITE_INDEX;
|
|
721
718
|
|
|
@@ -730,7 +727,7 @@ static int git_apply__to_workdir(
|
|
|
730
727
|
error = git_checkout_index(repo, postimage, &checkout_opts);
|
|
731
728
|
|
|
732
729
|
done:
|
|
733
|
-
|
|
730
|
+
git_vector_dispose(&paths);
|
|
734
731
|
return error;
|
|
735
732
|
}
|
|
736
733
|
|
|
@@ -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;
|
|
@@ -991,7 +996,7 @@ static void git_attr_rule__clear(git_attr_rule *rule)
|
|
|
991
996
|
if (!(rule->match.flags & GIT_ATTR_FNMATCH_IGNORE)) {
|
|
992
997
|
git_vector_foreach(&rule->assigns, i, assign)
|
|
993
998
|
GIT_REFCOUNT_DEC(assign, git_attr_assignment__free);
|
|
994
|
-
|
|
999
|
+
git_vector_dispose(&rule->assigns);
|
|
995
1000
|
}
|
|
996
1001
|
|
|
997
1002
|
/* 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,
|