rugged 1.3.2 → 1.6.2
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/README.md +34 -2
- data/ext/rugged/extconf.rb +7 -4
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +9 -2
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +28 -10
- data/ext/rugged/rugged_repo.c +7 -9
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_settings.c +5 -0
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +5 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +132 -288
- data/vendor/libgit2/COPYING +106 -19
- data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
- data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
- data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
- data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
- data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
- data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
- data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
- data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
- data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
- data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
- data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
- data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
- data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
- data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
- data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
- data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
- data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
- data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
- data/vendor/libgit2/cmake/SelectHashes.cmake +91 -53
- data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
- data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
- data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
- data/vendor/libgit2/deps/zlib/adler32.c +7 -0
- data/vendor/libgit2/deps/zlib/crc32.c +975 -288
- data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
- data/vendor/libgit2/deps/zlib/deflate.c +83 -31
- data/vendor/libgit2/deps/zlib/deflate.h +12 -15
- data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
- data/vendor/libgit2/deps/zlib/infback.c +2 -1
- data/vendor/libgit2/deps/zlib/inffast.c +14 -14
- data/vendor/libgit2/deps/zlib/inflate.c +39 -8
- data/vendor/libgit2/deps/zlib/inflate.h +3 -2
- data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
- data/vendor/libgit2/deps/zlib/trees.c +27 -48
- data/vendor/libgit2/deps/zlib/zlib.h +126 -100
- data/vendor/libgit2/deps/zlib/zutil.c +2 -2
- data/vendor/libgit2/deps/zlib/zutil.h +12 -9
- data/vendor/libgit2/include/git2/apply.h +16 -2
- data/vendor/libgit2/include/git2/attr.h +11 -2
- data/vendor/libgit2/include/git2/blame.h +4 -1
- data/vendor/libgit2/include/git2/blob.h +14 -1
- data/vendor/libgit2/include/git2/branch.h +4 -2
- data/vendor/libgit2/include/git2/buffer.h +18 -78
- data/vendor/libgit2/include/git2/cert.h +2 -2
- data/vendor/libgit2/include/git2/checkout.h +5 -2
- data/vendor/libgit2/include/git2/clone.h +3 -3
- data/vendor/libgit2/include/git2/commit.h +2 -0
- data/vendor/libgit2/include/git2/common.h +28 -7
- data/vendor/libgit2/include/git2/config.h +25 -9
- data/vendor/libgit2/include/git2/credential.h +2 -1
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +9 -1
- data/vendor/libgit2/include/git2/describe.h +7 -2
- data/vendor/libgit2/include/git2/diff.h +18 -10
- data/vendor/libgit2/include/git2/email.h +1 -1
- data/vendor/libgit2/include/git2/errors.h +17 -3
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/filter.h +7 -2
- data/vendor/libgit2/include/git2/graph.h +1 -0
- data/vendor/libgit2/include/git2/ignore.h +1 -1
- data/vendor/libgit2/include/git2/index.h +11 -5
- data/vendor/libgit2/include/git2/indexer.h +48 -0
- data/vendor/libgit2/include/git2/merge.h +24 -4
- data/vendor/libgit2/include/git2/message.h +2 -0
- data/vendor/libgit2/include/git2/object.h +49 -0
- data/vendor/libgit2/include/git2/odb.h +94 -13
- data/vendor/libgit2/include/git2/odb_backend.h +107 -19
- data/vendor/libgit2/include/git2/oid.h +115 -15
- data/vendor/libgit2/include/git2/pack.h +24 -8
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/pathspec.h +1 -1
- data/vendor/libgit2/include/git2/proxy.h +1 -1
- data/vendor/libgit2/include/git2/rebase.h +9 -1
- data/vendor/libgit2/include/git2/refdb.h +3 -0
- data/vendor/libgit2/include/git2/reflog.h +1 -1
- data/vendor/libgit2/include/git2/refs.h +2 -2
- data/vendor/libgit2/include/git2/remote.h +184 -37
- data/vendor/libgit2/include/git2/repository.h +34 -10
- data/vendor/libgit2/include/git2/reset.h +2 -2
- data/vendor/libgit2/include/git2/revparse.h +1 -1
- data/vendor/libgit2/include/git2/revwalk.h +4 -1
- data/vendor/libgit2/include/git2/signature.h +1 -1
- data/vendor/libgit2/include/git2/stash.h +61 -7
- data/vendor/libgit2/include/git2/status.h +14 -5
- data/vendor/libgit2/include/git2/strarray.h +0 -13
- data/vendor/libgit2/include/git2/submodule.h +7 -2
- data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
- data/vendor/libgit2/include/git2/sys/odb_backend.h +3 -6
- data/vendor/libgit2/include/git2/sys/remote.h +46 -0
- data/vendor/libgit2/include/git2/sys/stream.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +46 -39
- data/vendor/libgit2/include/git2/tag.h +1 -0
- data/vendor/libgit2/include/git2/tree.h +4 -3
- data/vendor/libgit2/include/git2/types.h +7 -7
- data/vendor/libgit2/include/git2/version.h +27 -6
- data/vendor/libgit2/include/git2/worktree.h +12 -2
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +177 -419
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +57 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/cli/cli.h +20 -0
- data/vendor/libgit2/src/cli/cmd.c +21 -0
- data/vendor/libgit2/src/cli/cmd.h +33 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +154 -0
- data/vendor/libgit2/src/cli/cmd_help.c +86 -0
- data/vendor/libgit2/src/cli/error.h +51 -0
- data/vendor/libgit2/src/cli/main.c +106 -0
- data/vendor/libgit2/src/cli/opt.c +669 -0
- data/vendor/libgit2/src/cli/opt.h +349 -0
- data/vendor/libgit2/src/cli/opt_usage.c +194 -0
- data/vendor/libgit2/src/cli/opt_usage.h +35 -0
- data/vendor/libgit2/src/cli/progress.c +345 -0
- data/vendor/libgit2/src/cli/progress.h +117 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
- data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
- data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +141 -0
- data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +1 -1
- data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
- data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +18 -18
- data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
- data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +18 -18
- data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +18 -18
- data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +4 -4
- data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +18 -13
- data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +2 -0
- data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -1
- data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
- data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
- data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
- data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +15 -3
- data/vendor/libgit2/src/libgit2/buf.c +126 -0
- data/vendor/libgit2/src/libgit2/buf.h +50 -0
- data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +74 -68
- data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +13 -13
- data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +96 -67
- data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +178 -73
- data/vendor/libgit2/src/libgit2/commit.h +87 -0
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +122 -89
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +14 -4
- data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +7 -4
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +101 -69
- data/vendor/libgit2/src/{config.h → libgit2/config.h} +15 -2
- data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +105 -93
- data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +9 -9
- data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +27 -23
- data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
- data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +35 -27
- data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +30 -9
- data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +2 -4
- data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +34 -36
- data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +3 -3
- data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +44 -26
- data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +47 -18
- data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
- data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +112 -100
- data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
- data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
- data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +13 -8
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
- data/vendor/libgit2/src/{email.c → libgit2/email.c} +55 -39
- data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
- data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +18 -18
- data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
- data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
- data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +72 -27
- data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -1
- data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +23 -23
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +127 -53
- data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
- data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
- data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +35 -34
- data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +91 -90
- data/vendor/libgit2/src/{index.h → libgit2/index.h} +6 -3
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +173 -92
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +71 -61
- data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +5 -5
- data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +46 -11
- data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +38 -36
- data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +30 -30
- data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
- data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +2 -2
- data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -3
- data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +112 -92
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +5 -4
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +15 -12
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +5 -2
- data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +1 -2
- data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +1 -1
- data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +25 -34
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +135 -30
- data/vendor/libgit2/src/{object.h → libgit2/object.h} +12 -3
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +228 -81
- data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
- data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
- data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +18 -5
- data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +137 -85
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +136 -90
- data/vendor/libgit2/src/libgit2/oid.h +273 -0
- data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
- data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +56 -30
- data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +11 -6
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +114 -84
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +31 -16
- data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +4 -3
- data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
- data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +1 -0
- data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +27 -11
- data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
- data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +29 -29
- data/vendor/libgit2/src/libgit2/path.c +375 -0
- data/vendor/libgit2/src/libgit2/path.h +68 -0
- data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +6 -6
- data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
- data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
- data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
- data/vendor/libgit2/src/{push.c → libgit2/push.c} +43 -38
- data/vendor/libgit2/src/{push.h → libgit2/push.h} +4 -16
- data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
- data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
- data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +119 -107
- data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +506 -197
- data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +7 -5
- data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +1 -2
- data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +34 -32
- data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +2 -2
- data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +32 -37
- data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +5 -2
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +718 -420
- data/vendor/libgit2/src/libgit2/remote.h +100 -0
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +629 -386
- data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +20 -9
- data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
- data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +14 -14
- data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +71 -42
- data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +12 -8
- data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +12 -6
- data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -1
- data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +235 -61
- data/vendor/libgit2/src/{status.c → libgit2/status.c} +4 -1
- data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +8 -6
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +1 -1
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +7 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +3 -3
- data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +4 -1
- data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +177 -161
- data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +1 -1
- data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
- data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +53 -18
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +73 -42
- data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
- data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +3 -3
- data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +2 -2
- data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
- data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
- data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +1 -1
- data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +1 -1
- data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +10 -10
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +2 -3
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +12 -13
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +10 -10
- data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +9 -11
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +41 -20
- data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +2 -3
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +75 -66
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +138 -116
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +92 -133
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +35 -32
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +177 -65
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +97 -49
- data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +365 -198
- data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +58 -59
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +8 -8
- data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +2 -2
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +93 -83
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +4 -4
- data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +121 -94
- data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
- data/vendor/libgit2/src/libgit2/xdiff/git-xdiff.h +53 -0
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +15 -15
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +134 -108
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +23 -7
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +87 -78
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +1 -12
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +104 -117
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +6 -17
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +15 -20
- data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +18 -7
- data/vendor/libgit2/src/util/CMakeLists.txt +80 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +1 -1
- data/vendor/libgit2/src/{date.c → util/date.c} +14 -20
- data/vendor/libgit2/src/util/date.h +33 -0
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +29 -29
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +2 -2
- data/vendor/libgit2/src/{path.c → util/fs_path.c} +453 -647
- data/vendor/libgit2/src/{path.h → util/fs_path.h} +221 -188
- data/vendor/libgit2/src/{futils.c → util/futils.c} +135 -90
- data/vendor/libgit2/src/{futils.h → util/futils.h} +28 -15
- data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +15 -1
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +20 -59
- data/vendor/libgit2/src/util/hash/builtin.c +53 -0
- data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
- data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
- data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +195 -0
- data/vendor/libgit2/src/util/hash/openssl.h +45 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
- data/vendor/libgit2/src/util/hash/sha.h +70 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
- data/vendor/libgit2/src/util/hash/win32.c +549 -0
- data/vendor/libgit2/src/util/hash/win32.h +60 -0
- data/vendor/libgit2/src/util/hash.c +158 -0
- data/vendor/libgit2/src/util/hash.h +61 -0
- data/vendor/libgit2/src/{khash.h → util/khash.h} +1 -1
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/util/net.c +1003 -0
- data/vendor/libgit2/src/{net.h → util/net.h} +18 -4
- data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
- data/vendor/libgit2/src/{posix.c → util/posix.c} +3 -3
- data/vendor/libgit2/src/{posix.h → util/posix.h} +4 -1
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +2 -2
- data/vendor/libgit2/src/util/rand.c +234 -0
- data/vendor/libgit2/src/util/rand.h +37 -0
- data/vendor/libgit2/src/{regexp.c → util/regexp.c} +4 -4
- data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
- data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
- data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
- data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +1 -1
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +2 -2
- data/vendor/libgit2/src/{buffer.c → util/str.c} +157 -151
- data/vendor/libgit2/src/util/str.h +357 -0
- data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
- data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
- data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
- data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
- data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -4
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -3
- data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
- data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
- data/vendor/libgit2/src/{util.c → util/util.c} +15 -15
- data/vendor/libgit2/src/{util.h → util/util.h} +4 -29
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.h → util/vector.h} +2 -2
- data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +140 -9
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
- data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +12 -28
- data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
- data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
- data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
- data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
- metadata +402 -356
- data/vendor/libgit2/src/buffer.h +0 -374
- data/vendor/libgit2/src/commit.h +0 -46
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
- data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
- data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
- data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
- data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
- data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
- data/vendor/libgit2/src/hash/sha1.h +0 -38
- data/vendor/libgit2/src/hash.c +0 -110
- data/vendor/libgit2/src/hash.h +0 -46
- data/vendor/libgit2/src/message.h +0 -17
- data/vendor/libgit2/src/net.c +0 -540
- data/vendor/libgit2/src/oid.h +0 -51
- data/vendor/libgit2/src/remote.h +0 -55
- data/vendor/libgit2/src/sysdir.c +0 -347
- data/vendor/libgit2/src/win32/findfile.c +0 -230
- data/vendor/libgit2/src/win32/findfile.h +0 -19
- /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
- /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
- /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
- /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
- /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
- /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
- /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
- /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
- /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
- /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
- /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
- /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
- /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
- /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
- /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
- /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
- /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
- /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
- /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
- /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
- /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
- /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
- /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
- /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
- /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
- /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
- /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
- /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
- /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
- /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
- /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
- /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
- /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
- /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
- /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
- /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
- /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
- /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
- /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
- /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
- /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
- /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
- /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
- /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
- /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
- /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
- /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
- /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
- /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
- /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
- /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
- /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
- /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
|
@@ -261,7 +261,7 @@ static int create_binary(
|
|
|
261
261
|
const char *b_data,
|
|
262
262
|
size_t b_datalen)
|
|
263
263
|
{
|
|
264
|
-
|
|
264
|
+
git_str deflate = GIT_STR_INIT, delta = GIT_STR_INIT;
|
|
265
265
|
size_t delta_data_len = 0;
|
|
266
266
|
int error;
|
|
267
267
|
|
|
@@ -302,18 +302,18 @@ static int create_binary(
|
|
|
302
302
|
if (delta.size && delta.size < deflate.size) {
|
|
303
303
|
*out_type = GIT_DIFF_BINARY_DELTA;
|
|
304
304
|
*out_datalen = delta.size;
|
|
305
|
-
*out_data =
|
|
305
|
+
*out_data = git_str_detach(&delta);
|
|
306
306
|
*out_inflatedlen = delta_data_len;
|
|
307
307
|
} else {
|
|
308
308
|
*out_type = GIT_DIFF_BINARY_LITERAL;
|
|
309
309
|
*out_datalen = deflate.size;
|
|
310
|
-
*out_data =
|
|
310
|
+
*out_data = git_str_detach(&deflate);
|
|
311
311
|
*out_inflatedlen = b_datalen;
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
done:
|
|
315
|
-
|
|
316
|
-
|
|
315
|
+
git_str_dispose(&deflate);
|
|
316
|
+
git_str_dispose(&delta);
|
|
317
317
|
|
|
318
318
|
return error;
|
|
319
319
|
}
|
|
@@ -750,18 +750,34 @@ git_diff_driver *git_patch_generated_driver(git_patch_generated *patch)
|
|
|
750
750
|
return patch->ofile.driver;
|
|
751
751
|
}
|
|
752
752
|
|
|
753
|
-
|
|
754
|
-
char **ptr,
|
|
753
|
+
int git_patch_generated_old_data(
|
|
754
|
+
char **ptr, long *len, git_patch_generated *patch)
|
|
755
755
|
{
|
|
756
|
+
if (patch->ofile.map.len > LONG_MAX ||
|
|
757
|
+
patch->ofile.map.len > GIT_XDIFF_MAX_SIZE) {
|
|
758
|
+
git_error_set(GIT_ERROR_INVALID, "files too large for diff");
|
|
759
|
+
return -1;
|
|
760
|
+
}
|
|
761
|
+
|
|
756
762
|
*ptr = patch->ofile.map.data;
|
|
757
|
-
*len = patch->ofile.map.len;
|
|
763
|
+
*len = (long)patch->ofile.map.len;
|
|
764
|
+
|
|
765
|
+
return 0;
|
|
758
766
|
}
|
|
759
767
|
|
|
760
|
-
|
|
761
|
-
char **ptr,
|
|
768
|
+
int git_patch_generated_new_data(
|
|
769
|
+
char **ptr, long *len, git_patch_generated *patch)
|
|
762
770
|
{
|
|
771
|
+
if (patch->ofile.map.len > LONG_MAX ||
|
|
772
|
+
patch->ofile.map.len > GIT_XDIFF_MAX_SIZE) {
|
|
773
|
+
git_error_set(GIT_ERROR_INVALID, "files too large for diff");
|
|
774
|
+
return -1;
|
|
775
|
+
}
|
|
776
|
+
|
|
763
777
|
*ptr = patch->nfile.map.data;
|
|
764
|
-
*len = patch->nfile.map.len;
|
|
778
|
+
*len = (long)patch->nfile.map.len;
|
|
779
|
+
|
|
780
|
+
return 0;
|
|
765
781
|
}
|
|
766
782
|
|
|
767
783
|
static int patch_generated_file_cb(
|
|
@@ -21,7 +21,7 @@ enum {
|
|
|
21
21
|
GIT_PATCH_GENERATED_DIFFABLE = (1 << 3),
|
|
22
22
|
/* the difference between the two sides has been computed */
|
|
23
23
|
GIT_PATCH_GENERATED_DIFFED = (1 << 4),
|
|
24
|
-
GIT_PATCH_GENERATED_FLATTENED = (1 << 5)
|
|
24
|
+
GIT_PATCH_GENERATED_FLATTENED = (1 << 5)
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
struct git_patch_generated {
|
|
@@ -39,10 +39,10 @@ typedef struct git_patch_generated git_patch_generated;
|
|
|
39
39
|
|
|
40
40
|
extern git_diff_driver *git_patch_generated_driver(git_patch_generated *);
|
|
41
41
|
|
|
42
|
-
extern
|
|
43
|
-
char **,
|
|
44
|
-
extern
|
|
45
|
-
char **,
|
|
42
|
+
extern int git_patch_generated_old_data(
|
|
43
|
+
char **, long *, git_patch_generated *);
|
|
44
|
+
extern int git_patch_generated_new_data(
|
|
45
|
+
char **, long *, git_patch_generated *);
|
|
46
46
|
extern int git_patch_generated_from_diff(
|
|
47
47
|
git_patch **, git_diff *, size_t);
|
|
48
48
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#include "git2/patch.h"
|
|
11
11
|
#include "patch.h"
|
|
12
12
|
#include "diff_parse.h"
|
|
13
|
-
#include "
|
|
13
|
+
#include "fs_path.h"
|
|
14
14
|
|
|
15
15
|
typedef struct {
|
|
16
16
|
git_patch base;
|
|
@@ -65,22 +65,22 @@ static size_t header_path_len(git_patch_parse_ctx *ctx)
|
|
|
65
65
|
return len;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
static int parse_header_path_buf(
|
|
68
|
+
static int parse_header_path_buf(git_str *path, git_patch_parse_ctx *ctx, size_t path_len)
|
|
69
69
|
{
|
|
70
70
|
int error;
|
|
71
71
|
|
|
72
|
-
if ((error =
|
|
72
|
+
if ((error = git_str_put(path, ctx->parse_ctx.line, path_len)) < 0)
|
|
73
73
|
return error;
|
|
74
74
|
|
|
75
75
|
git_parse_advance_chars(&ctx->parse_ctx, path_len);
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
git_str_rtrim(path);
|
|
78
78
|
|
|
79
79
|
if (path->size > 0 && path->ptr[0] == '"' &&
|
|
80
|
-
(error =
|
|
80
|
+
(error = git_str_unquote(path)) < 0)
|
|
81
81
|
return error;
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
git_fs_path_squash_slashes(path);
|
|
84
84
|
|
|
85
85
|
if (!path->size)
|
|
86
86
|
return git_parse_err("patch contains empty path at line %"PRIuZ,
|
|
@@ -91,22 +91,22 @@ static int parse_header_path_buf(git_buf *path, git_patch_parse_ctx *ctx, size_t
|
|
|
91
91
|
|
|
92
92
|
static int parse_header_path(char **out, git_patch_parse_ctx *ctx)
|
|
93
93
|
{
|
|
94
|
-
|
|
94
|
+
git_str path = GIT_STR_INIT;
|
|
95
95
|
int error;
|
|
96
96
|
|
|
97
97
|
if ((error = parse_header_path_buf(&path, ctx, header_path_len(ctx))) < 0)
|
|
98
98
|
goto out;
|
|
99
|
-
*out =
|
|
99
|
+
*out = git_str_detach(&path);
|
|
100
100
|
|
|
101
101
|
out:
|
|
102
|
-
|
|
102
|
+
git_str_dispose(&path);
|
|
103
103
|
return error;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
static int parse_header_git_oldpath(
|
|
107
107
|
git_patch_parsed *patch, git_patch_parse_ctx *ctx)
|
|
108
108
|
{
|
|
109
|
-
|
|
109
|
+
git_str old_path = GIT_STR_INIT;
|
|
110
110
|
int error;
|
|
111
111
|
|
|
112
112
|
if (patch->old_path) {
|
|
@@ -118,17 +118,17 @@ static int parse_header_git_oldpath(
|
|
|
118
118
|
if ((error = parse_header_path_buf(&old_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
|
|
119
119
|
goto out;
|
|
120
120
|
|
|
121
|
-
patch->old_path =
|
|
121
|
+
patch->old_path = git_str_detach(&old_path);
|
|
122
122
|
|
|
123
123
|
out:
|
|
124
|
-
|
|
124
|
+
git_str_dispose(&old_path);
|
|
125
125
|
return error;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
static int parse_header_git_newpath(
|
|
129
129
|
git_patch_parsed *patch, git_patch_parse_ctx *ctx)
|
|
130
130
|
{
|
|
131
|
-
|
|
131
|
+
git_str new_path = GIT_STR_INIT;
|
|
132
132
|
int error;
|
|
133
133
|
|
|
134
134
|
if (patch->new_path) {
|
|
@@ -139,10 +139,10 @@ static int parse_header_git_newpath(
|
|
|
139
139
|
|
|
140
140
|
if ((error = parse_header_path_buf(&new_path, ctx, ctx->parse_ctx.line_len - 1)) < 0)
|
|
141
141
|
goto out;
|
|
142
|
-
patch->new_path =
|
|
142
|
+
patch->new_path = git_str_detach(&new_path);
|
|
143
143
|
|
|
144
144
|
out:
|
|
145
|
-
|
|
145
|
+
git_str_dispose(&new_path);
|
|
146
146
|
return error;
|
|
147
147
|
}
|
|
148
148
|
|
|
@@ -168,13 +168,13 @@ static int parse_header_oid(
|
|
|
168
168
|
{
|
|
169
169
|
size_t len;
|
|
170
170
|
|
|
171
|
-
for (len = 0; len < ctx->parse_ctx.line_len && len <
|
|
171
|
+
for (len = 0; len < ctx->parse_ctx.line_len && len < GIT_OID_SHA1_HEXSIZE; len++) {
|
|
172
172
|
if (!git__isxdigit(ctx->parse_ctx.line[len]))
|
|
173
173
|
break;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
if (len < GIT_OID_MINPREFIXLEN || len >
|
|
177
|
-
|
|
176
|
+
if (len < GIT_OID_MINPREFIXLEN || len > GIT_OID_SHA1_HEXSIZE ||
|
|
177
|
+
git_oid__fromstrn(oid, ctx->parse_ctx.line, len, GIT_OID_SHA1) < 0)
|
|
178
178
|
return git_parse_err("invalid hex formatted object id at line %"PRIuZ,
|
|
179
179
|
ctx->parse_ctx.line_num);
|
|
180
180
|
|
|
@@ -257,7 +257,7 @@ static int parse_header_rename(
|
|
|
257
257
|
char **out,
|
|
258
258
|
git_patch_parse_ctx *ctx)
|
|
259
259
|
{
|
|
260
|
-
|
|
260
|
+
git_str path = GIT_STR_INIT;
|
|
261
261
|
|
|
262
262
|
if (parse_header_path_buf(&path, ctx, header_path_len(ctx)) < 0)
|
|
263
263
|
return -1;
|
|
@@ -265,7 +265,7 @@ static int parse_header_rename(
|
|
|
265
265
|
/* Note: the `rename from` and `rename to` lines include the literal
|
|
266
266
|
* filename. They do *not* include the prefix. (Who needs consistency?)
|
|
267
267
|
*/
|
|
268
|
-
*out =
|
|
268
|
+
*out = git_str_detach(&path);
|
|
269
269
|
return 0;
|
|
270
270
|
}
|
|
271
271
|
|
|
@@ -353,7 +353,7 @@ static int parse_header_start(git_patch_parsed *patch, git_patch_parse_ctx *ctx)
|
|
|
353
353
|
* We cannot expect to be able to always parse paths correctly at this
|
|
354
354
|
* point. Due to the possibility of unquoted names, whitespaces in
|
|
355
355
|
* filenames and custom prefixes we have to allow that, though, and just
|
|
356
|
-
*
|
|
356
|
+
* proceed here. We then hope for the "---" and "+++" lines to fix that
|
|
357
357
|
* for us.
|
|
358
358
|
*/
|
|
359
359
|
if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1) &&
|
|
@@ -382,7 +382,7 @@ typedef enum {
|
|
|
382
382
|
STATE_RENAME,
|
|
383
383
|
STATE_COPY,
|
|
384
384
|
|
|
385
|
-
STATE_END
|
|
385
|
+
STATE_END
|
|
386
386
|
} parse_header_state;
|
|
387
387
|
|
|
388
388
|
typedef struct {
|
|
@@ -766,7 +766,7 @@ static int parse_patch_binary_side(
|
|
|
766
766
|
git_patch_parse_ctx *ctx)
|
|
767
767
|
{
|
|
768
768
|
git_diff_binary_t type = GIT_DIFF_BINARY_NONE;
|
|
769
|
-
|
|
769
|
+
git_str base85 = GIT_STR_INIT, decoded = GIT_STR_INIT;
|
|
770
770
|
int64_t len;
|
|
771
771
|
int error = 0;
|
|
772
772
|
|
|
@@ -815,7 +815,7 @@ static int parse_patch_binary_side(
|
|
|
815
815
|
goto done;
|
|
816
816
|
}
|
|
817
817
|
|
|
818
|
-
if ((error =
|
|
818
|
+
if ((error = git_str_decode_base85(
|
|
819
819
|
&decoded, ctx->parse_ctx.line, encoded_len, decoded_len)) < 0)
|
|
820
820
|
goto done;
|
|
821
821
|
|
|
@@ -835,11 +835,11 @@ static int parse_patch_binary_side(
|
|
|
835
835
|
binary->type = type;
|
|
836
836
|
binary->inflatedlen = (size_t)len;
|
|
837
837
|
binary->datalen = decoded.size;
|
|
838
|
-
binary->data =
|
|
838
|
+
binary->data = git_str_detach(&decoded);
|
|
839
839
|
|
|
840
840
|
done:
|
|
841
|
-
|
|
842
|
-
|
|
841
|
+
git_str_dispose(&base85);
|
|
842
|
+
git_str_dispose(&decoded);
|
|
843
843
|
return error;
|
|
844
844
|
}
|
|
845
845
|
|
|
@@ -1065,12 +1065,12 @@ static int check_patch(git_patch_parsed *patch)
|
|
|
1065
1065
|
return git_parse_err("patch with no hunks");
|
|
1066
1066
|
|
|
1067
1067
|
if (delta->status == GIT_DELTA_ADDED) {
|
|
1068
|
-
|
|
1068
|
+
git_oid_clear(&delta->old_file.id, GIT_OID_SHA1);
|
|
1069
1069
|
delta->old_file.id_abbrev = 0;
|
|
1070
1070
|
}
|
|
1071
1071
|
|
|
1072
1072
|
if (delta->status == GIT_DELTA_DELETED) {
|
|
1073
|
-
|
|
1073
|
+
git_oid_clear(&delta->new_file.id, GIT_OID_SHA1);
|
|
1074
1074
|
delta->new_file.id_abbrev = 0;
|
|
1075
1075
|
}
|
|
1076
1076
|
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "path.h"
|
|
9
|
+
|
|
10
|
+
#include "repository.h"
|
|
11
|
+
#include "fs_path.h"
|
|
12
|
+
#include "utf8.h"
|
|
13
|
+
|
|
14
|
+
typedef struct {
|
|
15
|
+
git_repository *repo;
|
|
16
|
+
uint16_t file_mode;
|
|
17
|
+
unsigned int flags;
|
|
18
|
+
} repository_path_validate_data;
|
|
19
|
+
|
|
20
|
+
static int32_t next_hfs_char(const char **in, size_t *len)
|
|
21
|
+
{
|
|
22
|
+
while (*len) {
|
|
23
|
+
uint32_t codepoint;
|
|
24
|
+
int cp_len = git_utf8_iterate(&codepoint, *in, *len);
|
|
25
|
+
if (cp_len < 0)
|
|
26
|
+
return -1;
|
|
27
|
+
|
|
28
|
+
(*in) += cp_len;
|
|
29
|
+
(*len) -= cp_len;
|
|
30
|
+
|
|
31
|
+
/* these code points are ignored completely */
|
|
32
|
+
switch (codepoint) {
|
|
33
|
+
case 0x200c: /* ZERO WIDTH NON-JOINER */
|
|
34
|
+
case 0x200d: /* ZERO WIDTH JOINER */
|
|
35
|
+
case 0x200e: /* LEFT-TO-RIGHT MARK */
|
|
36
|
+
case 0x200f: /* RIGHT-TO-LEFT MARK */
|
|
37
|
+
case 0x202a: /* LEFT-TO-RIGHT EMBEDDING */
|
|
38
|
+
case 0x202b: /* RIGHT-TO-LEFT EMBEDDING */
|
|
39
|
+
case 0x202c: /* POP DIRECTIONAL FORMATTING */
|
|
40
|
+
case 0x202d: /* LEFT-TO-RIGHT OVERRIDE */
|
|
41
|
+
case 0x202e: /* RIGHT-TO-LEFT OVERRIDE */
|
|
42
|
+
case 0x206a: /* INHIBIT SYMMETRIC SWAPPING */
|
|
43
|
+
case 0x206b: /* ACTIVATE SYMMETRIC SWAPPING */
|
|
44
|
+
case 0x206c: /* INHIBIT ARABIC FORM SHAPING */
|
|
45
|
+
case 0x206d: /* ACTIVATE ARABIC FORM SHAPING */
|
|
46
|
+
case 0x206e: /* NATIONAL DIGIT SHAPES */
|
|
47
|
+
case 0x206f: /* NOMINAL DIGIT SHAPES */
|
|
48
|
+
case 0xfeff: /* ZERO WIDTH NO-BREAK SPACE */
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* fold into lowercase -- this will only fold characters in
|
|
53
|
+
* the ASCII range, which is perfectly fine, because the
|
|
54
|
+
* git folder name can only be composed of ascii characters
|
|
55
|
+
*/
|
|
56
|
+
return git__tolower((int)codepoint);
|
|
57
|
+
}
|
|
58
|
+
return 0; /* NULL byte -- end of string */
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static bool validate_dotgit_hfs_generic(
|
|
62
|
+
const char *path,
|
|
63
|
+
size_t len,
|
|
64
|
+
const char *needle,
|
|
65
|
+
size_t needle_len)
|
|
66
|
+
{
|
|
67
|
+
size_t i;
|
|
68
|
+
char c;
|
|
69
|
+
|
|
70
|
+
if (next_hfs_char(&path, &len) != '.')
|
|
71
|
+
return true;
|
|
72
|
+
|
|
73
|
+
for (i = 0; i < needle_len; i++) {
|
|
74
|
+
c = next_hfs_char(&path, &len);
|
|
75
|
+
if (c != needle[i])
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (next_hfs_char(&path, &len) != '\0')
|
|
80
|
+
return true;
|
|
81
|
+
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static bool validate_dotgit_hfs(const char *path, size_t len)
|
|
86
|
+
{
|
|
87
|
+
return validate_dotgit_hfs_generic(path, len, "git", CONST_STRLEN("git"));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
GIT_INLINE(bool) validate_dotgit_ntfs(
|
|
91
|
+
git_repository *repo,
|
|
92
|
+
const char *path,
|
|
93
|
+
size_t len)
|
|
94
|
+
{
|
|
95
|
+
git_str *reserved = git_repository__reserved_names_win32;
|
|
96
|
+
size_t reserved_len = git_repository__reserved_names_win32_len;
|
|
97
|
+
size_t start = 0, i;
|
|
98
|
+
|
|
99
|
+
if (repo)
|
|
100
|
+
git_repository__reserved_names(&reserved, &reserved_len, repo, true);
|
|
101
|
+
|
|
102
|
+
for (i = 0; i < reserved_len; i++) {
|
|
103
|
+
git_str *r = &reserved[i];
|
|
104
|
+
|
|
105
|
+
if (len >= r->size &&
|
|
106
|
+
strncasecmp(path, r->ptr, r->size) == 0) {
|
|
107
|
+
start = r->size;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (!start)
|
|
113
|
+
return true;
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
* Reject paths that start with Windows-style directory separators
|
|
117
|
+
* (".git\") or NTFS alternate streams (".git:") and could be used
|
|
118
|
+
* to write to the ".git" directory on Windows platforms.
|
|
119
|
+
*/
|
|
120
|
+
if (path[start] == '\\' || path[start] == ':')
|
|
121
|
+
return false;
|
|
122
|
+
|
|
123
|
+
/* Reject paths like '.git ' or '.git.' */
|
|
124
|
+
for (i = start; i < len; i++) {
|
|
125
|
+
if (path[i] != ' ' && path[i] != '.')
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* Windows paths that end with spaces and/or dots are elided to the
|
|
134
|
+
* path without them for backward compatibility. That is to say
|
|
135
|
+
* that opening file "foo ", "foo." or even "foo . . ." will all
|
|
136
|
+
* map to a filename of "foo". This function identifies spaces and
|
|
137
|
+
* dots at the end of a filename, whether the proper end of the
|
|
138
|
+
* filename (end of string) or a colon (which would indicate a
|
|
139
|
+
* Windows alternate data stream.)
|
|
140
|
+
*/
|
|
141
|
+
GIT_INLINE(bool) ntfs_end_of_filename(const char *path)
|
|
142
|
+
{
|
|
143
|
+
const char *c = path;
|
|
144
|
+
|
|
145
|
+
for (;; c++) {
|
|
146
|
+
if (*c == '\0' || *c == ':')
|
|
147
|
+
return true;
|
|
148
|
+
if (*c != ' ' && *c != '.')
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
GIT_INLINE(bool) validate_dotgit_ntfs_generic(
|
|
156
|
+
const char *name,
|
|
157
|
+
size_t len,
|
|
158
|
+
const char *dotgit_name,
|
|
159
|
+
size_t dotgit_len,
|
|
160
|
+
const char *shortname_pfix)
|
|
161
|
+
{
|
|
162
|
+
int i, saw_tilde;
|
|
163
|
+
|
|
164
|
+
if (name[0] == '.' && len >= dotgit_len &&
|
|
165
|
+
!strncasecmp(name + 1, dotgit_name, dotgit_len)) {
|
|
166
|
+
return !ntfs_end_of_filename(name + dotgit_len + 1);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* Detect the basic NTFS shortname with the first six chars */
|
|
170
|
+
if (!strncasecmp(name, dotgit_name, 6) && name[6] == '~' &&
|
|
171
|
+
name[7] >= '1' && name[7] <= '4')
|
|
172
|
+
return !ntfs_end_of_filename(name + 8);
|
|
173
|
+
|
|
174
|
+
/* Catch fallback names */
|
|
175
|
+
for (i = 0, saw_tilde = 0; i < 8; i++) {
|
|
176
|
+
if (name[i] == '\0') {
|
|
177
|
+
return true;
|
|
178
|
+
} else if (saw_tilde) {
|
|
179
|
+
if (name[i] < '0' || name[i] > '9')
|
|
180
|
+
return true;
|
|
181
|
+
} else if (name[i] == '~') {
|
|
182
|
+
if (name[i+1] < '1' || name[i+1] > '9')
|
|
183
|
+
return true;
|
|
184
|
+
saw_tilde = 1;
|
|
185
|
+
} else if (i >= 6) {
|
|
186
|
+
return true;
|
|
187
|
+
} else if ((unsigned char)name[i] > 127) {
|
|
188
|
+
return true;
|
|
189
|
+
} else if (git__tolower(name[i]) != shortname_pfix[i]) {
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return !ntfs_end_of_filename(name + i);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/*
|
|
198
|
+
* Return the length of the common prefix between str and prefix, comparing them
|
|
199
|
+
* case-insensitively (must be ASCII to match).
|
|
200
|
+
*/
|
|
201
|
+
GIT_INLINE(size_t) common_prefix_icase(const char *str, size_t len, const char *prefix)
|
|
202
|
+
{
|
|
203
|
+
size_t count = 0;
|
|
204
|
+
|
|
205
|
+
while (len > 0 && tolower(*str) == tolower(*prefix)) {
|
|
206
|
+
count++;
|
|
207
|
+
str++;
|
|
208
|
+
prefix++;
|
|
209
|
+
len--;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return count;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
static bool validate_repo_component(
|
|
216
|
+
const char *component,
|
|
217
|
+
size_t len,
|
|
218
|
+
void *payload)
|
|
219
|
+
{
|
|
220
|
+
repository_path_validate_data *data = (repository_path_validate_data *)payload;
|
|
221
|
+
|
|
222
|
+
if (data->flags & GIT_PATH_REJECT_DOT_GIT_HFS) {
|
|
223
|
+
if (!validate_dotgit_hfs(component, len))
|
|
224
|
+
return false;
|
|
225
|
+
|
|
226
|
+
if (S_ISLNK(data->file_mode) &&
|
|
227
|
+
git_path_is_gitfile(component, len, GIT_PATH_GITFILE_GITMODULES, GIT_PATH_FS_HFS))
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (data->flags & GIT_PATH_REJECT_DOT_GIT_NTFS) {
|
|
232
|
+
if (!validate_dotgit_ntfs(data->repo, component, len))
|
|
233
|
+
return false;
|
|
234
|
+
|
|
235
|
+
if (S_ISLNK(data->file_mode) &&
|
|
236
|
+
git_path_is_gitfile(component, len, GIT_PATH_GITFILE_GITMODULES, GIT_PATH_FS_NTFS))
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* don't bother rerunning the `.git` test if we ran the HFS or NTFS
|
|
241
|
+
* specific tests, they would have already rejected `.git`.
|
|
242
|
+
*/
|
|
243
|
+
if ((data->flags & GIT_PATH_REJECT_DOT_GIT_HFS) == 0 &&
|
|
244
|
+
(data->flags & GIT_PATH_REJECT_DOT_GIT_NTFS) == 0 &&
|
|
245
|
+
(data->flags & GIT_PATH_REJECT_DOT_GIT_LITERAL)) {
|
|
246
|
+
if (len >= 4 &&
|
|
247
|
+
component[0] == '.' &&
|
|
248
|
+
(component[1] == 'g' || component[1] == 'G') &&
|
|
249
|
+
(component[2] == 'i' || component[2] == 'I') &&
|
|
250
|
+
(component[3] == 't' || component[3] == 'T')) {
|
|
251
|
+
if (len == 4)
|
|
252
|
+
return false;
|
|
253
|
+
|
|
254
|
+
if (S_ISLNK(data->file_mode) &&
|
|
255
|
+
common_prefix_icase(component, len, ".gitmodules") == len)
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
GIT_INLINE(unsigned int) dotgit_flags(
|
|
264
|
+
git_repository *repo,
|
|
265
|
+
unsigned int flags)
|
|
266
|
+
{
|
|
267
|
+
int protectHFS = 0, protectNTFS = 1;
|
|
268
|
+
int error = 0;
|
|
269
|
+
|
|
270
|
+
flags |= GIT_PATH_REJECT_DOT_GIT_LITERAL;
|
|
271
|
+
|
|
272
|
+
#ifdef __APPLE__
|
|
273
|
+
protectHFS = 1;
|
|
274
|
+
#endif
|
|
275
|
+
|
|
276
|
+
if (repo && !protectHFS)
|
|
277
|
+
error = git_repository__configmap_lookup(&protectHFS, repo, GIT_CONFIGMAP_PROTECTHFS);
|
|
278
|
+
if (!error && protectHFS)
|
|
279
|
+
flags |= GIT_PATH_REJECT_DOT_GIT_HFS;
|
|
280
|
+
|
|
281
|
+
if (repo)
|
|
282
|
+
error = git_repository__configmap_lookup(&protectNTFS, repo, GIT_CONFIGMAP_PROTECTNTFS);
|
|
283
|
+
if (!error && protectNTFS)
|
|
284
|
+
flags |= GIT_PATH_REJECT_DOT_GIT_NTFS;
|
|
285
|
+
|
|
286
|
+
return flags;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
GIT_INLINE(unsigned int) length_flags(
|
|
290
|
+
git_repository *repo,
|
|
291
|
+
unsigned int flags)
|
|
292
|
+
{
|
|
293
|
+
#ifdef GIT_WIN32
|
|
294
|
+
int allow = 0;
|
|
295
|
+
|
|
296
|
+
if (repo &&
|
|
297
|
+
git_repository__configmap_lookup(&allow, repo, GIT_CONFIGMAP_LONGPATHS) < 0)
|
|
298
|
+
allow = 0;
|
|
299
|
+
|
|
300
|
+
if (allow)
|
|
301
|
+
flags &= ~GIT_FS_PATH_REJECT_LONG_PATHS;
|
|
302
|
+
|
|
303
|
+
#else
|
|
304
|
+
GIT_UNUSED(repo);
|
|
305
|
+
flags &= ~GIT_FS_PATH_REJECT_LONG_PATHS;
|
|
306
|
+
#endif
|
|
307
|
+
|
|
308
|
+
return flags;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
bool git_path_str_is_valid(
|
|
312
|
+
git_repository *repo,
|
|
313
|
+
const git_str *path,
|
|
314
|
+
uint16_t file_mode,
|
|
315
|
+
unsigned int flags)
|
|
316
|
+
{
|
|
317
|
+
repository_path_validate_data data = {0};
|
|
318
|
+
|
|
319
|
+
/* Upgrade the ".git" checks based on platform */
|
|
320
|
+
if ((flags & GIT_PATH_REJECT_DOT_GIT))
|
|
321
|
+
flags = dotgit_flags(repo, flags);
|
|
322
|
+
|
|
323
|
+
/* Update the length checks based on platform */
|
|
324
|
+
if ((flags & GIT_FS_PATH_REJECT_LONG_PATHS))
|
|
325
|
+
flags = length_flags(repo, flags);
|
|
326
|
+
|
|
327
|
+
data.repo = repo;
|
|
328
|
+
data.file_mode = file_mode;
|
|
329
|
+
data.flags = flags;
|
|
330
|
+
|
|
331
|
+
return git_fs_path_str_is_valid_ext(path, flags, NULL, validate_repo_component, NULL, &data);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
static const struct {
|
|
335
|
+
const char *file;
|
|
336
|
+
const char *hash;
|
|
337
|
+
size_t filelen;
|
|
338
|
+
} gitfiles[] = {
|
|
339
|
+
{ "gitignore", "gi250a", CONST_STRLEN("gitignore") },
|
|
340
|
+
{ "gitmodules", "gi7eba", CONST_STRLEN("gitmodules") },
|
|
341
|
+
{ "gitattributes", "gi7d29", CONST_STRLEN("gitattributes") }
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
extern int git_path_is_gitfile(
|
|
345
|
+
const char *path,
|
|
346
|
+
size_t pathlen,
|
|
347
|
+
git_path_gitfile gitfile,
|
|
348
|
+
git_path_fs fs)
|
|
349
|
+
{
|
|
350
|
+
const char *file, *hash;
|
|
351
|
+
size_t filelen;
|
|
352
|
+
|
|
353
|
+
if (!(gitfile >= GIT_PATH_GITFILE_GITIGNORE && gitfile < ARRAY_SIZE(gitfiles))) {
|
|
354
|
+
git_error_set(GIT_ERROR_OS, "invalid gitfile for path validation");
|
|
355
|
+
return -1;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
file = gitfiles[gitfile].file;
|
|
359
|
+
filelen = gitfiles[gitfile].filelen;
|
|
360
|
+
hash = gitfiles[gitfile].hash;
|
|
361
|
+
|
|
362
|
+
switch (fs) {
|
|
363
|
+
case GIT_PATH_FS_GENERIC:
|
|
364
|
+
return !validate_dotgit_ntfs_generic(path, pathlen, file, filelen, hash) ||
|
|
365
|
+
!validate_dotgit_hfs_generic(path, pathlen, file, filelen);
|
|
366
|
+
case GIT_PATH_FS_NTFS:
|
|
367
|
+
return !validate_dotgit_ntfs_generic(path, pathlen, file, filelen, hash);
|
|
368
|
+
case GIT_PATH_FS_HFS:
|
|
369
|
+
return !validate_dotgit_hfs_generic(path, pathlen, file, filelen);
|
|
370
|
+
default:
|
|
371
|
+
git_error_set(GIT_ERROR_OS, "invalid filesystem for path validation");
|
|
372
|
+
return -1;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|