rugged 1.6.3 → 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/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- 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/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- 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 +138 -56
- 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 +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- 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 -6
- 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 +24 -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 +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 +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- 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 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- 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 +47 -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 +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- 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 +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- 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 +27 -13
- 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 +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- 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 +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- 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 +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- 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 +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- 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 +113 -96
- 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 +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- 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_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- 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 +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- 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 +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- 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 +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- 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 +34 -8
- 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 +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- 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/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- 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/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- 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/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -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 +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- 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 +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- 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/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -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/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- 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 +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -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 +6 -10
- 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/staticstr.h +66 -0
- 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 +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- 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 -238
- 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/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- 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 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- 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
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -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,86 +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
|
+
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)
|
809
827
|
{
|
810
|
-
|
811
|
-
git_str path = GIT_STR_INIT;
|
812
|
-
git_iterator *fsit = NULL;
|
813
|
-
git_iterator_options fsit_opts = GIT_ITERATOR_OPTIONS_INIT;
|
814
|
-
const git_index_entry *entry = NULL;
|
815
|
-
const char *ref_prefix = GIT_REFS_DIR;
|
816
|
-
size_t ref_prefix_len = strlen(ref_prefix);
|
828
|
+
const char *pos, *last_sep = NULL;
|
817
829
|
|
818
|
-
if (!
|
819
|
-
return
|
830
|
+
if (!ctx->iter->glob)
|
831
|
+
return;
|
820
832
|
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
switch (*pos) {
|
828
|
-
case '?':
|
829
|
-
case '*':
|
830
|
-
case '[':
|
831
|
-
case '\\':
|
832
|
-
break;
|
833
|
-
case '/':
|
834
|
-
last_sep = pos;
|
835
|
-
/* FALLTHROUGH */
|
836
|
-
default:
|
837
|
-
continue;
|
838
|
-
}
|
833
|
+
for (pos = ctx->iter->glob; *pos; pos++) {
|
834
|
+
switch (*pos) {
|
835
|
+
case '?':
|
836
|
+
case '*':
|
837
|
+
case '[':
|
838
|
+
case '\\':
|
839
839
|
break;
|
840
|
+
case '/':
|
841
|
+
last_sep = pos;
|
842
|
+
/* FALLTHROUGH */
|
843
|
+
default:
|
844
|
+
continue;
|
840
845
|
}
|
841
|
-
|
842
|
-
ref_prefix = iter->glob;
|
843
|
-
ref_prefix_len = (last_sep - ref_prefix) + 1;
|
844
|
-
}
|
846
|
+
break;
|
845
847
|
}
|
846
848
|
|
847
|
-
if (
|
848
|
-
|
849
|
-
|
850
|
-
return error;
|
849
|
+
if (last_sep) {
|
850
|
+
ctx->ref_prefix = ctx->iter->glob;
|
851
|
+
ctx->ref_prefix_len = (last_sep - ctx->ref_prefix) + 1;
|
851
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);
|
852
870
|
|
853
|
-
|
854
|
-
|
855
|
-
|
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;
|
881
|
+
|
882
|
+
goto done;
|
856
883
|
}
|
857
884
|
|
858
|
-
|
885
|
+
git_str_clear(&ctx->ref_name);
|
886
|
+
git_str_put(&ctx->ref_name, ctx->ref_prefix, ctx->ref_prefix_len);
|
859
887
|
|
860
|
-
while (
|
861
|
-
const char *ref_name;
|
888
|
+
while (git_iterator_advance(&entry, fsit) == 0) {
|
862
889
|
char *ref_dup;
|
863
890
|
|
864
|
-
git_str_truncate(&
|
865
|
-
git_str_puts(&
|
866
|
-
|
891
|
+
git_str_truncate(&ctx->ref_name, ctx->ref_prefix_len);
|
892
|
+
git_str_puts(&ctx->ref_name, entry->path);
|
893
|
+
|
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
|
+
}
|
867
902
|
|
868
|
-
if (git__suffixcmp(ref_name, ".lock") == 0
|
869
|
-
(iter->glob && wildmatch(iter->glob, ref_name, 0) != 0))
|
903
|
+
if (git__suffixcmp(ctx->ref_name.ptr, ".lock") == 0)
|
870
904
|
continue;
|
871
905
|
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
|
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;
|
877
914
|
}
|
878
915
|
|
916
|
+
done:
|
879
917
|
git_iterator_free(fsit);
|
880
|
-
|
918
|
+
return error;
|
919
|
+
}
|
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)
|
881
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);
|
882
952
|
return error;
|
883
953
|
}
|
884
954
|
|
@@ -1782,7 +1852,7 @@ static int refdb_fs_backend__rename(
|
|
1782
1852
|
(error = refdb_fs_backend__lookup(&old, _backend, old_name)) < 0)
|
1783
1853
|
return error;
|
1784
1854
|
|
1785
|
-
if ((error =
|
1855
|
+
if ((error = loose_lock(&file, backend, old->name)) < 0) {
|
1786
1856
|
git_reference_free(old);
|
1787
1857
|
return error;
|
1788
1858
|
}
|
@@ -1790,32 +1860,33 @@ static int refdb_fs_backend__rename(
|
|
1790
1860
|
new = git_reference__realloc(&old, new_name);
|
1791
1861
|
if (!new) {
|
1792
1862
|
git_reference_free(old);
|
1863
|
+
git_filebuf_cleanup(&file);
|
1793
1864
|
return -1;
|
1794
1865
|
}
|
1795
1866
|
|
1796
|
-
if ((error =
|
1867
|
+
if ((error = refdb_fs_backend__delete_tail(_backend, &file, old_name, NULL, NULL)) < 0) {
|
1797
1868
|
git_reference_free(new);
|
1869
|
+
git_filebuf_cleanup(&file);
|
1798
1870
|
return error;
|
1799
1871
|
}
|
1800
1872
|
|
1801
|
-
|
1802
|
-
error = refdb_reflog_fs__rename(_backend, old_name, new_name);
|
1803
|
-
if (((error == 0) || (error == GIT_ENOTFOUND)) &&
|
1804
|
-
((error = reflog_append(backend, new, git_reference_target(new), NULL, who, message)) < 0)) {
|
1873
|
+
if ((error = loose_lock(&file, backend, new_name)) < 0) {
|
1805
1874
|
git_reference_free(new);
|
1806
|
-
git_filebuf_cleanup(&file);
|
1807
1875
|
return error;
|
1808
1876
|
}
|
1809
1877
|
|
1810
|
-
if
|
1878
|
+
/* Try to rename the refog; it's ok if the old doesn't exist */
|
1879
|
+
error = refdb_reflog_fs__rename(_backend, old_name, new_name);
|
1880
|
+
if (((error == 0) || (error == GIT_ENOTFOUND)) &&
|
1881
|
+
((error = reflog_append(backend, new, git_reference_target(new), NULL, who, message)) < 0)) {
|
1811
1882
|
git_reference_free(new);
|
1812
1883
|
git_filebuf_cleanup(&file);
|
1813
1884
|
return error;
|
1814
1885
|
}
|
1815
1886
|
|
1816
|
-
|
1817
1887
|
if ((error = loose_commit(&file, new)) < 0 || out == NULL) {
|
1818
1888
|
git_reference_free(new);
|
1889
|
+
git_filebuf_cleanup(&file);
|
1819
1890
|
return error;
|
1820
1891
|
}
|
1821
1892
|
|
@@ -1949,9 +2020,9 @@ static int reflog_parse(git_reflog *log, const char *buf, size_t buf_size)
|
|
1949
2020
|
entry->committer = git__calloc(1, sizeof(*entry->committer));
|
1950
2021
|
GIT_ERROR_CHECK_ALLOC(entry->committer);
|
1951
2022
|
|
1952
|
-
if (git_parse_advance_oid(&entry->oid_old, &parser) < 0 ||
|
2023
|
+
if (git_parse_advance_oid(&entry->oid_old, &parser, log->oid_type) < 0 ||
|
1953
2024
|
git_parse_advance_expected(&parser, " ", 1) < 0 ||
|
1954
|
-
git_parse_advance_oid(&entry->oid_cur, &parser) < 0)
|
2025
|
+
git_parse_advance_oid(&entry->oid_cur, &parser, log->oid_type) < 0)
|
1955
2026
|
goto next;
|
1956
2027
|
|
1957
2028
|
sig = parser.line;
|
@@ -2398,7 +2469,12 @@ static int refdb_reflog_fs__delete(git_refdb_backend *_backend, const char *name
|
|
2398
2469
|
if ((error = reflog_path(&path, backend->repo, name)) < 0)
|
2399
2470
|
goto out;
|
2400
2471
|
|
2401
|
-
|
2472
|
+
/*
|
2473
|
+
* If a reference was moved downwards, eg refs/heads/br2 -> refs/heads/br2/new-name,
|
2474
|
+
* refs/heads/br2 does exist but it's a directory. That's a valid situation.
|
2475
|
+
* Proceed only if it's a file.
|
2476
|
+
*/
|
2477
|
+
if (!git_fs_path_isfile(path.ptr))
|
2402
2478
|
goto out;
|
2403
2479
|
|
2404
2480
|
if ((error = p_unlink(path.ptr)) < 0)
|
@@ -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
|
}
|
@@ -72,6 +72,7 @@ git_reference *git_reference__alloc(
|
|
72
72
|
const git_oid *oid,
|
73
73
|
const git_oid *peel)
|
74
74
|
{
|
75
|
+
git_oid_t oid_type;
|
75
76
|
git_reference *ref;
|
76
77
|
|
77
78
|
GIT_ASSERT_ARG_WITH_RETVAL(name, NULL);
|
@@ -84,10 +85,16 @@ git_reference *git_reference__alloc(
|
|
84
85
|
ref->type = GIT_REFERENCE_DIRECT;
|
85
86
|
git_oid_cpy(&ref->target.oid, oid);
|
86
87
|
|
88
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
89
|
+
oid_type = oid->type;
|
90
|
+
#else
|
91
|
+
oid_type = GIT_OID_SHA1;
|
92
|
+
#endif
|
93
|
+
|
87
94
|
if (peel != NULL)
|
88
95
|
git_oid_cpy(&ref->peel, peel);
|
89
96
|
else
|
90
|
-
git_oid_clear(&ref->peel,
|
97
|
+
git_oid_clear(&ref->peel, oid_type);
|
91
98
|
|
92
99
|
return ref;
|
93
100
|
}
|
@@ -801,7 +808,7 @@ int git_reference_list(
|
|
801
808
|
|
802
809
|
if (git_reference_foreach_name(
|
803
810
|
repo, &cb__reflist_add, (void *)&ref_list) < 0) {
|
804
|
-
|
811
|
+
git_vector_dispose(&ref_list);
|
805
812
|
return -1;
|
806
813
|
}
|
807
814
|
|
@@ -828,17 +835,20 @@ static int is_valid_ref_char(char ch)
|
|
828
835
|
}
|
829
836
|
}
|
830
837
|
|
831
|
-
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)
|
832
839
|
{
|
833
840
|
const char *current = name;
|
841
|
+
const char *start = current;
|
834
842
|
char prev = '\0';
|
835
843
|
const int lock_len = (int)strlen(GIT_FILELOCK_EXTENSION);
|
836
844
|
int segment_len;
|
837
845
|
|
838
846
|
if (*current == '.')
|
839
847
|
return -1; /* Refname starts with "." */
|
848
|
+
if (allow_caret_prefix && *current == '^')
|
849
|
+
start++;
|
840
850
|
|
841
|
-
for (current =
|
851
|
+
for (current = start; ; current++) {
|
842
852
|
if (*current == '\0' || *current == '/')
|
843
853
|
break;
|
844
854
|
|
@@ -870,7 +880,7 @@ static int ensure_segment_validity(const char *name, char may_contain_glob)
|
|
870
880
|
return segment_len;
|
871
881
|
}
|
872
882
|
|
873
|
-
static bool
|
883
|
+
static bool is_valid_normalized_name(const char *name, size_t len)
|
874
884
|
{
|
875
885
|
size_t i;
|
876
886
|
char c;
|
@@ -881,6 +891,9 @@ static bool is_all_caps_and_underscore(const char *name, size_t len)
|
|
881
891
|
for (i = 0; i < len; i++)
|
882
892
|
{
|
883
893
|
c = name[i];
|
894
|
+
if (i == 0 && c == '^')
|
895
|
+
continue; /* The first character is allowed to be "^" for negative refspecs */
|
896
|
+
|
884
897
|
if ((c < 'A' || c > 'Z') && c != '_')
|
885
898
|
return false;
|
886
899
|
}
|
@@ -901,6 +914,7 @@ int git_reference__normalize_name(
|
|
901
914
|
int segment_len, segments_count = 0, error = GIT_EINVALIDSPEC;
|
902
915
|
unsigned int process_flags;
|
903
916
|
bool normalize = (buf != NULL);
|
917
|
+
bool allow_caret_prefix = true;
|
904
918
|
bool validate = (flags & GIT_REFERENCE_FORMAT__VALIDATION_DISABLE) == 0;
|
905
919
|
|
906
920
|
#ifdef GIT_USE_ICONV
|
@@ -938,7 +952,7 @@ int git_reference__normalize_name(
|
|
938
952
|
while (true) {
|
939
953
|
char may_contain_glob = process_flags & GIT_REFERENCE_FORMAT_REFSPEC_PATTERN;
|
940
954
|
|
941
|
-
segment_len = ensure_segment_validity(current, may_contain_glob);
|
955
|
+
segment_len = ensure_segment_validity(current, may_contain_glob, allow_caret_prefix);
|
942
956
|
if (segment_len < 0)
|
943
957
|
goto cleanup;
|
944
958
|
|
@@ -974,6 +988,12 @@ int git_reference__normalize_name(
|
|
974
988
|
break;
|
975
989
|
|
976
990
|
current += segment_len + 1;
|
991
|
+
|
992
|
+
/*
|
993
|
+
* A caret prefix is only allowed in the first segment to signify a
|
994
|
+
* negative refspec.
|
995
|
+
*/
|
996
|
+
allow_caret_prefix = false;
|
977
997
|
}
|
978
998
|
|
979
999
|
/* A refname can not be empty */
|
@@ -993,12 +1013,12 @@ int git_reference__normalize_name(
|
|
993
1013
|
|
994
1014
|
if ((segments_count == 1 ) &&
|
995
1015
|
!(flags & GIT_REFERENCE_FORMAT_REFSPEC_SHORTHAND) &&
|
996
|
-
!(
|
1016
|
+
!(is_valid_normalized_name(name, (size_t)segment_len) ||
|
997
1017
|
((flags & GIT_REFERENCE_FORMAT_REFSPEC_PATTERN) && !strcmp("*", name))))
|
998
1018
|
goto cleanup;
|
999
1019
|
|
1000
1020
|
if ((segments_count > 1)
|
1001
|
-
&& (
|
1021
|
+
&& (is_valid_normalized_name(name, strchr(name, '/') - name)))
|
1002
1022
|
goto cleanup;
|
1003
1023
|
|
1004
1024
|
error = 0;
|
@@ -1073,6 +1093,12 @@ int git_reference_cmp(
|
|
1073
1093
|
return git_oid__cmp(&ref1->target.oid, &ref2->target.oid);
|
1074
1094
|
}
|
1075
1095
|
|
1096
|
+
int git_reference__cmp_cb(const void *a, const void *b)
|
1097
|
+
{
|
1098
|
+
return git_reference_cmp(
|
1099
|
+
(const git_reference *)a, (const git_reference *)b);
|
1100
|
+
}
|
1101
|
+
|
1076
1102
|
/*
|
1077
1103
|
* Starting with the reference given by `ref_name`, follows symbolic
|
1078
1104
|
* 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);
|
@@ -45,6 +45,14 @@ int git_refspec__serialize(git_str *out, const git_refspec *refspec);
|
|
45
45
|
*/
|
46
46
|
int git_refspec_is_wildcard(const git_refspec *spec);
|
47
47
|
|
48
|
+
/**
|
49
|
+
* Determines if a refspec is a negative refspec.
|
50
|
+
*
|
51
|
+
* @param spec the refspec
|
52
|
+
* @return 1 if the refspec is a negative, 0 otherwise
|
53
|
+
*/
|
54
|
+
int git_refspec_is_negative(const git_refspec *spec);
|
55
|
+
|
48
56
|
/**
|
49
57
|
* DWIM `spec` with `refs` existing on the remote, append the dwim'ed
|
50
58
|
* result in `out`.
|