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
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "odb.h"
|
|
14
14
|
#include "oid.h"
|
|
15
15
|
#include "oidarray.h"
|
|
16
|
+
#include "hashmap_oid.h"
|
|
16
17
|
|
|
17
18
|
/* Option to bypass checking existence of '.keep' files */
|
|
18
19
|
bool git_disable_pack_keep_file_checks = false;
|
|
@@ -41,6 +42,12 @@ static int pack_entry_find_offset(
|
|
|
41
42
|
const git_oid *short_oid,
|
|
42
43
|
size_t len);
|
|
43
44
|
|
|
45
|
+
#define off64_hash(key) (uint32_t)((key)>>33^(key)^(key)<<11)
|
|
46
|
+
#define off64_equal(a, b) ((a) == (b))
|
|
47
|
+
|
|
48
|
+
GIT_HASHMAP_FUNCTIONS(git_pack_offsetmap, GIT_HASHMAP_INLINE, off64_t, git_pack_cache_entry *, off64_hash, off64_equal);
|
|
49
|
+
GIT_HASHMAP_OID_FUNCTIONS(git_pack_oidmap, , struct git_pack_entry *);
|
|
50
|
+
|
|
44
51
|
static int packfile_error(const char *message)
|
|
45
52
|
{
|
|
46
53
|
git_error_set(GIT_ERROR_ODB, "invalid pack file - %s", message);
|
|
@@ -75,31 +82,21 @@ static void free_cache_object(void *o)
|
|
|
75
82
|
|
|
76
83
|
static void cache_free(git_pack_cache *cache)
|
|
77
84
|
{
|
|
85
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
78
86
|
git_pack_cache_entry *entry;
|
|
79
87
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
free_cache_object(entry);
|
|
83
|
-
});
|
|
88
|
+
while (git_pack_offsetmap_iterate(&iter, NULL, &entry, &cache->entries) == 0)
|
|
89
|
+
free_cache_object(entry);
|
|
84
90
|
|
|
85
|
-
|
|
86
|
-
cache->entries = NULL;
|
|
87
|
-
}
|
|
91
|
+
git_pack_offsetmap_dispose(&cache->entries);
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
static int cache_init(git_pack_cache *cache)
|
|
91
95
|
{
|
|
92
|
-
if (git_offmap_new(&cache->entries) < 0)
|
|
93
|
-
return -1;
|
|
94
|
-
|
|
95
96
|
cache->memory_limit = GIT_PACK_CACHE_MEMORY_LIMIT;
|
|
96
97
|
|
|
97
98
|
if (git_mutex_init(&cache->lock)) {
|
|
98
99
|
git_error_set(GIT_ERROR_OS, "failed to initialize pack cache mutex");
|
|
99
|
-
|
|
100
|
-
git__free(cache->entries);
|
|
101
|
-
cache->entries = NULL;
|
|
102
|
-
|
|
103
100
|
return -1;
|
|
104
101
|
}
|
|
105
102
|
|
|
@@ -108,15 +105,16 @@ static int cache_init(git_pack_cache *cache)
|
|
|
108
105
|
|
|
109
106
|
static git_pack_cache_entry *cache_get(git_pack_cache *cache, off64_t offset)
|
|
110
107
|
{
|
|
111
|
-
git_pack_cache_entry *entry;
|
|
108
|
+
git_pack_cache_entry *entry = NULL;
|
|
112
109
|
|
|
113
110
|
if (git_mutex_lock(&cache->lock) < 0)
|
|
114
111
|
return NULL;
|
|
115
112
|
|
|
116
|
-
if ((entry
|
|
113
|
+
if (git_pack_offsetmap_get(&entry, &cache->entries, offset) == 0) {
|
|
117
114
|
git_atomic32_inc(&entry->refcount);
|
|
118
115
|
entry->last_usage = cache->use_ctr++;
|
|
119
116
|
}
|
|
117
|
+
|
|
120
118
|
git_mutex_unlock(&cache->lock);
|
|
121
119
|
|
|
122
120
|
return entry;
|
|
@@ -125,16 +123,17 @@ static git_pack_cache_entry *cache_get(git_pack_cache *cache, off64_t offset)
|
|
|
125
123
|
/* Run with the cache lock held */
|
|
126
124
|
static void free_lowest_entry(git_pack_cache *cache)
|
|
127
125
|
{
|
|
128
|
-
|
|
126
|
+
git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
|
|
129
127
|
git_pack_cache_entry *entry;
|
|
128
|
+
off64_t offset;
|
|
130
129
|
|
|
131
|
-
|
|
130
|
+
while (git_pack_offsetmap_iterate(&iter, &offset, &entry, &cache->entries) == 0) {
|
|
132
131
|
if (entry && git_atomic32_get(&entry->refcount) == 0) {
|
|
133
132
|
cache->memory_used -= entry->raw.len;
|
|
134
|
-
|
|
133
|
+
git_pack_offsetmap_remove(&cache->entries, offset);
|
|
135
134
|
free_cache_object(entry);
|
|
136
135
|
}
|
|
137
|
-
}
|
|
136
|
+
}
|
|
138
137
|
}
|
|
139
138
|
|
|
140
139
|
static int cache_add(
|
|
@@ -157,12 +156,12 @@ static int cache_add(
|
|
|
157
156
|
return -1;
|
|
158
157
|
}
|
|
159
158
|
/* Add it to the cache if nobody else has */
|
|
160
|
-
exists =
|
|
159
|
+
exists = git_pack_offsetmap_contains(&cache->entries, offset);
|
|
161
160
|
if (!exists) {
|
|
162
161
|
while (cache->memory_used + base->len > cache->memory_limit)
|
|
163
162
|
free_lowest_entry(cache);
|
|
164
163
|
|
|
165
|
-
|
|
164
|
+
git_pack_offsetmap_put(&cache->entries, offset, entry);
|
|
166
165
|
cache->memory_used += entry->raw.len;
|
|
167
166
|
|
|
168
167
|
*cached_out = entry;
|
|
@@ -1009,7 +1008,7 @@ int get_delta_base(
|
|
|
1009
1008
|
if (p->has_cache) {
|
|
1010
1009
|
struct git_pack_entry *entry;
|
|
1011
1010
|
|
|
1012
|
-
if ((entry
|
|
1011
|
+
if (git_pack_oidmap_get(&entry, &p->idx_cache, &base_oid) == 0) {
|
|
1013
1012
|
if (entry->offset == 0)
|
|
1014
1013
|
return packfile_error("delta offset is zero");
|
|
1015
1014
|
|
|
@@ -1351,7 +1350,7 @@ int git_pack_foreach_entry(
|
|
|
1351
1350
|
git_vector_insert(&oids, (void*)¤t[4]);
|
|
1352
1351
|
}
|
|
1353
1352
|
|
|
1354
|
-
|
|
1353
|
+
git_vector_dispose(&offsets);
|
|
1355
1354
|
p->ids = (unsigned char **)git_vector_detach(NULL, NULL, &oids);
|
|
1356
1355
|
}
|
|
1357
1356
|
|
|
@@ -1499,6 +1498,7 @@ static int pack_entry_find_offset(
|
|
|
1499
1498
|
size_t len)
|
|
1500
1499
|
{
|
|
1501
1500
|
const uint32_t *level1_ofs;
|
|
1501
|
+
size_t ofs_delta = 0;
|
|
1502
1502
|
const unsigned char *index;
|
|
1503
1503
|
unsigned hi, lo, stride;
|
|
1504
1504
|
int pos, found = 0;
|
|
@@ -1524,9 +1524,15 @@ static int pack_entry_find_offset(
|
|
|
1524
1524
|
|
|
1525
1525
|
if (p->index_version > 1) {
|
|
1526
1526
|
level1_ofs += 2;
|
|
1527
|
+
ofs_delta = 2;
|
|
1527
1528
|
index += 8;
|
|
1528
1529
|
}
|
|
1529
1530
|
|
|
1531
|
+
if ((size_t)short_oid->id[0] + ofs_delta >= p->index_map.len) {
|
|
1532
|
+
git_error_set(GIT_ERROR_INTERNAL, "internal error: p->short_oid->[0] out of bounds");
|
|
1533
|
+
goto cleanup;
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1530
1536
|
index += 4 * 256;
|
|
1531
1537
|
hi = ntohl(level1_ofs[(int)short_oid->id[0]]);
|
|
1532
1538
|
lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(level1_ofs[(int)short_oid->id[0] - 1]));
|
|
@@ -16,10 +16,9 @@
|
|
|
16
16
|
#include "map.h"
|
|
17
17
|
#include "mwindow.h"
|
|
18
18
|
#include "odb.h"
|
|
19
|
-
#include "offmap.h"
|
|
20
|
-
#include "oidmap.h"
|
|
21
19
|
#include "zstream.h"
|
|
22
20
|
#include "oid.h"
|
|
21
|
+
#include "hashmap_oid.h"
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* Function type for callbacks from git_pack_foreach_entry_offset.
|
|
@@ -83,12 +82,23 @@ typedef git_array_t(struct pack_chain_elem) git_dependency_chain;
|
|
|
83
82
|
#define GIT_PACK_CACHE_MEMORY_LIMIT 16 * 1024 * 1024
|
|
84
83
|
#define GIT_PACK_CACHE_SIZE_LIMIT 1024 * 1024 /* don't bother caching anything over 1MB */
|
|
85
84
|
|
|
85
|
+
struct git_pack_entry {
|
|
86
|
+
off64_t offset;
|
|
87
|
+
git_oid id;
|
|
88
|
+
struct git_pack_file *p;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
GIT_HASHMAP_STRUCT(git_pack_offsetmap, off64_t, git_pack_cache_entry *);
|
|
92
|
+
|
|
93
|
+
GIT_HASHMAP_OID_STRUCT(git_pack_oidmap, struct git_pack_entry *);
|
|
94
|
+
GIT_HASHMAP_OID_PROTOTYPES(git_pack_oidmap, struct git_pack_entry *);
|
|
95
|
+
|
|
86
96
|
typedef struct {
|
|
87
97
|
size_t memory_used;
|
|
88
98
|
size_t memory_limit;
|
|
89
99
|
size_t use_ctr;
|
|
90
100
|
git_mutex lock;
|
|
91
|
-
|
|
101
|
+
git_pack_offsetmap entries;
|
|
92
102
|
} git_pack_cache;
|
|
93
103
|
|
|
94
104
|
struct git_pack_file {
|
|
@@ -110,7 +120,8 @@ struct git_pack_file {
|
|
|
110
120
|
|
|
111
121
|
int index_version;
|
|
112
122
|
git_time_t mtime;
|
|
113
|
-
|
|
123
|
+
|
|
124
|
+
git_pack_oidmap idx_cache;
|
|
114
125
|
unsigned char **ids;
|
|
115
126
|
|
|
116
127
|
git_pack_cache bases; /* delta base cache */
|
|
@@ -139,12 +150,6 @@ int git_pack__lookup_id(
|
|
|
139
150
|
const unsigned char *id_prefix,
|
|
140
151
|
const git_oid_t oid_type);
|
|
141
152
|
|
|
142
|
-
struct git_pack_entry {
|
|
143
|
-
off64_t offset;
|
|
144
|
-
git_oid id;
|
|
145
|
-
struct git_pack_file *p;
|
|
146
|
-
};
|
|
147
|
-
|
|
148
153
|
typedef struct git_packfile_stream {
|
|
149
154
|
off64_t curpos;
|
|
150
155
|
int done;
|
|
@@ -562,9 +562,9 @@ fail:
|
|
|
562
562
|
|
|
563
563
|
static int eof_for_origin(int origin) {
|
|
564
564
|
if (origin == GIT_DIFF_LINE_ADDITION)
|
|
565
|
-
return GIT_DIFF_LINE_ADD_EOFNL;
|
|
566
|
-
if (origin == GIT_DIFF_LINE_DELETION)
|
|
567
565
|
return GIT_DIFF_LINE_DEL_EOFNL;
|
|
566
|
+
if (origin == GIT_DIFF_LINE_DELETION)
|
|
567
|
+
return GIT_DIFF_LINE_ADD_EOFNL;
|
|
568
568
|
return GIT_DIFF_LINE_CONTEXT_EOFNL;
|
|
569
569
|
}
|
|
570
570
|
|
|
@@ -202,7 +202,7 @@ GIT_INLINE(size_t) common_prefix_icase(const char *str, size_t len, const char *
|
|
|
202
202
|
{
|
|
203
203
|
size_t count = 0;
|
|
204
204
|
|
|
205
|
-
while (len > 0 &&
|
|
205
|
+
while (len > 0 && git__tolower(*str) == git__tolower(*prefix)) {
|
|
206
206
|
count++;
|
|
207
207
|
str++;
|
|
208
208
|
prefix++;
|
|
@@ -56,14 +56,22 @@ int git_push_new(git_push **out, git_remote *remote, const git_push_options *opt
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
if (git_vector_init(&p->status, 0, push_status_ref_cmp) < 0) {
|
|
59
|
-
|
|
59
|
+
git_vector_dispose(&p->specs);
|
|
60
60
|
git__free(p);
|
|
61
61
|
return -1;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
if (git_vector_init(&p->updates, 0, NULL) < 0) {
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
git_vector_dispose(&p->status);
|
|
66
|
+
git_vector_dispose(&p->specs);
|
|
67
|
+
git__free(p);
|
|
68
|
+
return -1;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (git_vector_init(&p->remote_push_options, 0, git__strcmp_cb) < 0) {
|
|
72
|
+
git_vector_dispose(&p->status);
|
|
73
|
+
git_vector_dispose(&p->specs);
|
|
74
|
+
git_vector_dispose(&p->updates);
|
|
67
75
|
git__free(p);
|
|
68
76
|
return -1;
|
|
69
77
|
}
|
|
@@ -213,12 +221,25 @@ int git_push_update_tips(git_push *push, const git_remote_callbacks *callbacks)
|
|
|
213
221
|
fire_callback = 0;
|
|
214
222
|
}
|
|
215
223
|
|
|
216
|
-
if (fire_callback
|
|
217
|
-
|
|
218
|
-
&push_spec->roid, &push_spec->loid, callbacks->payload);
|
|
224
|
+
if (!fire_callback || !callbacks)
|
|
225
|
+
continue;
|
|
219
226
|
|
|
220
|
-
|
|
221
|
-
|
|
227
|
+
if (callbacks->update_refs)
|
|
228
|
+
error = callbacks->update_refs(
|
|
229
|
+
git_str_cstr(&remote_ref_name),
|
|
230
|
+
&push_spec->roid, &push_spec->loid,
|
|
231
|
+
&push_spec->refspec, callbacks->payload);
|
|
232
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
233
|
+
else if (callbacks->update_tips)
|
|
234
|
+
error = callbacks->update_tips(
|
|
235
|
+
git_str_cstr(&remote_ref_name),
|
|
236
|
+
&push_spec->roid, &push_spec->loid,
|
|
237
|
+
callbacks->payload);
|
|
238
|
+
#endif
|
|
239
|
+
|
|
240
|
+
if (error < 0) {
|
|
241
|
+
git_error_set_after_callback_function(error, "git_remote_push");
|
|
242
|
+
goto on_error;
|
|
222
243
|
}
|
|
223
244
|
}
|
|
224
245
|
|
|
@@ -275,6 +296,7 @@ static int queue_objects(git_push *push)
|
|
|
275
296
|
|
|
276
297
|
git_vector_foreach(&push->specs, i, spec) {
|
|
277
298
|
git_object_t type;
|
|
299
|
+
git_oid id;
|
|
278
300
|
size_t size;
|
|
279
301
|
|
|
280
302
|
if (git_oid_is_zero(&spec->loid))
|
|
@@ -296,20 +318,20 @@ static int queue_objects(git_push *push)
|
|
|
296
318
|
if ((error = enqueue_tag(&target, push, &spec->loid)) < 0)
|
|
297
319
|
goto on_error;
|
|
298
320
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
goto on_error;
|
|
303
|
-
}
|
|
304
|
-
} else {
|
|
305
|
-
if ((error = git_packbuilder_insert(
|
|
306
|
-
push->pb, git_object_id(target), NULL)) < 0) {
|
|
307
|
-
git_object_free(target);
|
|
308
|
-
goto on_error;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
321
|
+
type = git_object_type(target);
|
|
322
|
+
git_oid_cpy(&id, git_object_id(target));
|
|
323
|
+
|
|
311
324
|
git_object_free(target);
|
|
312
|
-
} else
|
|
325
|
+
} else {
|
|
326
|
+
git_oid_cpy(&id, &spec->loid);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (type == GIT_OBJECT_COMMIT)
|
|
330
|
+
error = git_revwalk_push(rw, &id);
|
|
331
|
+
else
|
|
332
|
+
error = git_packbuilder_insert(push->pb, &id, NULL);
|
|
333
|
+
|
|
334
|
+
if (error < 0)
|
|
313
335
|
goto on_error;
|
|
314
336
|
|
|
315
337
|
if (!spec->refspec.force) {
|
|
@@ -444,10 +466,21 @@ static int do_push(git_push *push)
|
|
|
444
466
|
if ((error = calculate_work(push)) < 0)
|
|
445
467
|
goto on_error;
|
|
446
468
|
|
|
447
|
-
if (callbacks && callbacks->push_negotiation
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
469
|
+
if (callbacks && callbacks->push_negotiation) {
|
|
470
|
+
git_error_clear();
|
|
471
|
+
|
|
472
|
+
error = callbacks->push_negotiation(
|
|
473
|
+
(const git_push_update **) push->updates.contents,
|
|
474
|
+
push->updates.length, callbacks->payload);
|
|
475
|
+
|
|
476
|
+
if (error < 0) {
|
|
477
|
+
git_error_set_after_callback_function(error,
|
|
478
|
+
"push_negotiation");
|
|
479
|
+
goto on_error;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
error = 0;
|
|
483
|
+
}
|
|
451
484
|
|
|
452
485
|
if ((error = queue_objects(push)) < 0 ||
|
|
453
486
|
(error = transport->push(transport, push)) < 0)
|
|
@@ -479,12 +512,24 @@ static int filter_refs(git_remote *remote)
|
|
|
479
512
|
int git_push_finish(git_push *push)
|
|
480
513
|
{
|
|
481
514
|
int error;
|
|
515
|
+
unsigned int remote_caps;
|
|
482
516
|
|
|
483
517
|
if (!git_remote_connected(push->remote)) {
|
|
484
518
|
git_error_set(GIT_ERROR_NET, "remote is disconnected");
|
|
485
519
|
return -1;
|
|
486
520
|
}
|
|
487
521
|
|
|
522
|
+
if ((error = git_remote_capabilities(&remote_caps, push->remote)) < 0) {
|
|
523
|
+
git_error_set(GIT_ERROR_INVALID, "remote capabilities not available");
|
|
524
|
+
return -1;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
if (git_vector_length(&push->remote_push_options) > 0 &&
|
|
528
|
+
!(remote_caps & GIT_REMOTE_CAPABILITY_PUSH_OPTIONS)) {
|
|
529
|
+
git_error_set(GIT_ERROR_INVALID, "push-options not supported by remote");
|
|
530
|
+
return -1;
|
|
531
|
+
}
|
|
532
|
+
|
|
488
533
|
if ((error = filter_refs(push->remote)) < 0 ||
|
|
489
534
|
(error = do_push(push)) < 0)
|
|
490
535
|
return error;
|
|
@@ -528,6 +573,7 @@ void git_push_free(git_push *push)
|
|
|
528
573
|
push_spec *spec;
|
|
529
574
|
push_status *status;
|
|
530
575
|
git_push_update *update;
|
|
576
|
+
char *option;
|
|
531
577
|
unsigned int i;
|
|
532
578
|
|
|
533
579
|
if (push == NULL)
|
|
@@ -536,19 +582,24 @@ void git_push_free(git_push *push)
|
|
|
536
582
|
git_vector_foreach(&push->specs, i, spec) {
|
|
537
583
|
free_refspec(spec);
|
|
538
584
|
}
|
|
539
|
-
|
|
585
|
+
git_vector_dispose(&push->specs);
|
|
540
586
|
|
|
541
587
|
git_vector_foreach(&push->status, i, status) {
|
|
542
588
|
git_push_status_free(status);
|
|
543
589
|
}
|
|
544
|
-
|
|
590
|
+
git_vector_dispose(&push->status);
|
|
545
591
|
|
|
546
592
|
git_vector_foreach(&push->updates, i, update) {
|
|
547
593
|
git__free(update->src_refname);
|
|
548
594
|
git__free(update->dst_refname);
|
|
549
595
|
git__free(update);
|
|
550
596
|
}
|
|
551
|
-
|
|
597
|
+
git_vector_dispose(&push->updates);
|
|
598
|
+
|
|
599
|
+
git_vector_foreach(&push->remote_push_options, i, option) {
|
|
600
|
+
git__free(option);
|
|
601
|
+
}
|
|
602
|
+
git_vector_dispose(&push->remote_push_options);
|
|
552
603
|
|
|
553
604
|
git__free(push);
|
|
554
605
|
}
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
#include <git2/branch.h>
|
|
27
27
|
#include <git2/sys/refdb_backend.h>
|
|
28
28
|
#include <git2/sys/refs.h>
|
|
29
|
-
#include <git2/sys/reflog.h>
|
|
30
29
|
|
|
31
30
|
#define DEFAULT_NESTING_LEVEL 5
|
|
32
31
|
#define MAX_NESTING_LEVEL 10
|
|
@@ -62,8 +61,8 @@ typedef struct refdb_fs_backend {
|
|
|
62
61
|
|
|
63
62
|
git_oid_t oid_type;
|
|
64
63
|
|
|
65
|
-
int fsync : 1,
|
|
66
|
-
|
|
64
|
+
unsigned int fsync : 1,
|
|
65
|
+
sorted : 1;
|
|
67
66
|
int peeling_mode;
|
|
68
67
|
git_iterator_flag_t iterator_flags;
|
|
69
68
|
uint32_t direach_flags;
|
|
@@ -410,7 +409,9 @@ static const char *loose_parse_symbolic(git_str *file_content)
|
|
|
410
409
|
static bool is_per_worktree_ref(const char *ref_name)
|
|
411
410
|
{
|
|
412
411
|
return git__prefixcmp(ref_name, "refs/") != 0 ||
|
|
413
|
-
|
|
412
|
+
git__prefixcmp(ref_name, "refs/bisect/") == 0 ||
|
|
413
|
+
git__prefixcmp(ref_name, "refs/worktree/") == 0 ||
|
|
414
|
+
git__prefixcmp(ref_name, "refs/rewritten/") == 0;
|
|
414
415
|
}
|
|
415
416
|
|
|
416
417
|
static int loose_lookup(
|
|
@@ -799,89 +800,155 @@ static void refdb_fs_backend__iterator_free(git_reference_iterator *_iter)
|
|
|
799
800
|
{
|
|
800
801
|
refdb_fs_iter *iter = GIT_CONTAINER_OF(_iter, refdb_fs_iter, parent);
|
|
801
802
|
|
|
802
|
-
|
|
803
|
+
git_vector_dispose(&iter->loose);
|
|
803
804
|
git_pool_clear(&iter->pool);
|
|
804
805
|
git_sortedcache_free(iter->cache);
|
|
805
806
|
git__free(iter);
|
|
806
807
|
}
|
|
807
808
|
|
|
808
|
-
|
|
809
|
-
refdb_fs_backend *backend
|
|
810
|
-
refdb_fs_iter *iter
|
|
809
|
+
struct iter_load_context {
|
|
810
|
+
refdb_fs_backend *backend;
|
|
811
|
+
refdb_fs_iter *iter;
|
|
812
|
+
|
|
813
|
+
/*
|
|
814
|
+
* If we have a glob with a prefix (eg `refs/heads/ *`) then we can
|
|
815
|
+
* optimize our prefix to avoid walking refs that we know won't
|
|
816
|
+
* match. This is that prefix.
|
|
817
|
+
*/
|
|
818
|
+
const char *ref_prefix;
|
|
819
|
+
size_t ref_prefix_len;
|
|
820
|
+
|
|
821
|
+
/* Temporary variables to avoid unnecessary allocations */
|
|
822
|
+
git_str ref_name;
|
|
823
|
+
git_str path;
|
|
824
|
+
};
|
|
825
|
+
|
|
826
|
+
static void iter_load_optimize_prefix(struct iter_load_context *ctx)
|
|
811
827
|
{
|
|
812
|
-
|
|
813
|
-
git_str path = GIT_STR_INIT;
|
|
814
|
-
git_iterator *fsit = NULL;
|
|
815
|
-
git_iterator_options fsit_opts = GIT_ITERATOR_OPTIONS_INIT;
|
|
816
|
-
const git_index_entry *entry = NULL;
|
|
817
|
-
const char *ref_prefix = GIT_REFS_DIR;
|
|
818
|
-
size_t ref_prefix_len = strlen(ref_prefix);
|
|
828
|
+
const char *pos, *last_sep = NULL;
|
|
819
829
|
|
|
820
|
-
if (!
|
|
821
|
-
return
|
|
830
|
+
if (!ctx->iter->glob)
|
|
831
|
+
return;
|
|
822
832
|
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
for (pos = iter->glob; *pos; ++pos) {
|
|
830
|
-
switch (*pos) {
|
|
831
|
-
case '?':
|
|
832
|
-
case '*':
|
|
833
|
-
case '[':
|
|
834
|
-
case '\\':
|
|
835
|
-
break;
|
|
836
|
-
case '/':
|
|
837
|
-
last_sep = pos;
|
|
838
|
-
/* FALLTHROUGH */
|
|
839
|
-
default:
|
|
840
|
-
continue;
|
|
841
|
-
}
|
|
833
|
+
for (pos = ctx->iter->glob; *pos; pos++) {
|
|
834
|
+
switch (*pos) {
|
|
835
|
+
case '?':
|
|
836
|
+
case '*':
|
|
837
|
+
case '[':
|
|
838
|
+
case '\\':
|
|
842
839
|
break;
|
|
840
|
+
case '/':
|
|
841
|
+
last_sep = pos;
|
|
842
|
+
/* FALLTHROUGH */
|
|
843
|
+
default:
|
|
844
|
+
continue;
|
|
843
845
|
}
|
|
844
|
-
|
|
845
|
-
ref_prefix = iter->glob;
|
|
846
|
-
ref_prefix_len = (last_sep - ref_prefix) + 1;
|
|
847
|
-
}
|
|
846
|
+
break;
|
|
848
847
|
}
|
|
849
848
|
|
|
850
|
-
if (
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
return error;
|
|
849
|
+
if (last_sep) {
|
|
850
|
+
ctx->ref_prefix = ctx->iter->glob;
|
|
851
|
+
ctx->ref_prefix_len = (last_sep - ctx->ref_prefix) + 1;
|
|
854
852
|
}
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
static int iter_load_paths(
|
|
856
|
+
struct iter_load_context *ctx,
|
|
857
|
+
const char *root_path,
|
|
858
|
+
bool worktree)
|
|
859
|
+
{
|
|
860
|
+
git_iterator *fsit = NULL;
|
|
861
|
+
git_iterator_options fsit_opts = GIT_ITERATOR_OPTIONS_INIT;
|
|
862
|
+
const git_index_entry *entry;
|
|
863
|
+
int error = 0;
|
|
864
|
+
|
|
865
|
+
fsit_opts.flags = ctx->backend->iterator_flags;
|
|
866
|
+
|
|
867
|
+
git_str_clear(&ctx->path);
|
|
868
|
+
git_str_puts(&ctx->path, root_path);
|
|
869
|
+
git_str_put(&ctx->path, ctx->ref_prefix, ctx->ref_prefix_len);
|
|
870
|
+
|
|
871
|
+
fsit_opts.flags = ctx->backend->iterator_flags;
|
|
872
|
+
fsit_opts.oid_type = ctx->backend->oid_type;
|
|
873
|
+
|
|
874
|
+
if ((error = git_iterator_for_filesystem(&fsit, ctx->path.ptr, &fsit_opts)) < 0) {
|
|
875
|
+
/*
|
|
876
|
+
* Subdirectories - either glob provided or per-worktree refs - need
|
|
877
|
+
* not exist.
|
|
878
|
+
*/
|
|
879
|
+
if ((worktree || ctx->iter->glob) && error == GIT_ENOTFOUND)
|
|
880
|
+
error = 0;
|
|
855
881
|
|
|
856
|
-
|
|
857
|
-
git_str_dispose(&path);
|
|
858
|
-
return (iter->glob && error == GIT_ENOTFOUND)? 0 : error;
|
|
882
|
+
goto done;
|
|
859
883
|
}
|
|
860
884
|
|
|
861
|
-
|
|
885
|
+
git_str_clear(&ctx->ref_name);
|
|
886
|
+
git_str_put(&ctx->ref_name, ctx->ref_prefix, ctx->ref_prefix_len);
|
|
862
887
|
|
|
863
|
-
while (
|
|
864
|
-
const char *ref_name;
|
|
888
|
+
while (git_iterator_advance(&entry, fsit) == 0) {
|
|
865
889
|
char *ref_dup;
|
|
866
890
|
|
|
867
|
-
git_str_truncate(&
|
|
868
|
-
git_str_puts(&
|
|
869
|
-
ref_name = git_str_cstr(&path);
|
|
891
|
+
git_str_truncate(&ctx->ref_name, ctx->ref_prefix_len);
|
|
892
|
+
git_str_puts(&ctx->ref_name, entry->path);
|
|
870
893
|
|
|
871
|
-
if (
|
|
872
|
-
|
|
894
|
+
if (worktree) {
|
|
895
|
+
if (!is_per_worktree_ref(ctx->ref_name.ptr))
|
|
896
|
+
continue;
|
|
897
|
+
} else {
|
|
898
|
+
if (git_repository_is_worktree(ctx->backend->repo) &&
|
|
899
|
+
is_per_worktree_ref(ctx->ref_name.ptr))
|
|
900
|
+
continue;
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
if (git__suffixcmp(ctx->ref_name.ptr, ".lock") == 0)
|
|
873
904
|
continue;
|
|
874
905
|
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
906
|
+
if (ctx->iter->glob && wildmatch(ctx->iter->glob, ctx->ref_name.ptr, 0))
|
|
907
|
+
continue;
|
|
908
|
+
|
|
909
|
+
ref_dup = git_pool_strdup(&ctx->iter->pool, ctx->ref_name.ptr);
|
|
910
|
+
GIT_ERROR_CHECK_ALLOC(ref_dup);
|
|
911
|
+
|
|
912
|
+
if ((error = git_vector_insert(&ctx->iter->loose, ref_dup)) < 0)
|
|
913
|
+
goto done;
|
|
880
914
|
}
|
|
881
915
|
|
|
916
|
+
done:
|
|
882
917
|
git_iterator_free(fsit);
|
|
883
|
-
|
|
918
|
+
return error;
|
|
919
|
+
}
|
|
884
920
|
|
|
921
|
+
#define iter_load_context_init(b, i) { b, i, GIT_REFS_DIR, CONST_STRLEN(GIT_REFS_DIR) }
|
|
922
|
+
#define iter_load_context_dispose(ctx) do { \
|
|
923
|
+
git_str_dispose(&((ctx)->path)); \
|
|
924
|
+
git_str_dispose(&((ctx)->ref_name)); \
|
|
925
|
+
} while(0)
|
|
926
|
+
|
|
927
|
+
static int iter_load_loose_paths(
|
|
928
|
+
refdb_fs_backend *backend,
|
|
929
|
+
refdb_fs_iter *iter)
|
|
930
|
+
{
|
|
931
|
+
struct iter_load_context ctx = iter_load_context_init(backend, iter);
|
|
932
|
+
|
|
933
|
+
int error = 0;
|
|
934
|
+
|
|
935
|
+
if (!backend->commonpath)
|
|
936
|
+
return 0;
|
|
937
|
+
|
|
938
|
+
iter_load_optimize_prefix(&ctx);
|
|
939
|
+
|
|
940
|
+
if ((error = iter_load_paths(&ctx,
|
|
941
|
+
backend->commonpath, false)) < 0)
|
|
942
|
+
goto done;
|
|
943
|
+
|
|
944
|
+
if (git_repository_is_worktree(backend->repo)) {
|
|
945
|
+
if ((error = iter_load_paths(&ctx,
|
|
946
|
+
backend->gitpath, true)) < 0)
|
|
947
|
+
goto done;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
done:
|
|
951
|
+
iter_load_context_dispose(&ctx);
|
|
885
952
|
return error;
|
|
886
953
|
}
|
|
887
954
|
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
#include "refdb.h"
|
|
14
14
|
|
|
15
15
|
#include "git2/sys/refdb_backend.h"
|
|
16
|
-
#include "git2/sys/reflog.h"
|
|
17
16
|
|
|
18
17
|
void git_reflog_entry__free(git_reflog_entry *entry)
|
|
19
18
|
{
|
|
@@ -40,7 +39,7 @@ void git_reflog_free(git_reflog *reflog)
|
|
|
40
39
|
git_reflog_entry__free(entry);
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
|
|
42
|
+
git_vector_dispose(&reflog->entries);
|
|
44
43
|
git__free(reflog->ref_name);
|
|
45
44
|
git__free(reflog);
|
|
46
45
|
}
|