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
|
@@ -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
|
}
|
|
@@ -808,7 +808,7 @@ int git_reference_list(
|
|
|
808
808
|
|
|
809
809
|
if (git_reference_foreach_name(
|
|
810
810
|
repo, &cb__reflist_add, (void *)&ref_list) < 0) {
|
|
811
|
-
|
|
811
|
+
git_vector_dispose(&ref_list);
|
|
812
812
|
return -1;
|
|
813
813
|
}
|
|
814
814
|
|
|
@@ -819,7 +819,7 @@ int git_reference_list(
|
|
|
819
819
|
|
|
820
820
|
static int is_valid_ref_char(char ch)
|
|
821
821
|
{
|
|
822
|
-
if ((unsigned) ch <= ' ')
|
|
822
|
+
if ((unsigned) ch <= ' ' || ch == '\177') /* ASCII control characters */
|
|
823
823
|
return 0;
|
|
824
824
|
|
|
825
825
|
switch (ch) {
|
|
@@ -835,17 +835,20 @@ static int is_valid_ref_char(char ch)
|
|
|
835
835
|
}
|
|
836
836
|
}
|
|
837
837
|
|
|
838
|
-
static int ensure_segment_validity(const char *name, char may_contain_glob)
|
|
838
|
+
static int ensure_segment_validity(const char *name, char may_contain_glob, bool allow_caret_prefix)
|
|
839
839
|
{
|
|
840
840
|
const char *current = name;
|
|
841
|
+
const char *start = current;
|
|
841
842
|
char prev = '\0';
|
|
842
843
|
const int lock_len = (int)strlen(GIT_FILELOCK_EXTENSION);
|
|
843
844
|
int segment_len;
|
|
844
845
|
|
|
845
846
|
if (*current == '.')
|
|
846
847
|
return -1; /* Refname starts with "." */
|
|
848
|
+
if (allow_caret_prefix && *current == '^')
|
|
849
|
+
start++;
|
|
847
850
|
|
|
848
|
-
for (current =
|
|
851
|
+
for (current = start; ; current++) {
|
|
849
852
|
if (*current == '\0' || *current == '/')
|
|
850
853
|
break;
|
|
851
854
|
|
|
@@ -877,7 +880,7 @@ static int ensure_segment_validity(const char *name, char may_contain_glob)
|
|
|
877
880
|
return segment_len;
|
|
878
881
|
}
|
|
879
882
|
|
|
880
|
-
static bool
|
|
883
|
+
static bool is_valid_normalized_name(const char *name, size_t len)
|
|
881
884
|
{
|
|
882
885
|
size_t i;
|
|
883
886
|
char c;
|
|
@@ -888,6 +891,12 @@ static bool is_all_caps_and_underscore(const char *name, size_t len)
|
|
|
888
891
|
for (i = 0; i < len; i++)
|
|
889
892
|
{
|
|
890
893
|
c = name[i];
|
|
894
|
+
if (i == 0 && c == '^')
|
|
895
|
+
continue; /* The first character is allowed to be "^" for negative refspecs */
|
|
896
|
+
|
|
897
|
+
if (len == 1 && c == '@')
|
|
898
|
+
return true; /* Abbreviation for HEAD */
|
|
899
|
+
|
|
891
900
|
if ((c < 'A' || c > 'Z') && c != '_')
|
|
892
901
|
return false;
|
|
893
902
|
}
|
|
@@ -908,6 +917,7 @@ int git_reference__normalize_name(
|
|
|
908
917
|
int segment_len, segments_count = 0, error = GIT_EINVALIDSPEC;
|
|
909
918
|
unsigned int process_flags;
|
|
910
919
|
bool normalize = (buf != NULL);
|
|
920
|
+
bool allow_caret_prefix = true;
|
|
911
921
|
bool validate = (flags & GIT_REFERENCE_FORMAT__VALIDATION_DISABLE) == 0;
|
|
912
922
|
|
|
913
923
|
#ifdef GIT_USE_ICONV
|
|
@@ -945,7 +955,7 @@ int git_reference__normalize_name(
|
|
|
945
955
|
while (true) {
|
|
946
956
|
char may_contain_glob = process_flags & GIT_REFERENCE_FORMAT_REFSPEC_PATTERN;
|
|
947
957
|
|
|
948
|
-
segment_len = ensure_segment_validity(current, may_contain_glob);
|
|
958
|
+
segment_len = ensure_segment_validity(current, may_contain_glob, allow_caret_prefix);
|
|
949
959
|
if (segment_len < 0)
|
|
950
960
|
goto cleanup;
|
|
951
961
|
|
|
@@ -958,11 +968,16 @@ int git_reference__normalize_name(
|
|
|
958
968
|
process_flags &= ~GIT_REFERENCE_FORMAT_REFSPEC_PATTERN;
|
|
959
969
|
|
|
960
970
|
if (normalize) {
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
cur_len
|
|
971
|
+
/* `<empty>@` (i.e. just `@`) is an alias for `HEAD` */
|
|
972
|
+
if (segments_count == 0 && segment_len == 1 && current[0] == '@') {
|
|
973
|
+
git_str_sets(buf, GIT_HEAD_FILE);
|
|
974
|
+
} else {
|
|
975
|
+
size_t cur_len = git_str_len(buf);
|
|
976
|
+
|
|
977
|
+
git_str_joinpath(buf, git_str_cstr(buf), current);
|
|
978
|
+
git_str_truncate(buf,
|
|
979
|
+
cur_len + segment_len + (segments_count ? 1 : 0));
|
|
980
|
+
}
|
|
966
981
|
|
|
967
982
|
if (git_str_oom(buf)) {
|
|
968
983
|
error = -1;
|
|
@@ -981,6 +996,12 @@ int git_reference__normalize_name(
|
|
|
981
996
|
break;
|
|
982
997
|
|
|
983
998
|
current += segment_len + 1;
|
|
999
|
+
|
|
1000
|
+
/*
|
|
1001
|
+
* A caret prefix is only allowed in the first segment to signify a
|
|
1002
|
+
* negative refspec.
|
|
1003
|
+
*/
|
|
1004
|
+
allow_caret_prefix = false;
|
|
984
1005
|
}
|
|
985
1006
|
|
|
986
1007
|
/* A refname can not be empty */
|
|
@@ -1000,12 +1021,13 @@ int git_reference__normalize_name(
|
|
|
1000
1021
|
|
|
1001
1022
|
if ((segments_count == 1 ) &&
|
|
1002
1023
|
!(flags & GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND) &&
|
|
1003
|
-
!(
|
|
1024
|
+
!(is_valid_normalized_name(name, (size_t)segment_len) ||
|
|
1004
1025
|
((flags & GIT_REFERENCE_FORMAT_REFSPEC_PATTERN) && !strcmp("*", name))))
|
|
1005
1026
|
goto cleanup;
|
|
1006
1027
|
|
|
1007
1028
|
if ((segments_count > 1)
|
|
1008
|
-
&& (
|
|
1029
|
+
&& !(flags & GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND)
|
|
1030
|
+
&& (is_valid_normalized_name(name, strchr(name, '/') - name)))
|
|
1009
1031
|
goto cleanup;
|
|
1010
1032
|
|
|
1011
1033
|
error = 0;
|
|
@@ -1080,6 +1102,12 @@ int git_reference_cmp(
|
|
|
1080
1102
|
return git_oid__cmp(&ref1->target.oid, &ref2->target.oid);
|
|
1081
1103
|
}
|
|
1082
1104
|
|
|
1105
|
+
int git_reference__cmp_cb(const void *a, const void *b)
|
|
1106
|
+
{
|
|
1107
|
+
return git_reference_cmp(
|
|
1108
|
+
(const git_reference *)a, (const git_reference *)b);
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1083
1111
|
/*
|
|
1084
1112
|
* Starting with the reference given by `ref_name`, follows symbolic
|
|
1085
1113
|
* references until a direct reference is found and updated the OID
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
#include "git2/oid.h"
|
|
13
13
|
#include "git2/refs.h"
|
|
14
14
|
#include "git2/refdb.h"
|
|
15
|
-
#include "strmap.h"
|
|
16
15
|
#include "str.h"
|
|
17
16
|
#include "oid.h"
|
|
18
17
|
|
|
@@ -92,6 +91,12 @@ int git_reference__is_tag(const char *ref_name);
|
|
|
92
91
|
int git_reference__is_note(const char *ref_name);
|
|
93
92
|
const char *git_reference__shorthand(const char *name);
|
|
94
93
|
|
|
94
|
+
/*
|
|
95
|
+
* A `git_reference_cmp` wrapper suitable for passing to generic
|
|
96
|
+
* comparators, like `vector_cmp` / `tsort` / etc.
|
|
97
|
+
*/
|
|
98
|
+
int git_reference__cmp_cb(const void *a, const void *b);
|
|
99
|
+
|
|
95
100
|
/**
|
|
96
101
|
* Lookup a reference by name and try to resolve to an OID.
|
|
97
102
|
*
|
|
@@ -22,6 +22,7 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
|
22
22
|
const char *lhs, *rhs;
|
|
23
23
|
int valid = 0;
|
|
24
24
|
unsigned int flags;
|
|
25
|
+
bool is_neg_refspec = false;
|
|
25
26
|
|
|
26
27
|
GIT_ASSERT_ARG(refspec);
|
|
27
28
|
GIT_ASSERT_ARG(input);
|
|
@@ -34,6 +35,9 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
|
34
35
|
refspec->force = 1;
|
|
35
36
|
lhs++;
|
|
36
37
|
}
|
|
38
|
+
if (*lhs == '^') {
|
|
39
|
+
is_neg_refspec = true;
|
|
40
|
+
}
|
|
37
41
|
|
|
38
42
|
rhs = strrchr(lhs, ':');
|
|
39
43
|
|
|
@@ -62,7 +66,14 @@ int git_refspec__parse(git_refspec *refspec, const char *input, bool is_fetch)
|
|
|
62
66
|
|
|
63
67
|
llen = (rhs ? (size_t)(rhs - lhs - 1) : strlen(lhs));
|
|
64
68
|
if (1 <= llen && memchr(lhs, '*', llen)) {
|
|
65
|
-
|
|
69
|
+
/*
|
|
70
|
+
* If the lefthand side contains a glob, then one of the following must be
|
|
71
|
+
* true, otherwise the spec is invalid
|
|
72
|
+
* 1) the rhs exists and also contains a glob
|
|
73
|
+
* 2) it is a negative refspec (i.e. no rhs)
|
|
74
|
+
* 3) the rhs doesn't exist and we're fetching
|
|
75
|
+
*/
|
|
76
|
+
if ((rhs && !is_glob) || (rhs && is_neg_refspec) || (!rhs && is_fetch && !is_neg_refspec))
|
|
66
77
|
goto invalid;
|
|
67
78
|
is_glob = 1;
|
|
68
79
|
} else if (rhs && is_glob)
|
|
@@ -225,6 +236,14 @@ int git_refspec_force(const git_refspec *refspec)
|
|
|
225
236
|
return refspec->force;
|
|
226
237
|
}
|
|
227
238
|
|
|
239
|
+
int git_refspec_src_matches_negative(const git_refspec *refspec, const char *refname)
|
|
240
|
+
{
|
|
241
|
+
if (refspec == NULL || refspec->src == NULL || !git_refspec_is_negative(refspec))
|
|
242
|
+
return false;
|
|
243
|
+
|
|
244
|
+
return (wildmatch(refspec->src + 1, refname, 0) == 0);
|
|
245
|
+
}
|
|
246
|
+
|
|
228
247
|
int git_refspec_src_matches(const git_refspec *refspec, const char *refname)
|
|
229
248
|
{
|
|
230
249
|
if (refspec == NULL || refspec->src == NULL)
|
|
@@ -340,6 +359,14 @@ int git_refspec_is_wildcard(const git_refspec *spec)
|
|
|
340
359
|
return (spec->src[strlen(spec->src) - 1] == '*');
|
|
341
360
|
}
|
|
342
361
|
|
|
362
|
+
int git_refspec_is_negative(const git_refspec *spec)
|
|
363
|
+
{
|
|
364
|
+
GIT_ASSERT_ARG(spec);
|
|
365
|
+
GIT_ASSERT_ARG(spec->src);
|
|
366
|
+
|
|
367
|
+
return (spec->src[0] == '^' && spec->dst == NULL);
|
|
368
|
+
}
|
|
369
|
+
|
|
343
370
|
git_direction git_refspec_direction(const git_refspec *spec)
|
|
344
371
|
{
|
|
345
372
|
GIT_ASSERT_ARG(spec);
|