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
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
#include "pathspec.h"
|
|
18
18
|
#include "ignore.h"
|
|
19
19
|
#include "blob.h"
|
|
20
|
-
#include "idxmap.h"
|
|
21
20
|
#include "diff.h"
|
|
22
21
|
#include "varint.h"
|
|
23
22
|
#include "path.h"
|
|
23
|
+
#include "index_map.h"
|
|
24
24
|
|
|
25
25
|
#include "git2/odb.h"
|
|
26
26
|
#include "git2/oid.h"
|
|
@@ -133,30 +133,6 @@ static int write_index(unsigned char checksum[GIT_HASH_MAX_SIZE], size_t *checks
|
|
|
133
133
|
static void index_entry_free(git_index_entry *entry);
|
|
134
134
|
static void index_entry_reuc_free(git_index_reuc_entry *reuc);
|
|
135
135
|
|
|
136
|
-
GIT_INLINE(int) index_map_set(git_idxmap *map, git_index_entry *e, bool ignore_case)
|
|
137
|
-
{
|
|
138
|
-
if (ignore_case)
|
|
139
|
-
return git_idxmap_icase_set((git_idxmap_icase *) map, e, e);
|
|
140
|
-
else
|
|
141
|
-
return git_idxmap_set(map, e, e);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
GIT_INLINE(int) index_map_delete(git_idxmap *map, git_index_entry *e, bool ignore_case)
|
|
145
|
-
{
|
|
146
|
-
if (ignore_case)
|
|
147
|
-
return git_idxmap_icase_delete((git_idxmap_icase *) map, e);
|
|
148
|
-
else
|
|
149
|
-
return git_idxmap_delete(map, e);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
GIT_INLINE(int) index_map_resize(git_idxmap *map, size_t count, bool ignore_case)
|
|
153
|
-
{
|
|
154
|
-
if (ignore_case)
|
|
155
|
-
return git_idxmap_icase_resize((git_idxmap_icase *) map, count);
|
|
156
|
-
else
|
|
157
|
-
return git_idxmap_resize(map, count);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
136
|
int git_index_entry_srch(const void *key, const void *array_member)
|
|
161
137
|
{
|
|
162
138
|
const struct entry_srch_key *srch_key = key;
|
|
@@ -388,6 +364,7 @@ GIT_INLINE(int) index_find(
|
|
|
388
364
|
void git_index__set_ignore_case(git_index *index, bool ignore_case)
|
|
389
365
|
{
|
|
390
366
|
index->ignore_case = ignore_case;
|
|
367
|
+
index->entries_map.ignore_case = ignore_case;
|
|
391
368
|
|
|
392
369
|
if (ignore_case) {
|
|
393
370
|
index->entries_cmp_path = git__strcasecmp_cb;
|
|
@@ -422,6 +399,7 @@ int git_index__open(
|
|
|
422
399
|
index = git__calloc(1, sizeof(git_index));
|
|
423
400
|
GIT_ERROR_CHECK_ALLOC(index);
|
|
424
401
|
|
|
402
|
+
GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
|
|
425
403
|
index->oid_type = oid_type;
|
|
426
404
|
|
|
427
405
|
if (git_pool_init(&index->tree_pool, 1) < 0)
|
|
@@ -438,7 +416,6 @@ int git_index__open(
|
|
|
438
416
|
}
|
|
439
417
|
|
|
440
418
|
if (git_vector_init(&index->entries, 32, git_index_entry_cmp) < 0 ||
|
|
441
|
-
git_idxmap_new(&index->entries_map) < 0 ||
|
|
442
419
|
git_vector_init(&index->names, 8, conflict_name_cmp) < 0 ||
|
|
443
420
|
git_vector_init(&index->reuc, 8, reuc_cmp) < 0 ||
|
|
444
421
|
git_vector_init(&index->deleted, 8, git_index_entry_cmp) < 0)
|
|
@@ -465,9 +442,13 @@ fail:
|
|
|
465
442
|
}
|
|
466
443
|
|
|
467
444
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
468
|
-
int git_index_open(
|
|
445
|
+
int git_index_open(
|
|
446
|
+
git_index **index_out,
|
|
447
|
+
const char *index_path,
|
|
448
|
+
const git_index_options *opts)
|
|
469
449
|
{
|
|
470
|
-
return git_index__open(index_out, index_path,
|
|
450
|
+
return git_index__open(index_out, index_path,
|
|
451
|
+
opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT);
|
|
471
452
|
}
|
|
472
453
|
#else
|
|
473
454
|
int git_index_open(git_index **index_out, const char *index_path)
|
|
@@ -482,9 +463,10 @@ int git_index__new(git_index **out, git_oid_t oid_type)
|
|
|
482
463
|
}
|
|
483
464
|
|
|
484
465
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
485
|
-
int git_index_new(git_index **out,
|
|
466
|
+
int git_index_new(git_index **out, const git_index_options *opts)
|
|
486
467
|
{
|
|
487
|
-
return git_index__new(out,
|
|
468
|
+
return git_index__new(out,
|
|
469
|
+
opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT);
|
|
488
470
|
}
|
|
489
471
|
#else
|
|
490
472
|
int git_index_new(git_index **out)
|
|
@@ -502,11 +484,11 @@ static void index_free(git_index *index)
|
|
|
502
484
|
return;
|
|
503
485
|
|
|
504
486
|
git_index_clear(index);
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
487
|
+
git_index_entrymap_dispose(&index->entries_map);
|
|
488
|
+
git_vector_dispose(&index->entries);
|
|
489
|
+
git_vector_dispose(&index->names);
|
|
490
|
+
git_vector_dispose(&index->reuc);
|
|
491
|
+
git_vector_dispose(&index->deleted);
|
|
510
492
|
|
|
511
493
|
git__free(index->index_file_path);
|
|
512
494
|
|
|
@@ -547,7 +529,7 @@ static int index_remove_entry(git_index *index, size_t pos)
|
|
|
547
529
|
|
|
548
530
|
if (entry != NULL) {
|
|
549
531
|
git_tree_cache_invalidate_path(index->tree, entry->path);
|
|
550
|
-
|
|
532
|
+
git_index_entrymap_remove(&index->entries_map, entry);
|
|
551
533
|
}
|
|
552
534
|
|
|
553
535
|
error = git_vector_remove(&index->entries, pos);
|
|
@@ -575,7 +557,8 @@ int git_index_clear(git_index *index)
|
|
|
575
557
|
index->tree = NULL;
|
|
576
558
|
git_pool_clear(&index->tree_pool);
|
|
577
559
|
|
|
578
|
-
|
|
560
|
+
git_index_entrymap_clear(&index->entries_map);
|
|
561
|
+
|
|
579
562
|
while (!error && index->entries.length > 0)
|
|
580
563
|
error = index_remove_entry(index, index->entries.length - 1);
|
|
581
564
|
|
|
@@ -786,8 +769,10 @@ static int truncate_racily_clean(git_index *index)
|
|
|
786
769
|
diff_opts.pathspec.count = paths.length;
|
|
787
770
|
diff_opts.pathspec.strings = (char **)paths.contents;
|
|
788
771
|
|
|
789
|
-
if ((error = git_diff_index_to_workdir(&diff, INDEX_OWNER(index), index, &diff_opts)) < 0)
|
|
772
|
+
if ((error = git_diff_index_to_workdir(&diff, INDEX_OWNER(index), index, &diff_opts)) < 0) {
|
|
773
|
+
git_vector_dispose(&paths);
|
|
790
774
|
return error;
|
|
775
|
+
}
|
|
791
776
|
|
|
792
777
|
git_vector_foreach(&diff->deltas, i, delta) {
|
|
793
778
|
entry = (git_index_entry *)git_index_get_bypath(index, delta->old_file.path, 0);
|
|
@@ -803,7 +788,7 @@ static int truncate_racily_clean(git_index *index)
|
|
|
803
788
|
|
|
804
789
|
done:
|
|
805
790
|
git_diff_free(diff);
|
|
806
|
-
|
|
791
|
+
git_vector_dispose(&paths);
|
|
807
792
|
return 0;
|
|
808
793
|
}
|
|
809
794
|
|
|
@@ -904,14 +889,9 @@ const git_index_entry *git_index_get_bypath(
|
|
|
904
889
|
key.path = path;
|
|
905
890
|
GIT_INDEX_ENTRY_STAGE_SET(&key, stage);
|
|
906
891
|
|
|
907
|
-
if (index->
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
value = git_idxmap_get(index->entries_map, &key);
|
|
911
|
-
|
|
912
|
-
if (!value) {
|
|
913
|
-
git_error_set(GIT_ERROR_INDEX, "index does not contain '%s'", path);
|
|
914
|
-
return NULL;
|
|
892
|
+
if (git_index_entrymap_get(&value, &index->entries_map, &key) != 0) {
|
|
893
|
+
git_error_set(GIT_ERROR_INDEX, "index does not contain '%s'", path);
|
|
894
|
+
return NULL;
|
|
915
895
|
}
|
|
916
896
|
|
|
917
897
|
return value;
|
|
@@ -1245,7 +1225,7 @@ static int canonicalize_directory_path(
|
|
|
1245
1225
|
{
|
|
1246
1226
|
const git_index_entry *match, *best = NULL;
|
|
1247
1227
|
char *search, *sep;
|
|
1248
|
-
size_t pos, search_len, best_len;
|
|
1228
|
+
size_t pos, search_len, best_len = 0;
|
|
1249
1229
|
|
|
1250
1230
|
if (!index->ignore_case)
|
|
1251
1231
|
return 0;
|
|
@@ -1453,7 +1433,7 @@ static int index_insert(
|
|
|
1453
1433
|
* check for dups, this is actually cheaper in the long run.)
|
|
1454
1434
|
*/
|
|
1455
1435
|
if ((error = git_vector_insert_sorted(&index->entries, entry, index_no_dups)) < 0 ||
|
|
1456
|
-
(error =
|
|
1436
|
+
(error = git_index_entrymap_put(&index->entries_map, entry)) < 0)
|
|
1457
1437
|
goto out;
|
|
1458
1438
|
}
|
|
1459
1439
|
|
|
@@ -1468,7 +1448,7 @@ out:
|
|
|
1468
1448
|
return error;
|
|
1469
1449
|
}
|
|
1470
1450
|
|
|
1471
|
-
|
|
1451
|
+
int git_index__conflict_to_reuc(git_index *index, const char *path)
|
|
1472
1452
|
{
|
|
1473
1453
|
const git_index_entry *conflict_entries[3];
|
|
1474
1454
|
int ancestor_mode, our_mode, their_mode;
|
|
@@ -1548,7 +1528,7 @@ int git_index_add_from_buffer(
|
|
|
1548
1528
|
return error;
|
|
1549
1529
|
|
|
1550
1530
|
/* Adding implies conflict was resolved, move conflict entries to REUC */
|
|
1551
|
-
if ((error =
|
|
1531
|
+
if ((error = git_index__conflict_to_reuc(index, entry->path)) < 0 && error != GIT_ENOTFOUND)
|
|
1552
1532
|
return error;
|
|
1553
1533
|
|
|
1554
1534
|
git_tree_cache_invalidate_path(index->tree, entry->path);
|
|
@@ -1612,15 +1592,17 @@ int git_index_add_bypath(git_index *index, const char *path)
|
|
|
1612
1592
|
|
|
1613
1593
|
if (ret == GIT_EDIRECTORY) {
|
|
1614
1594
|
git_submodule *sm;
|
|
1615
|
-
|
|
1595
|
+
git_error *last_error;
|
|
1616
1596
|
|
|
1617
|
-
|
|
1597
|
+
git_error_save(&last_error);
|
|
1618
1598
|
|
|
1619
1599
|
ret = git_submodule_lookup(&sm, INDEX_OWNER(index), path);
|
|
1620
|
-
if (ret == GIT_ENOTFOUND)
|
|
1621
|
-
|
|
1600
|
+
if (ret == GIT_ENOTFOUND) {
|
|
1601
|
+
git_error_restore(last_error);
|
|
1602
|
+
return GIT_EDIRECTORY;
|
|
1603
|
+
}
|
|
1622
1604
|
|
|
1623
|
-
|
|
1605
|
+
git_error_free(last_error);
|
|
1624
1606
|
|
|
1625
1607
|
/*
|
|
1626
1608
|
* EEXISTS means that there is a repository at that path, but it's not known
|
|
@@ -1642,7 +1624,7 @@ int git_index_add_bypath(git_index *index, const char *path)
|
|
|
1642
1624
|
}
|
|
1643
1625
|
|
|
1644
1626
|
/* Adding implies conflict was resolved, move conflict entries to REUC */
|
|
1645
|
-
if ((ret =
|
|
1627
|
+
if ((ret = git_index__conflict_to_reuc(index, path)) < 0 && ret != GIT_ENOTFOUND)
|
|
1646
1628
|
return ret;
|
|
1647
1629
|
|
|
1648
1630
|
git_tree_cache_invalidate_path(index->tree, entry->path);
|
|
@@ -1658,7 +1640,7 @@ int git_index_remove_bypath(git_index *index, const char *path)
|
|
|
1658
1640
|
|
|
1659
1641
|
if (((ret = git_index_remove(index, path, 0)) < 0 &&
|
|
1660
1642
|
ret != GIT_ENOTFOUND) ||
|
|
1661
|
-
((ret =
|
|
1643
|
+
((ret = git_index__conflict_to_reuc(index, path)) < 0 &&
|
|
1662
1644
|
ret != GIT_ENOTFOUND))
|
|
1663
1645
|
return ret;
|
|
1664
1646
|
|
|
@@ -1680,8 +1662,7 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
|
|
|
1680
1662
|
return 0;
|
|
1681
1663
|
|
|
1682
1664
|
if (git_vector_size_hint(&index->entries, source_entries->length) < 0 ||
|
|
1683
|
-
|
|
1684
|
-
index->ignore_case) < 0)
|
|
1665
|
+
git_index_entrymap_resize(&index->entries_map, (size_t)(source_entries->length * 1.3)) < 0)
|
|
1685
1666
|
return -1;
|
|
1686
1667
|
|
|
1687
1668
|
git_vector_foreach(source_entries, i, source_entry) {
|
|
@@ -1694,10 +1675,8 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
|
|
|
1694
1675
|
entry->flags_extended |= GIT_INDEX_ENTRY_UPTODATE;
|
|
1695
1676
|
entry->mode = git_index__create_mode(entry->mode);
|
|
1696
1677
|
|
|
1697
|
-
if ((error = git_vector_insert(&index->entries, entry)) < 0
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
if ((error = index_map_set(index->entries_map, entry, index->ignore_case)) < 0)
|
|
1678
|
+
if ((error = git_vector_insert(&index->entries, entry)) < 0 ||
|
|
1679
|
+
(error = git_index_entrymap_put(&index->entries_map, entry)) < 0)
|
|
1701
1680
|
break;
|
|
1702
1681
|
|
|
1703
1682
|
index->dirty = 1;
|
|
@@ -1740,7 +1719,7 @@ int git_index_remove(git_index *index, const char *path, int stage)
|
|
|
1740
1719
|
remove_key.path = path;
|
|
1741
1720
|
GIT_INDEX_ENTRY_STAGE_SET(&remove_key, stage);
|
|
1742
1721
|
|
|
1743
|
-
|
|
1722
|
+
git_index_entrymap_remove(&index->entries_map, &remove_key);
|
|
1744
1723
|
|
|
1745
1724
|
if (index_find(&position, index, path, 0, stage) < 0) {
|
|
1746
1725
|
git_error_set(
|
|
@@ -2546,7 +2525,7 @@ static int read_entry(
|
|
|
2546
2525
|
{
|
|
2547
2526
|
size_t path_length, path_offset, entry_size;
|
|
2548
2527
|
const char *path_ptr;
|
|
2549
|
-
struct entry_common *source_common;
|
|
2528
|
+
struct entry_common *source_common = NULL;
|
|
2550
2529
|
index_entry_short_sha1 source_sha1;
|
|
2551
2530
|
#ifdef GIT_EXPERIMENTAL_SHA256
|
|
2552
2531
|
index_entry_short_sha256 source_sha256;
|
|
@@ -2758,6 +2737,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
|
2758
2737
|
unsigned int i;
|
|
2759
2738
|
struct index_header header = { 0 };
|
|
2760
2739
|
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
|
2740
|
+
unsigned char zero_checksum[GIT_HASH_MAX_SIZE] = { 0 };
|
|
2761
2741
|
size_t checksum_size = git_hash_size(git_oid_algorithm(index->oid_type));
|
|
2762
2742
|
const char *last = NULL;
|
|
2763
2743
|
const char *empty = "";
|
|
@@ -2792,7 +2772,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
|
2792
2772
|
|
|
2793
2773
|
GIT_ASSERT(!index->entries.length);
|
|
2794
2774
|
|
|
2795
|
-
if ((error =
|
|
2775
|
+
if ((error = git_index_entrymap_resize(&index->entries_map, header.entry_count)) < 0)
|
|
2796
2776
|
return error;
|
|
2797
2777
|
|
|
2798
2778
|
/* Parse all the entries */
|
|
@@ -2810,7 +2790,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
|
2810
2790
|
goto done;
|
|
2811
2791
|
}
|
|
2812
2792
|
|
|
2813
|
-
if ((error =
|
|
2793
|
+
if ((error = git_index_entrymap_put(&index->entries_map, entry)) < 0) {
|
|
2814
2794
|
index_entry_free(entry);
|
|
2815
2795
|
goto done;
|
|
2816
2796
|
}
|
|
@@ -2847,8 +2827,11 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
|
|
|
2847
2827
|
/*
|
|
2848
2828
|
* SHA-1 or SHA-256 (depending on the repository's object format)
|
|
2849
2829
|
* over the content of the index file before this checksum.
|
|
2830
|
+
* Note: checksum may be 0 if the index was written by a client
|
|
2831
|
+
* where index.skipHash was set to true.
|
|
2850
2832
|
*/
|
|
2851
|
-
if (memcmp(
|
|
2833
|
+
if (memcmp(zero_checksum, buffer, checksum_size) != 0 &&
|
|
2834
|
+
memcmp(checksum, buffer, checksum_size) != 0) {
|
|
2852
2835
|
error = index_error_invalid(
|
|
2853
2836
|
"calculated checksum does not match expected");
|
|
2854
2837
|
goto done;
|
|
@@ -2894,7 +2877,7 @@ static int write_disk_entry(
|
|
|
2894
2877
|
const char *last)
|
|
2895
2878
|
{
|
|
2896
2879
|
void *mem = NULL;
|
|
2897
|
-
struct entry_common *ondisk_common;
|
|
2880
|
+
struct entry_common *ondisk_common = NULL;
|
|
2898
2881
|
size_t path_len, path_offset, disk_size;
|
|
2899
2882
|
int varint_len = 0;
|
|
2900
2883
|
char *path;
|
|
@@ -2983,7 +2966,7 @@ static int write_disk_entry(
|
|
|
2983
2966
|
path_offset = index_entry_path_offset(index->oid_type, entry->flags);
|
|
2984
2967
|
|
|
2985
2968
|
if (entry->flags & GIT_INDEX_ENTRY_EXTENDED) {
|
|
2986
|
-
struct entry_common *ondisk_ext;
|
|
2969
|
+
struct entry_common *ondisk_ext = NULL;
|
|
2987
2970
|
uint16_t flags_extended = htons(entry->flags_extended &
|
|
2988
2971
|
GIT_INDEX_ENTRY_EXTENDED_FLAGS);
|
|
2989
2972
|
|
|
@@ -3083,7 +3066,7 @@ static int write_entries(git_index *index, git_filebuf *file)
|
|
|
3083
3066
|
}
|
|
3084
3067
|
|
|
3085
3068
|
done:
|
|
3086
|
-
|
|
3069
|
+
git_vector_dispose(&case_sorted);
|
|
3087
3070
|
return error;
|
|
3088
3071
|
}
|
|
3089
3072
|
|
|
@@ -3359,14 +3342,11 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
|
|
|
3359
3342
|
{
|
|
3360
3343
|
int error = 0;
|
|
3361
3344
|
git_vector entries = GIT_VECTOR_INIT;
|
|
3362
|
-
|
|
3345
|
+
git_index_entrymap entries_map = GIT_INDEX_ENTRYMAP_INIT;
|
|
3363
3346
|
read_tree_data data;
|
|
3364
3347
|
size_t i;
|
|
3365
3348
|
git_index_entry *e;
|
|
3366
3349
|
|
|
3367
|
-
if (git_idxmap_new(&entries_map) < 0)
|
|
3368
|
-
return -1;
|
|
3369
|
-
|
|
3370
3350
|
git_vector_set_cmp(&entries, index->entries._cmp); /* match sort */
|
|
3371
3351
|
|
|
3372
3352
|
data.index = index;
|
|
@@ -3382,11 +3362,11 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
|
|
|
3382
3362
|
if ((error = git_tree_walk(tree, GIT_TREEWALK_POST, read_tree_cb, &data)) < 0)
|
|
3383
3363
|
goto cleanup;
|
|
3384
3364
|
|
|
3385
|
-
if ((error =
|
|
3365
|
+
if ((error = git_index_entrymap_resize(&entries_map, entries.length)) < 0)
|
|
3386
3366
|
goto cleanup;
|
|
3387
3367
|
|
|
3388
3368
|
git_vector_foreach(&entries, i, e) {
|
|
3389
|
-
if ((error =
|
|
3369
|
+
if ((error = git_index_entrymap_put(&entries_map, e)) < 0) {
|
|
3390
3370
|
git_error_set(GIT_ERROR_INDEX, "failed to insert entry into map");
|
|
3391
3371
|
return error;
|
|
3392
3372
|
}
|
|
@@ -3396,18 +3376,18 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
|
|
|
3396
3376
|
|
|
3397
3377
|
git_vector_sort(&entries);
|
|
3398
3378
|
|
|
3399
|
-
if ((error = git_index_clear(index)) < 0)
|
|
3400
|
-
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
}
|
|
3379
|
+
if ((error = git_index_clear(index)) < 0)
|
|
3380
|
+
goto cleanup;
|
|
3381
|
+
|
|
3382
|
+
git_vector_swap(&entries, &index->entries);
|
|
3383
|
+
git_index_entrymap_swap(&entries_map, &index->entries_map);
|
|
3405
3384
|
|
|
3406
3385
|
index->dirty = 1;
|
|
3407
3386
|
|
|
3408
3387
|
cleanup:
|
|
3409
|
-
|
|
3410
|
-
|
|
3388
|
+
git_vector_dispose(&entries);
|
|
3389
|
+
git_index_entrymap_dispose(&entries_map);
|
|
3390
|
+
|
|
3411
3391
|
if (error < 0)
|
|
3412
3392
|
return error;
|
|
3413
3393
|
|
|
@@ -3423,7 +3403,7 @@ static int git_index_read_iterator(
|
|
|
3423
3403
|
{
|
|
3424
3404
|
git_vector new_entries = GIT_VECTOR_INIT,
|
|
3425
3405
|
remove_entries = GIT_VECTOR_INIT;
|
|
3426
|
-
|
|
3406
|
+
git_index_entrymap new_entries_map = GIT_INDEX_ENTRYMAP_INIT;
|
|
3427
3407
|
git_iterator *index_iterator = NULL;
|
|
3428
3408
|
git_iterator_options opts = GIT_ITERATOR_OPTIONS_INIT;
|
|
3429
3409
|
const git_index_entry *old_entry, *new_entry;
|
|
@@ -3434,12 +3414,11 @@ static int git_index_read_iterator(
|
|
|
3434
3414
|
GIT_ASSERT((new_iterator->flags & GIT_ITERATOR_DONT_IGNORE_CASE));
|
|
3435
3415
|
|
|
3436
3416
|
if ((error = git_vector_init(&new_entries, new_length_hint, index->entries._cmp)) < 0 ||
|
|
3437
|
-
(error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0
|
|
3438
|
-
(error = git_idxmap_new(&new_entries_map)) < 0)
|
|
3417
|
+
(error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0)
|
|
3439
3418
|
goto done;
|
|
3440
3419
|
|
|
3441
|
-
if (new_length_hint &&
|
|
3442
|
-
|
|
3420
|
+
if (new_length_hint &&
|
|
3421
|
+
(error = git_index_entrymap_resize(&new_entries_map, new_length_hint)) < 0)
|
|
3443
3422
|
goto done;
|
|
3444
3423
|
|
|
3445
3424
|
opts.flags = GIT_ITERATOR_DONT_IGNORE_CASE |
|
|
@@ -3504,8 +3483,7 @@ static int git_index_read_iterator(
|
|
|
3504
3483
|
|
|
3505
3484
|
if (add_entry) {
|
|
3506
3485
|
if ((error = git_vector_insert(&new_entries, add_entry)) == 0)
|
|
3507
|
-
error =
|
|
3508
|
-
index->ignore_case);
|
|
3486
|
+
error = git_index_entrymap_put(&new_entries_map, add_entry);
|
|
3509
3487
|
}
|
|
3510
3488
|
|
|
3511
3489
|
if (remove_entry && error >= 0)
|
|
@@ -3534,7 +3512,7 @@ static int git_index_read_iterator(
|
|
|
3534
3512
|
goto done;
|
|
3535
3513
|
|
|
3536
3514
|
git_vector_swap(&new_entries, &index->entries);
|
|
3537
|
-
|
|
3515
|
+
git_index_entrymap_swap(&index->entries_map, &new_entries_map);
|
|
3538
3516
|
|
|
3539
3517
|
git_vector_foreach(&remove_entries, i, entry) {
|
|
3540
3518
|
if (index->tree)
|
|
@@ -3549,9 +3527,9 @@ static int git_index_read_iterator(
|
|
|
3549
3527
|
error = 0;
|
|
3550
3528
|
|
|
3551
3529
|
done:
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3530
|
+
git_index_entrymap_dispose(&new_entries_map);
|
|
3531
|
+
git_vector_dispose(&new_entries);
|
|
3532
|
+
git_vector_dispose(&remove_entries);
|
|
3555
3533
|
git_iterator_free(index_iterator);
|
|
3556
3534
|
return error;
|
|
3557
3535
|
}
|
|
@@ -3852,7 +3830,7 @@ int git_index_snapshot_new(git_vector *snap, git_index *index)
|
|
|
3852
3830
|
|
|
3853
3831
|
void git_index_snapshot_release(git_vector *snap, git_index *index)
|
|
3854
3832
|
{
|
|
3855
|
-
|
|
3833
|
+
git_vector_dispose(snap);
|
|
3856
3834
|
|
|
3857
3835
|
git_atomic32_dec(&index->readers);
|
|
3858
3836
|
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
#include "futils.h"
|
|
13
13
|
#include "filebuf.h"
|
|
14
14
|
#include "vector.h"
|
|
15
|
-
#include "idxmap.h"
|
|
16
15
|
#include "tree-cache.h"
|
|
16
|
+
#include "index_map.h"
|
|
17
17
|
#include "git2/odb.h"
|
|
18
18
|
#include "git2/index.h"
|
|
19
19
|
|
|
@@ -30,7 +30,7 @@ struct git_index {
|
|
|
30
30
|
unsigned char checksum[GIT_HASH_MAX_SIZE];
|
|
31
31
|
|
|
32
32
|
git_vector entries;
|
|
33
|
-
|
|
33
|
+
git_index_entrymap entries_map;
|
|
34
34
|
|
|
35
35
|
git_vector deleted; /* deleted entries if readers > 0 */
|
|
36
36
|
git_atomic32 readers; /* number of active iterators */
|
|
@@ -154,6 +154,9 @@ extern int git_index__open(
|
|
|
154
154
|
const char *index_path,
|
|
155
155
|
git_oid_t oid_type);
|
|
156
156
|
|
|
157
|
+
/* If the path is conflicted, move it from the index to reuc. */
|
|
158
|
+
int git_index__conflict_to_reuc(git_index *index, const char *path);
|
|
159
|
+
|
|
157
160
|
/* Copy the current entries vector *and* increment the index refcount.
|
|
158
161
|
* Call `git_index__release_snapshot` when done.
|
|
159
162
|
*/
|
|
@@ -0,0 +1,95 @@
|
|
|
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
|
+
#include "hashmap.h"
|
|
10
|
+
#include "index_map.h"
|
|
11
|
+
|
|
12
|
+
typedef git_index_entrymap git_index_entrymap_default;
|
|
13
|
+
typedef git_index_entrymap git_index_entrymap_icase;
|
|
14
|
+
|
|
15
|
+
/* This is __ac_X31_hash_string but with tolower and it takes the entry's stage into account */
|
|
16
|
+
GIT_INLINE(uint32_t) git_index_entrymap_hash(const git_index_entry *e)
|
|
17
|
+
{
|
|
18
|
+
const char *s = e->path;
|
|
19
|
+
uint32_t h = (uint32_t)git__tolower(*s);
|
|
20
|
+
if (h) {
|
|
21
|
+
for (++s ; *s; ++s)
|
|
22
|
+
h = (h << 5) - h + (uint32_t)git__tolower(*s);
|
|
23
|
+
}
|
|
24
|
+
return h + GIT_INDEX_ENTRY_STAGE(e);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
#define git_index_entrymap_equal_default(a, b) (GIT_INDEX_ENTRY_STAGE(a) == GIT_INDEX_ENTRY_STAGE(b) && strcmp(a->path, b->path) == 0)
|
|
28
|
+
#define git_index_entrymap_equal_icase(a, b) (GIT_INDEX_ENTRY_STAGE(a) == GIT_INDEX_ENTRY_STAGE(b) && strcasecmp(a->path, b->path) == 0)
|
|
29
|
+
|
|
30
|
+
GIT_HASHMAP_FUNCTIONS(git_index_entrymap_default, GIT_HASHMAP_INLINE, git_index_entry *, git_index_entry *, git_index_entrymap_hash, git_index_entrymap_equal_default)
|
|
31
|
+
GIT_HASHMAP_FUNCTIONS(git_index_entrymap_icase, GIT_HASHMAP_INLINE, git_index_entry *, git_index_entry *, git_index_entrymap_hash, git_index_entrymap_equal_icase)
|
|
32
|
+
|
|
33
|
+
int git_index_entrymap_put(git_index_entrymap *map, git_index_entry *e)
|
|
34
|
+
{
|
|
35
|
+
if (map->ignore_case)
|
|
36
|
+
return git_index_entrymap_icase_put((git_index_entrymap_icase *)map, e, e);
|
|
37
|
+
else
|
|
38
|
+
return git_index_entrymap_default_put((git_index_entrymap_default *)map, e, e);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
int git_index_entrymap_get(git_index_entry **out, git_index_entrymap *map, git_index_entry *e)
|
|
42
|
+
{
|
|
43
|
+
if (map->ignore_case)
|
|
44
|
+
return git_index_entrymap_icase_get(out, (git_index_entrymap_icase *)map, e);
|
|
45
|
+
else
|
|
46
|
+
return git_index_entrymap_default_get(out, (git_index_entrymap_default *)map, e);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
int git_index_entrymap_remove(git_index_entrymap *map, git_index_entry *e)
|
|
50
|
+
{
|
|
51
|
+
if (map->ignore_case)
|
|
52
|
+
return git_index_entrymap_icase_remove((git_index_entrymap_icase *)map, e);
|
|
53
|
+
else
|
|
54
|
+
return git_index_entrymap_default_remove((git_index_entrymap_default *)map, e);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
int git_index_entrymap_resize(git_index_entrymap *map, size_t count)
|
|
58
|
+
{
|
|
59
|
+
if (count > UINT32_MAX) {
|
|
60
|
+
git_error_set(GIT_ERROR_INDEX, "index map is out of bounds");
|
|
61
|
+
return -1;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (map->ignore_case)
|
|
65
|
+
return git_index_entrymap_icase__resize((git_index_entrymap_icase *)map, (uint32_t)count);
|
|
66
|
+
else
|
|
67
|
+
return git_index_entrymap_default__resize((git_index_entrymap_default *)map, (uint32_t)count);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
void git_index_entrymap_swap(git_index_entrymap *a, git_index_entrymap *b)
|
|
71
|
+
{
|
|
72
|
+
git_index_entrymap t;
|
|
73
|
+
|
|
74
|
+
if (a != b) {
|
|
75
|
+
memcpy(&t, a, sizeof(t));
|
|
76
|
+
memcpy(a, b, sizeof(t));
|
|
77
|
+
memcpy(b, &t, sizeof(t));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
void git_index_entrymap_clear(git_index_entrymap *map)
|
|
82
|
+
{
|
|
83
|
+
if (map->ignore_case)
|
|
84
|
+
git_index_entrymap_icase_clear((git_index_entrymap_icase *)map);
|
|
85
|
+
else
|
|
86
|
+
git_index_entrymap_default_clear((git_index_entrymap_default *)map);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
void git_index_entrymap_dispose(git_index_entrymap *map)
|
|
90
|
+
{
|
|
91
|
+
if (map->ignore_case)
|
|
92
|
+
git_index_entrymap_icase_dispose((git_index_entrymap_icase *)map);
|
|
93
|
+
else
|
|
94
|
+
git_index_entrymap_default_dispose((git_index_entrymap_default *)map);
|
|
95
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
#ifndef INCLUDE_index_map_h__
|
|
8
|
+
#define INCLUDE_index_map_h__
|
|
9
|
+
|
|
10
|
+
#include "common.h"
|
|
11
|
+
#include "hashmap.h"
|
|
12
|
+
|
|
13
|
+
typedef struct {
|
|
14
|
+
unsigned int ignore_case;
|
|
15
|
+
GIT_HASHMAP_STRUCT_MEMBERS(git_index_entry *, git_index_entry *)
|
|
16
|
+
} git_index_entrymap;
|
|
17
|
+
|
|
18
|
+
#define GIT_INDEX_ENTRYMAP_INIT { 0 }
|
|
19
|
+
|
|
20
|
+
extern int git_index_entrymap_get(git_index_entry **out, git_index_entrymap *map, git_index_entry *e);
|
|
21
|
+
extern int git_index_entrymap_put(git_index_entrymap *map, git_index_entry *e);
|
|
22
|
+
extern int git_index_entrymap_remove(git_index_entrymap *map, git_index_entry *e);
|
|
23
|
+
extern int git_index_entrymap_resize(git_index_entrymap *map, size_t count);
|
|
24
|
+
extern void git_index_entrymap_swap(git_index_entrymap *a, git_index_entrymap *b);
|
|
25
|
+
extern void git_index_entrymap_clear(git_index_entrymap *map);
|
|
26
|
+
extern void git_index_entrymap_dispose(git_index_entrymap *map);
|
|
27
|
+
|
|
28
|
+
#endif
|