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
|
@@ -4,16 +4,15 @@
|
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
6
|
*/
|
|
7
|
-
#ifndef
|
|
8
|
-
#define
|
|
7
|
+
#ifndef INCLUDE_fs_path_h__
|
|
8
|
+
#define INCLUDE_fs_path_h__
|
|
9
9
|
|
|
10
|
-
#include "
|
|
10
|
+
#include "git2_util.h"
|
|
11
11
|
|
|
12
12
|
#include "posix.h"
|
|
13
|
-
#include "
|
|
13
|
+
#include "str.h"
|
|
14
14
|
#include "vector.h"
|
|
15
|
-
|
|
16
|
-
#include "git2/sys/path.h"
|
|
15
|
+
#include "utf8.h"
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* Path manipulation utils
|
|
@@ -32,16 +31,16 @@
|
|
|
32
31
|
* the string ".". If path is a null pointer or points to an empty string,
|
|
33
32
|
* dirname() shall return a pointer to the string "." .
|
|
34
33
|
*
|
|
35
|
-
* The `
|
|
34
|
+
* The `git_fs_path_dirname` implementation is thread safe. The returned
|
|
36
35
|
* string must be manually free'd.
|
|
37
36
|
*
|
|
38
|
-
* The `
|
|
37
|
+
* The `git_fs_path_dirname_r` implementation writes the dirname to a `git_str`
|
|
39
38
|
* if the buffer pointer is not NULL.
|
|
40
39
|
* It returns an error code < 0 if there is an allocation error, otherwise
|
|
41
40
|
* the length of the dirname (which will be > 0).
|
|
42
41
|
*/
|
|
43
|
-
extern char *
|
|
44
|
-
extern int
|
|
42
|
+
extern char *git_fs_path_dirname(const char *path);
|
|
43
|
+
extern int git_fs_path_dirname_r(git_str *buffer, const char *path);
|
|
45
44
|
|
|
46
45
|
/*
|
|
47
46
|
* This function returns the basename of the file, which is the last
|
|
@@ -52,20 +51,20 @@ extern int git_path_dirname_r(git_buf *buffer, const char *path);
|
|
|
52
51
|
* Trailing slashes and backslashes are significant: the basename of
|
|
53
52
|
* c:/foo/bar/ is an empty string after the rightmost slash.
|
|
54
53
|
*
|
|
55
|
-
* The `
|
|
54
|
+
* The `git_fs_path_basename` implementation is thread safe. The returned
|
|
56
55
|
* string must be manually free'd.
|
|
57
56
|
*
|
|
58
|
-
* The `
|
|
57
|
+
* The `git_fs_path_basename_r` implementation writes the basename to a `git_str`.
|
|
59
58
|
* It returns an error code < 0 if there is an allocation error, otherwise
|
|
60
59
|
* the length of the basename (which will be >= 0).
|
|
61
60
|
*/
|
|
62
|
-
extern char *
|
|
63
|
-
extern int
|
|
61
|
+
extern char *git_fs_path_basename(const char *path);
|
|
62
|
+
extern int git_fs_path_basename_r(git_str *buffer, const char *path);
|
|
64
63
|
|
|
65
64
|
/* Return the offset of the start of the basename. Unlike the other
|
|
66
65
|
* basename functions, this returns 0 if the path is empty.
|
|
67
66
|
*/
|
|
68
|
-
extern size_t
|
|
67
|
+
extern size_t git_fs_path_basename_offset(git_str *buffer);
|
|
69
68
|
|
|
70
69
|
/**
|
|
71
70
|
* Find offset to root of path if path has one.
|
|
@@ -75,22 +74,22 @@ extern size_t git_path_basename_offset(git_buf *buffer);
|
|
|
75
74
|
* "c:/windows/rooted/path" returns 2). If the path is not rooted, this
|
|
76
75
|
* returns -1.
|
|
77
76
|
*/
|
|
78
|
-
extern int
|
|
77
|
+
extern int git_fs_path_root(const char *path);
|
|
79
78
|
|
|
80
79
|
/**
|
|
81
80
|
* Ensure path has a trailing '/'.
|
|
82
81
|
*/
|
|
83
|
-
extern int
|
|
82
|
+
extern int git_fs_path_to_dir(git_str *path);
|
|
84
83
|
|
|
85
84
|
/**
|
|
86
85
|
* Ensure string has a trailing '/' if there is space for it.
|
|
87
86
|
*/
|
|
88
|
-
extern void
|
|
87
|
+
extern void git_fs_path_string_to_dir(char *path, size_t size);
|
|
89
88
|
|
|
90
89
|
/**
|
|
91
90
|
* Taken from git.git; returns nonzero if the given path is "." or "..".
|
|
92
91
|
*/
|
|
93
|
-
GIT_INLINE(int)
|
|
92
|
+
GIT_INLINE(int) git_fs_path_is_dot_or_dotdot(const char *name)
|
|
94
93
|
{
|
|
95
94
|
return (name[0] == '.' &&
|
|
96
95
|
(name[1] == '\0' ||
|
|
@@ -98,23 +97,23 @@ GIT_INLINE(int) git_path_is_dot_or_dotdot(const char *name)
|
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
#ifdef GIT_WIN32
|
|
101
|
-
GIT_INLINE(int)
|
|
100
|
+
GIT_INLINE(int) git_fs_path_is_dot_or_dotdotW(const wchar_t *name)
|
|
102
101
|
{
|
|
103
102
|
return (name[0] == L'.' &&
|
|
104
103
|
(name[1] == L'\0' ||
|
|
105
104
|
(name[1] == L'.' && name[2] == L'\0')));
|
|
106
105
|
}
|
|
107
106
|
|
|
108
|
-
#define
|
|
107
|
+
#define git_fs_path_is_absolute(p) \
|
|
109
108
|
(git__isalpha((p)[0]) && (p)[1] == ':' && ((p)[2] == '\\' || (p)[2] == '/'))
|
|
110
109
|
|
|
111
|
-
#define
|
|
110
|
+
#define git_fs_path_is_dirsep(p) \
|
|
112
111
|
((p) == '/' || (p) == '\\')
|
|
113
112
|
|
|
114
113
|
/**
|
|
115
114
|
* Convert backslashes in path to forward slashes.
|
|
116
115
|
*/
|
|
117
|
-
GIT_INLINE(void)
|
|
116
|
+
GIT_INLINE(void) git_fs_path_mkposix(char *path)
|
|
118
117
|
{
|
|
119
118
|
while (*path) {
|
|
120
119
|
if (*path == '\\')
|
|
@@ -124,12 +123,12 @@ GIT_INLINE(void) git_path_mkposix(char *path)
|
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
#else
|
|
127
|
-
# define
|
|
126
|
+
# define git_fs_path_mkposix(p) /* blank */
|
|
128
127
|
|
|
129
|
-
#define
|
|
128
|
+
#define git_fs_path_is_absolute(p) \
|
|
130
129
|
((p)[0] == '/')
|
|
131
130
|
|
|
132
|
-
#define
|
|
131
|
+
#define git_fs_path_is_dirsep(p) \
|
|
133
132
|
((p) == '/')
|
|
134
133
|
|
|
135
134
|
#endif
|
|
@@ -137,7 +136,7 @@ GIT_INLINE(void) git_path_mkposix(char *path)
|
|
|
137
136
|
/**
|
|
138
137
|
* Check if string is a relative path (i.e. starts with "./" or "../")
|
|
139
138
|
*/
|
|
140
|
-
GIT_INLINE(int)
|
|
139
|
+
GIT_INLINE(int) git_fs_path_is_relative(const char *p)
|
|
141
140
|
{
|
|
142
141
|
return (p[0] == '.' && (p[1] == '/' || (p[1] == '.' && p[2] == '/')));
|
|
143
142
|
}
|
|
@@ -145,17 +144,17 @@ GIT_INLINE(int) git_path_is_relative(const char *p)
|
|
|
145
144
|
/**
|
|
146
145
|
* Check if string is at end of path segment (i.e. looking at '/' or '\0')
|
|
147
146
|
*/
|
|
148
|
-
GIT_INLINE(int)
|
|
147
|
+
GIT_INLINE(int) git_fs_path_at_end_of_segment(const char *p)
|
|
149
148
|
{
|
|
150
149
|
return !*p || *p == '/';
|
|
151
150
|
}
|
|
152
151
|
|
|
153
|
-
extern int git__percent_decode(
|
|
152
|
+
extern int git__percent_decode(git_str *decoded_out, const char *input);
|
|
154
153
|
|
|
155
154
|
/**
|
|
156
155
|
* Extract path from file:// URL.
|
|
157
156
|
*/
|
|
158
|
-
extern int
|
|
157
|
+
extern int git_fs_path_fromurl(git_str *local_path_out, const char *file_url);
|
|
159
158
|
|
|
160
159
|
|
|
161
160
|
/**
|
|
@@ -168,35 +167,35 @@ extern int git_path_fromurl(git_buf *local_path_out, const char *file_url);
|
|
|
168
167
|
* Check if a file exists and can be accessed.
|
|
169
168
|
* @return true or false
|
|
170
169
|
*/
|
|
171
|
-
extern bool
|
|
170
|
+
extern bool git_fs_path_exists(const char *path);
|
|
172
171
|
|
|
173
172
|
/**
|
|
174
173
|
* Check if the given path points to a directory.
|
|
175
174
|
* @return true or false
|
|
176
175
|
*/
|
|
177
|
-
extern bool
|
|
176
|
+
extern bool git_fs_path_isdir(const char *path);
|
|
178
177
|
|
|
179
178
|
/**
|
|
180
179
|
* Check if the given path points to a regular file.
|
|
181
180
|
* @return true or false
|
|
182
181
|
*/
|
|
183
|
-
extern bool
|
|
182
|
+
extern bool git_fs_path_isfile(const char *path);
|
|
184
183
|
|
|
185
184
|
/**
|
|
186
185
|
* Check if the given path points to a symbolic link.
|
|
187
186
|
* @return true or false
|
|
188
187
|
*/
|
|
189
|
-
extern bool
|
|
188
|
+
extern bool git_fs_path_islink(const char *path);
|
|
190
189
|
|
|
191
190
|
/**
|
|
192
191
|
* Check if the given path is a directory, and is empty.
|
|
193
192
|
*/
|
|
194
|
-
extern bool
|
|
193
|
+
extern bool git_fs_path_is_empty_dir(const char *path);
|
|
195
194
|
|
|
196
195
|
/**
|
|
197
196
|
* Stat a file and/or link and set error if needed.
|
|
198
197
|
*/
|
|
199
|
-
extern int
|
|
198
|
+
extern int git_fs_path_lstat(const char *path, struct stat *st);
|
|
200
199
|
|
|
201
200
|
/**
|
|
202
201
|
* Check if the parent directory contains the item.
|
|
@@ -205,7 +204,7 @@ extern int git_path_lstat(const char *path, struct stat *st);
|
|
|
205
204
|
* @param item Item that might be in the directory.
|
|
206
205
|
* @return 0 if item exists in directory, <0 otherwise.
|
|
207
206
|
*/
|
|
208
|
-
extern bool
|
|
207
|
+
extern bool git_fs_path_contains(git_str *dir, const char *item);
|
|
209
208
|
|
|
210
209
|
/**
|
|
211
210
|
* Check if the given path contains the given subdirectory.
|
|
@@ -214,7 +213,7 @@ extern bool git_path_contains(git_buf *dir, const char *item);
|
|
|
214
213
|
* @param subdir Subdirectory name to look for in parent
|
|
215
214
|
* @return true if subdirectory exists, false otherwise.
|
|
216
215
|
*/
|
|
217
|
-
extern bool
|
|
216
|
+
extern bool git_fs_path_contains_dir(git_str *parent, const char *subdir);
|
|
218
217
|
|
|
219
218
|
/**
|
|
220
219
|
* Determine the common directory length between two paths, including
|
|
@@ -226,7 +225,7 @@ extern bool git_path_contains_dir(git_buf *parent, const char *subdir);
|
|
|
226
225
|
* @param two The second path
|
|
227
226
|
* @return The length of the common directory
|
|
228
227
|
*/
|
|
229
|
-
extern size_t
|
|
228
|
+
extern size_t git_fs_path_common_dirlen(const char *one, const char *two);
|
|
230
229
|
|
|
231
230
|
/**
|
|
232
231
|
* Make the path relative to the given parent path.
|
|
@@ -237,7 +236,7 @@ extern size_t git_path_common_dirlen(const char *one, const char *two);
|
|
|
237
236
|
* if there was not common root between the paths,
|
|
238
237
|
* or <0.
|
|
239
238
|
*/
|
|
240
|
-
extern int
|
|
239
|
+
extern int git_fs_path_make_relative(git_str *path, const char *parent);
|
|
241
240
|
|
|
242
241
|
/**
|
|
243
242
|
* Check if the given path contains the given file.
|
|
@@ -246,7 +245,7 @@ extern int git_path_make_relative(git_buf *path, const char *parent);
|
|
|
246
245
|
* @param file File name to look for in parent
|
|
247
246
|
* @return true if file exists, false otherwise.
|
|
248
247
|
*/
|
|
249
|
-
extern bool
|
|
248
|
+
extern bool git_fs_path_contains_file(git_str *dir, const char *file);
|
|
250
249
|
|
|
251
250
|
/**
|
|
252
251
|
* Prepend base to unrooted path or just copy path over.
|
|
@@ -254,36 +253,36 @@ extern bool git_path_contains_file(git_buf *dir, const char *file);
|
|
|
254
253
|
* This will optionally return the index into the path where the "root"
|
|
255
254
|
* is, either the end of the base directory prefix or the path root.
|
|
256
255
|
*/
|
|
257
|
-
extern int
|
|
258
|
-
|
|
256
|
+
extern int git_fs_path_join_unrooted(
|
|
257
|
+
git_str *path_out, const char *path, const char *base, ssize_t *root_at);
|
|
259
258
|
|
|
260
259
|
/**
|
|
261
260
|
* Removes multiple occurrences of '/' in a row, squashing them into a
|
|
262
261
|
* single '/'.
|
|
263
262
|
*/
|
|
264
|
-
extern void
|
|
263
|
+
extern void git_fs_path_squash_slashes(git_str *path);
|
|
265
264
|
|
|
266
265
|
/**
|
|
267
266
|
* Clean up path, prepending base if it is not already rooted.
|
|
268
267
|
*/
|
|
269
|
-
extern int
|
|
268
|
+
extern int git_fs_path_prettify(git_str *path_out, const char *path, const char *base);
|
|
270
269
|
|
|
271
270
|
/**
|
|
272
271
|
* Clean up path, prepending base if it is not already rooted and
|
|
273
272
|
* appending a slash.
|
|
274
273
|
*/
|
|
275
|
-
extern int
|
|
274
|
+
extern int git_fs_path_prettify_dir(git_str *path_out, const char *path, const char *base);
|
|
276
275
|
|
|
277
276
|
/**
|
|
278
277
|
* Get a directory from a path.
|
|
279
278
|
*
|
|
280
|
-
* If path is a directory, this acts like `
|
|
279
|
+
* If path is a directory, this acts like `git_fs_path_prettify_dir`
|
|
281
280
|
* (cleaning up path and appending a '/'). If path is a normal file,
|
|
282
281
|
* this prettifies it, then removed the filename a la dirname and
|
|
283
282
|
* appends the trailing '/'. If the path does not exist, it is
|
|
284
283
|
* treated like a regular filename.
|
|
285
284
|
*/
|
|
286
|
-
extern int
|
|
285
|
+
extern int git_fs_path_find_dir(git_str *dir);
|
|
287
286
|
|
|
288
287
|
/**
|
|
289
288
|
* Resolve relative references within a path.
|
|
@@ -295,7 +294,7 @@ extern int git_path_find_dir(git_buf *dir);
|
|
|
295
294
|
* Additionally, this will recognize an "c:/" drive prefix or a "xyz://" URL
|
|
296
295
|
* prefix and not touch that part of the path.
|
|
297
296
|
*/
|
|
298
|
-
extern int
|
|
297
|
+
extern int git_fs_path_resolve_relative(git_str *path, size_t ceiling);
|
|
299
298
|
|
|
300
299
|
/**
|
|
301
300
|
* Apply a relative path to base path.
|
|
@@ -306,12 +305,12 @@ extern int git_path_resolve_relative(git_buf *path, size_t ceiling);
|
|
|
306
305
|
* slash, "." will be eaten with no change, and ".." will remove a
|
|
307
306
|
* segment from the base path.
|
|
308
307
|
*/
|
|
309
|
-
extern int
|
|
308
|
+
extern int git_fs_path_apply_relative(git_str *target, const char *relpath);
|
|
310
309
|
|
|
311
310
|
enum {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
311
|
+
GIT_FS_PATH_DIR_IGNORE_CASE = (1u << 0),
|
|
312
|
+
GIT_FS_PATH_DIR_PRECOMPOSE_UNICODE = (1u << 1),
|
|
313
|
+
GIT_FS_PATH_DIR_INCLUDE_DOT_AND_DOTDOT = (1u << 2),
|
|
315
314
|
};
|
|
316
315
|
|
|
317
316
|
/**
|
|
@@ -319,7 +318,7 @@ enum {
|
|
|
319
318
|
*
|
|
320
319
|
* @param pathbuf Buffer the function reads the initial directory
|
|
321
320
|
* path from, and updates with each successive entry's name.
|
|
322
|
-
* @param flags Combination of
|
|
321
|
+
* @param flags Combination of GIT_FS_PATH_DIR flags.
|
|
323
322
|
* @param callback Callback for each entry. Passed the `payload` and each
|
|
324
323
|
* successive path inside the directory as a full path. This may
|
|
325
324
|
* safely append text to the pathbuf if needed. Return non-zero to
|
|
@@ -327,16 +326,16 @@ enum {
|
|
|
327
326
|
* @param payload Passed to callback as first argument.
|
|
328
327
|
* @return 0 on success or error code from OS error or from callback
|
|
329
328
|
*/
|
|
330
|
-
extern int
|
|
331
|
-
|
|
329
|
+
extern int git_fs_path_direach(
|
|
330
|
+
git_str *pathbuf,
|
|
332
331
|
uint32_t flags,
|
|
333
|
-
int (*callback)(void *payload,
|
|
332
|
+
int (*callback)(void *payload, git_str *path),
|
|
334
333
|
void *payload);
|
|
335
334
|
|
|
336
335
|
/**
|
|
337
336
|
* Sort function to order two paths
|
|
338
337
|
*/
|
|
339
|
-
extern int
|
|
338
|
+
extern int git_fs_path_cmp(
|
|
340
339
|
const char *name1, size_t len1, int isdir1,
|
|
341
340
|
const char *name2, size_t len2, int isdir2,
|
|
342
341
|
int (*compare)(const char *, const char *, size_t));
|
|
@@ -359,21 +358,25 @@ extern int git_path_cmp(
|
|
|
359
358
|
* be modified in any way. Return non-zero to stop iteration.
|
|
360
359
|
* @param payload Passed to fn as the first ath.
|
|
361
360
|
*/
|
|
362
|
-
extern int
|
|
363
|
-
|
|
361
|
+
extern int git_fs_path_walk_up(
|
|
362
|
+
git_str *pathbuf,
|
|
364
363
|
const char *ceiling,
|
|
365
364
|
int (*callback)(void *payload, const char *path),
|
|
366
365
|
void *payload);
|
|
367
366
|
|
|
368
367
|
|
|
369
|
-
enum {
|
|
368
|
+
enum {
|
|
369
|
+
GIT_FS_PATH_NOTEQUAL = 0,
|
|
370
|
+
GIT_FS_PATH_EQUAL = 1,
|
|
371
|
+
GIT_FS_PATH_PREFIX = 2
|
|
372
|
+
};
|
|
370
373
|
|
|
371
374
|
/*
|
|
372
375
|
* Determines if a path is equal to or potentially a child of another.
|
|
373
376
|
* @param parent The possible parent
|
|
374
377
|
* @param child The possible child
|
|
375
378
|
*/
|
|
376
|
-
GIT_INLINE(int)
|
|
379
|
+
GIT_INLINE(int) git_fs_path_equal_or_prefixed(
|
|
377
380
|
const char *parent,
|
|
378
381
|
const char *child,
|
|
379
382
|
ssize_t *prefixlen)
|
|
@@ -385,35 +388,35 @@ GIT_INLINE(int) git_path_equal_or_prefixed(
|
|
|
385
388
|
lastslash = (*p == '/');
|
|
386
389
|
|
|
387
390
|
if (*p++ != *c++)
|
|
388
|
-
return
|
|
391
|
+
return GIT_FS_PATH_NOTEQUAL;
|
|
389
392
|
}
|
|
390
393
|
|
|
391
394
|
if (*p != '\0')
|
|
392
|
-
return
|
|
395
|
+
return GIT_FS_PATH_NOTEQUAL;
|
|
393
396
|
|
|
394
397
|
if (*c == '\0') {
|
|
395
398
|
if (prefixlen)
|
|
396
399
|
*prefixlen = p - parent;
|
|
397
400
|
|
|
398
|
-
return
|
|
401
|
+
return GIT_FS_PATH_EQUAL;
|
|
399
402
|
}
|
|
400
403
|
|
|
401
404
|
if (*c == '/' || lastslash) {
|
|
402
405
|
if (prefixlen)
|
|
403
406
|
*prefixlen = (p - parent) - lastslash;
|
|
404
407
|
|
|
405
|
-
return
|
|
408
|
+
return GIT_FS_PATH_PREFIX;
|
|
406
409
|
}
|
|
407
410
|
|
|
408
|
-
return
|
|
411
|
+
return GIT_FS_PATH_NOTEQUAL;
|
|
409
412
|
}
|
|
410
413
|
|
|
411
414
|
/* translate errno to libgit2 error code and set error message */
|
|
412
|
-
extern int
|
|
415
|
+
extern int git_fs_path_set_error(
|
|
413
416
|
int errno_value, const char *path, const char *action);
|
|
414
417
|
|
|
415
418
|
/* check if non-ascii characters are present in filename */
|
|
416
|
-
extern bool
|
|
419
|
+
extern bool git_fs_path_has_non_ascii(const char *path, size_t pathlen);
|
|
417
420
|
|
|
418
421
|
#define GIT_PATH_REPO_ENCODING "UTF-8"
|
|
419
422
|
|
|
@@ -429,39 +432,39 @@ extern bool git_path_has_non_ascii(const char *path, size_t pathlen);
|
|
|
429
432
|
|
|
430
433
|
typedef struct {
|
|
431
434
|
iconv_t map;
|
|
432
|
-
|
|
433
|
-
}
|
|
435
|
+
git_str buf;
|
|
436
|
+
} git_fs_path_iconv_t;
|
|
434
437
|
|
|
435
|
-
#define GIT_PATH_ICONV_INIT { (iconv_t)-1,
|
|
438
|
+
#define GIT_PATH_ICONV_INIT { (iconv_t)-1, GIT_STR_INIT }
|
|
436
439
|
|
|
437
440
|
/* Init iconv data for converting decomposed UTF-8 to precomposed */
|
|
438
|
-
extern int
|
|
441
|
+
extern int git_fs_path_iconv_init_precompose(git_fs_path_iconv_t *ic);
|
|
439
442
|
|
|
440
443
|
/* Clear allocated iconv data */
|
|
441
|
-
extern void
|
|
444
|
+
extern void git_fs_path_iconv_clear(git_fs_path_iconv_t *ic);
|
|
442
445
|
|
|
443
446
|
/*
|
|
444
447
|
* Rewrite `in` buffer using iconv map if necessary, replacing `in`
|
|
445
448
|
* pointer internal iconv buffer if rewrite happened. The `in` pointer
|
|
446
449
|
* will be left unchanged if no rewrite was needed.
|
|
447
450
|
*/
|
|
448
|
-
extern int
|
|
451
|
+
extern int git_fs_path_iconv(git_fs_path_iconv_t *ic, const char **in, size_t *inlen);
|
|
449
452
|
|
|
450
453
|
#endif /* GIT_USE_ICONV */
|
|
451
454
|
|
|
452
|
-
extern bool
|
|
455
|
+
extern bool git_fs_path_does_decompose_unicode(const char *root);
|
|
453
456
|
|
|
454
457
|
|
|
455
|
-
typedef struct
|
|
458
|
+
typedef struct git_fs_path_diriter git_fs_path_diriter;
|
|
456
459
|
|
|
457
460
|
#if defined(GIT_WIN32) && !defined(__MINGW32__)
|
|
458
461
|
|
|
459
|
-
struct
|
|
462
|
+
struct git_fs_path_diriter
|
|
460
463
|
{
|
|
461
464
|
git_win32_path path;
|
|
462
465
|
size_t parent_len;
|
|
463
466
|
|
|
464
|
-
|
|
467
|
+
git_str path_utf8;
|
|
465
468
|
size_t parent_utf8_len;
|
|
466
469
|
|
|
467
470
|
HANDLE handle;
|
|
@@ -472,13 +475,13 @@ struct git_path_diriter
|
|
|
472
475
|
unsigned int needs_next;
|
|
473
476
|
};
|
|
474
477
|
|
|
475
|
-
#define
|
|
478
|
+
#define GIT_FS_PATH_DIRITER_INIT { {0}, 0, GIT_STR_INIT, 0, INVALID_HANDLE_VALUE }
|
|
476
479
|
|
|
477
480
|
#else
|
|
478
481
|
|
|
479
|
-
struct
|
|
482
|
+
struct git_fs_path_diriter
|
|
480
483
|
{
|
|
481
|
-
|
|
484
|
+
git_str path;
|
|
482
485
|
size_t parent_len;
|
|
483
486
|
|
|
484
487
|
unsigned int flags;
|
|
@@ -486,11 +489,11 @@ struct git_path_diriter
|
|
|
486
489
|
DIR *dir;
|
|
487
490
|
|
|
488
491
|
#ifdef GIT_USE_ICONV
|
|
489
|
-
|
|
492
|
+
git_fs_path_iconv_t ic;
|
|
490
493
|
#endif
|
|
491
494
|
};
|
|
492
495
|
|
|
493
|
-
#define
|
|
496
|
+
#define GIT_FS_PATH_DIRITER_INIT { GIT_STR_INIT }
|
|
494
497
|
|
|
495
498
|
#endif
|
|
496
499
|
|
|
@@ -502,8 +505,8 @@ struct git_path_diriter
|
|
|
502
505
|
* @param flags Directory reader flags
|
|
503
506
|
* @return 0 or an error code
|
|
504
507
|
*/
|
|
505
|
-
extern int
|
|
506
|
-
|
|
508
|
+
extern int git_fs_path_diriter_init(
|
|
509
|
+
git_fs_path_diriter *diriter,
|
|
507
510
|
const char *path,
|
|
508
511
|
unsigned int flags);
|
|
509
512
|
|
|
@@ -514,7 +517,7 @@ extern int git_path_diriter_init(
|
|
|
514
517
|
* @param diriter The directory iterator
|
|
515
518
|
* @return 0, GIT_ITEROVER, or an error code
|
|
516
519
|
*/
|
|
517
|
-
extern int
|
|
520
|
+
extern int git_fs_path_diriter_next(git_fs_path_diriter *diriter);
|
|
518
521
|
|
|
519
522
|
/**
|
|
520
523
|
* Returns the file name of the current item in the iterator.
|
|
@@ -524,10 +527,10 @@ extern int git_path_diriter_next(git_path_diriter *diriter);
|
|
|
524
527
|
* @param diriter The directory iterator
|
|
525
528
|
* @return 0 or an error code
|
|
526
529
|
*/
|
|
527
|
-
extern int
|
|
530
|
+
extern int git_fs_path_diriter_filename(
|
|
528
531
|
const char **out,
|
|
529
532
|
size_t *out_len,
|
|
530
|
-
|
|
533
|
+
git_fs_path_diriter *diriter);
|
|
531
534
|
|
|
532
535
|
/**
|
|
533
536
|
* Returns the full path of the current item in the iterator; that
|
|
@@ -539,10 +542,10 @@ extern int git_path_diriter_filename(
|
|
|
539
542
|
* @param diriter The directory iterator
|
|
540
543
|
* @return 0 or an error code
|
|
541
544
|
*/
|
|
542
|
-
extern int
|
|
545
|
+
extern int git_fs_path_diriter_fullpath(
|
|
543
546
|
const char **out,
|
|
544
547
|
size_t *out_len,
|
|
545
|
-
|
|
548
|
+
git_fs_path_diriter *diriter);
|
|
546
549
|
|
|
547
550
|
/**
|
|
548
551
|
* Performs an `lstat` on the current item in the iterator.
|
|
@@ -551,19 +554,19 @@ extern int git_path_diriter_fullpath(
|
|
|
551
554
|
* @param diriter The directory iterator
|
|
552
555
|
* @return 0 or an error code
|
|
553
556
|
*/
|
|
554
|
-
extern int
|
|
557
|
+
extern int git_fs_path_diriter_stat(struct stat *out, git_fs_path_diriter *diriter);
|
|
555
558
|
|
|
556
559
|
/**
|
|
557
560
|
* Closes the directory iterator.
|
|
558
561
|
*
|
|
559
562
|
* @param diriter The directory iterator
|
|
560
563
|
*/
|
|
561
|
-
extern void
|
|
564
|
+
extern void git_fs_path_diriter_free(git_fs_path_diriter *diriter);
|
|
562
565
|
|
|
563
566
|
/**
|
|
564
567
|
* Load all directory entries (except '.' and '..') into a vector.
|
|
565
568
|
*
|
|
566
|
-
* For cases where `
|
|
569
|
+
* For cases where `git_fs_path_direach()` is not appropriate, this
|
|
567
570
|
* allows you to load the filenames in a directory into a vector
|
|
568
571
|
* of strings. That vector can then be sorted, iterated, or whatever.
|
|
569
572
|
* Remember to free alloc of the allocated strings when you are done.
|
|
@@ -573,9 +576,9 @@ extern void git_path_diriter_free(git_path_diriter *diriter);
|
|
|
573
576
|
* @param prefix_len When inserting entries, the trailing part of path
|
|
574
577
|
* will be prefixed after this length. I.e. given path "/a/b" and
|
|
575
578
|
* prefix_len 3, the entries will look like "b/e1", "b/e2", etc.
|
|
576
|
-
* @param flags Combination of
|
|
579
|
+
* @param flags Combination of GIT_FS_PATH_DIR flags.
|
|
577
580
|
*/
|
|
578
|
-
extern int
|
|
581
|
+
extern int git_fs_path_dirload(
|
|
579
582
|
git_vector *contents,
|
|
580
583
|
const char *path,
|
|
581
584
|
size_t prefix_len,
|
|
@@ -583,77 +586,105 @@ extern int git_path_dirload(
|
|
|
583
586
|
|
|
584
587
|
|
|
585
588
|
/* Used for paths to repositories on the filesystem */
|
|
586
|
-
extern bool
|
|
587
|
-
extern int
|
|
588
|
-
|
|
589
|
-
/* Flags to determine path validity in `
|
|
590
|
-
#define
|
|
591
|
-
#define
|
|
592
|
-
#define
|
|
593
|
-
#define
|
|
594
|
-
#define
|
|
595
|
-
#define
|
|
596
|
-
#define
|
|
597
|
-
#define
|
|
598
|
-
#define
|
|
599
|
-
#define
|
|
600
|
-
|
|
601
|
-
#define
|
|
589
|
+
extern bool git_fs_path_is_local_file_url(const char *file_url);
|
|
590
|
+
extern int git_fs_path_from_url_or_path(git_str *local_path_out, const char *url_or_path);
|
|
591
|
+
|
|
592
|
+
/* Flags to determine path validity in `git_fs_path_isvalid` */
|
|
593
|
+
#define GIT_FS_PATH_REJECT_EMPTY_COMPONENT (1 << 0)
|
|
594
|
+
#define GIT_FS_PATH_REJECT_TRAVERSAL (1 << 1)
|
|
595
|
+
#define GIT_FS_PATH_REJECT_SLASH (1 << 2)
|
|
596
|
+
#define GIT_FS_PATH_REJECT_BACKSLASH (1 << 3)
|
|
597
|
+
#define GIT_FS_PATH_REJECT_TRAILING_DOT (1 << 4)
|
|
598
|
+
#define GIT_FS_PATH_REJECT_TRAILING_SPACE (1 << 5)
|
|
599
|
+
#define GIT_FS_PATH_REJECT_TRAILING_COLON (1 << 6)
|
|
600
|
+
#define GIT_FS_PATH_REJECT_DOS_PATHS (1 << 7)
|
|
601
|
+
#define GIT_FS_PATH_REJECT_NT_CHARS (1 << 8)
|
|
602
|
+
#define GIT_FS_PATH_REJECT_LONG_PATHS (1 << 9)
|
|
603
|
+
|
|
604
|
+
#define GIT_FS_PATH_REJECT_MAX (1 << 9)
|
|
602
605
|
|
|
603
606
|
/* Default path safety for writing files to disk: since we use the
|
|
604
607
|
* Win32 "File Namespace" APIs ("\\?\") we need to protect from
|
|
605
608
|
* paths that the normal Win32 APIs would not write.
|
|
606
609
|
*/
|
|
607
610
|
#ifdef GIT_WIN32
|
|
608
|
-
# define
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
611
|
+
# define GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS \
|
|
612
|
+
GIT_FS_PATH_REJECT_EMPTY_COMPONENT | \
|
|
613
|
+
GIT_FS_PATH_REJECT_TRAVERSAL | \
|
|
614
|
+
GIT_FS_PATH_REJECT_BACKSLASH | \
|
|
615
|
+
GIT_FS_PATH_REJECT_TRAILING_DOT | \
|
|
616
|
+
GIT_FS_PATH_REJECT_TRAILING_SPACE | \
|
|
617
|
+
GIT_FS_PATH_REJECT_TRAILING_COLON | \
|
|
618
|
+
GIT_FS_PATH_REJECT_DOS_PATHS | \
|
|
619
|
+
GIT_FS_PATH_REJECT_NT_CHARS
|
|
616
620
|
#else
|
|
617
|
-
# define
|
|
618
|
-
|
|
621
|
+
# define GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS \
|
|
622
|
+
GIT_FS_PATH_REJECT_EMPTY_COMPONENT | \
|
|
623
|
+
GIT_FS_PATH_REJECT_TRAVERSAL
|
|
619
624
|
#endif
|
|
620
625
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
626
|
+
/**
|
|
627
|
+
* Validate a filesystem path; with custom callbacks per-character and
|
|
628
|
+
* per-path component.
|
|
629
|
+
*/
|
|
630
|
+
extern bool git_fs_path_str_is_valid_ext(
|
|
631
|
+
const git_str *path,
|
|
632
|
+
unsigned int flags,
|
|
633
|
+
bool (*validate_char_cb)(char ch, void *payload),
|
|
634
|
+
bool (*validate_component_cb)(const char *component, size_t len, void *payload),
|
|
635
|
+
bool (*validate_length_cb)(const char *component, size_t len, size_t utf8_char_len),
|
|
636
|
+
void *payload);
|
|
624
637
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
638
|
+
GIT_INLINE(bool) git_fs_path_is_valid_ext(
|
|
639
|
+
const char *path,
|
|
640
|
+
unsigned int flags,
|
|
641
|
+
bool (*validate_char_cb)(char ch, void *payload),
|
|
642
|
+
bool (*validate_component_cb)(const char *component, size_t len, void *payload),
|
|
643
|
+
bool (*validate_length_cb)(const char *component, size_t len, size_t utf8_char_len),
|
|
644
|
+
void *payload)
|
|
645
|
+
{
|
|
646
|
+
const git_str str = GIT_STR_INIT_CONST(path, SIZE_MAX);
|
|
647
|
+
return git_fs_path_str_is_valid_ext(
|
|
648
|
+
&str,
|
|
649
|
+
flags,
|
|
650
|
+
validate_char_cb,
|
|
651
|
+
validate_component_cb,
|
|
652
|
+
validate_length_cb,
|
|
653
|
+
payload);
|
|
654
|
+
}
|
|
628
655
|
|
|
629
656
|
/**
|
|
630
|
-
* Validate a
|
|
631
|
-
*
|
|
632
|
-
*
|
|
633
|
-
*
|
|
634
|
-
*
|
|
635
|
-
* This will ensure that a git path does not contain any "unsafe" components,
|
|
636
|
-
* a '.' or '..' component, or a component that is ".git" (in any case).
|
|
637
|
-
*
|
|
638
|
-
* (Note: if you take or construct an on-disk path -- a workdir path,
|
|
639
|
-
* a path to a git repository or a reference name that could be a loose
|
|
640
|
-
* ref -- you should _also_ validate that with `git_path_validate_workdir`.)
|
|
641
|
-
*
|
|
642
|
-
* `repo` is optional. If specified, it will be used to determine the short
|
|
643
|
-
* path name to reject (if `GIT_PATH_REJECT_DOS_SHORTNAME` is specified),
|
|
644
|
-
* in addition to the default of "git~1".
|
|
657
|
+
* Validate a filesystem path. This ensures that the given path is legal
|
|
658
|
+
* and does not contain any "unsafe" components like path traversal ('.'
|
|
659
|
+
* or '..'), characters that are inappropriate for lesser filesystems
|
|
660
|
+
* (trailing ' ' or ':' characters), or filenames ("component names")
|
|
661
|
+
* that are not supported ('AUX', 'COM1").
|
|
645
662
|
*/
|
|
646
|
-
|
|
647
|
-
git_repository *repo,
|
|
663
|
+
GIT_INLINE(bool) git_fs_path_is_valid(
|
|
648
664
|
const char *path,
|
|
649
|
-
|
|
650
|
-
|
|
665
|
+
unsigned int flags)
|
|
666
|
+
{
|
|
667
|
+
const git_str str = GIT_STR_INIT_CONST(path, SIZE_MAX);
|
|
668
|
+
return git_fs_path_str_is_valid_ext(&str, flags, NULL, NULL, NULL, NULL);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
/** Validate a filesystem path in a `git_str`. */
|
|
672
|
+
GIT_INLINE(bool) git_fs_path_str_is_valid(
|
|
673
|
+
const git_str *path,
|
|
674
|
+
unsigned int flags)
|
|
675
|
+
{
|
|
676
|
+
return git_fs_path_str_is_valid_ext(path, flags, NULL, NULL, NULL, NULL);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
extern int git_fs_path_validate_str_length_with_suffix(
|
|
680
|
+
git_str *path,
|
|
681
|
+
size_t suffix_len);
|
|
651
682
|
|
|
652
683
|
/**
|
|
653
684
|
* Validate an on-disk path, taking into account that it will have a
|
|
654
685
|
* suffix appended (eg, `.lock`).
|
|
655
686
|
*/
|
|
656
|
-
GIT_INLINE(int)
|
|
687
|
+
GIT_INLINE(int) git_fs_path_validate_filesystem_with_suffix(
|
|
657
688
|
const char *path,
|
|
658
689
|
size_t path_len,
|
|
659
690
|
size_t suffix_len)
|
|
@@ -684,74 +715,76 @@ GIT_INLINE(int) git_path_validate_filesystem_with_suffix(
|
|
|
684
715
|
* Windows.
|
|
685
716
|
*
|
|
686
717
|
* For paths within the working directory, you should use ensure that
|
|
687
|
-
* `core.longpaths` is obeyed. Use `
|
|
718
|
+
* `core.longpaths` is obeyed. Use `git_fs_path_validate_workdir`.
|
|
688
719
|
*/
|
|
689
|
-
GIT_INLINE(int)
|
|
720
|
+
GIT_INLINE(int) git_fs_path_validate_filesystem(
|
|
690
721
|
const char *path,
|
|
691
722
|
size_t path_len)
|
|
692
723
|
{
|
|
693
|
-
return
|
|
724
|
+
return git_fs_path_validate_filesystem_with_suffix(path, path_len, 0);
|
|
694
725
|
}
|
|
695
726
|
|
|
696
|
-
/**
|
|
697
|
-
* Validate a path relative to the repo's worktree. This ensures that
|
|
698
|
-
* the given working tree path is valid for the operating system/platform.
|
|
699
|
-
* This will ensure that an absolute path is smaller than MAX_PATH on
|
|
700
|
-
* Windows, while keeping `core.longpaths` configuration settings in mind.
|
|
701
|
-
*
|
|
702
|
-
* This should be checked by mechamisms like `git_checkout` after
|
|
703
|
-
* contructing on-disk paths and before trying to write them.
|
|
704
|
-
*
|
|
705
|
-
* If the repository is null, no repository configuration is applied.
|
|
706
|
-
*/
|
|
707
|
-
extern int git_path_validate_workdir(
|
|
708
|
-
git_repository *repo,
|
|
709
|
-
const char *path);
|
|
710
|
-
extern int git_path_validate_workdir_with_len(
|
|
711
|
-
git_repository *repo,
|
|
712
|
-
const char *path,
|
|
713
|
-
size_t path_len);
|
|
714
|
-
extern int git_path_validate_workdir_buf(
|
|
715
|
-
git_repository *repo,
|
|
716
|
-
git_buf *buf);
|
|
717
|
-
|
|
718
727
|
/**
|
|
719
728
|
* Convert any backslashes into slashes
|
|
720
729
|
*/
|
|
721
|
-
int
|
|
730
|
+
int git_fs_path_normalize_slashes(git_str *out, const char *path);
|
|
722
731
|
|
|
723
|
-
bool
|
|
732
|
+
bool git_fs_path_supports_symlinks(const char *dir);
|
|
724
733
|
|
|
725
734
|
typedef enum {
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
735
|
+
GIT_FS_PATH_OWNER_NONE = 0,
|
|
736
|
+
|
|
737
|
+
/** The file must be owned by the current user. */
|
|
738
|
+
GIT_FS_PATH_OWNER_CURRENT_USER = (1 << 0),
|
|
739
|
+
|
|
740
|
+
/** The file must be owned by the system account. */
|
|
741
|
+
GIT_FS_PATH_OWNER_ADMINISTRATOR = (1 << 1),
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* The file may be owned by a system account if the current
|
|
745
|
+
* user is in an administrator group. Windows only; this is
|
|
746
|
+
* a noop on non-Windows systems.
|
|
747
|
+
*/
|
|
748
|
+
GIT_FS_PATH_USER_IS_ADMINISTRATOR = (1 << 2),
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* The file is owned by the current user, who is running `sudo`.
|
|
752
|
+
*/
|
|
753
|
+
GIT_FS_PATH_OWNER_RUNNING_SUDO = (1 << 3),
|
|
754
|
+
|
|
755
|
+
/** The file may be owned by another user. */
|
|
756
|
+
GIT_FS_PATH_OWNER_OTHER = (1 << 4)
|
|
757
|
+
} git_fs_path_owner_t;
|
|
731
758
|
|
|
732
759
|
/**
|
|
733
760
|
* Sets the mock ownership for files; subsequent calls to
|
|
734
|
-
* `
|
|
735
|
-
* with `
|
|
761
|
+
* `git_fs_path_owner_is_*` functions will return this data until
|
|
762
|
+
* cleared with `GIT_FS_PATH_OWNER_NONE`.
|
|
736
763
|
*/
|
|
737
|
-
void
|
|
764
|
+
void git_fs_path__set_owner(git_fs_path_owner_t owner);
|
|
765
|
+
|
|
766
|
+
/** Verify that the file in question is owned by the given owner. */
|
|
767
|
+
int git_fs_path_owner_is(
|
|
768
|
+
bool *out,
|
|
769
|
+
const char *path,
|
|
770
|
+
git_fs_path_owner_t owner_type);
|
|
738
771
|
|
|
739
772
|
/**
|
|
740
773
|
* Verify that the file in question is owned by an administrator or system
|
|
741
774
|
* account.
|
|
742
775
|
*/
|
|
743
|
-
int
|
|
776
|
+
int git_fs_path_owner_is_system(bool *out, const char *path);
|
|
744
777
|
|
|
745
778
|
/**
|
|
746
779
|
* Verify that the file in question is owned by the current user;
|
|
747
780
|
*/
|
|
748
781
|
|
|
749
|
-
int
|
|
782
|
+
int git_fs_path_owner_is_current_user(bool *out, const char *path);
|
|
750
783
|
|
|
751
784
|
/**
|
|
752
|
-
*
|
|
753
|
-
*
|
|
785
|
+
* Search the current PATH for the given executable, returning the full
|
|
786
|
+
* path if it is found.
|
|
754
787
|
*/
|
|
755
|
-
int
|
|
788
|
+
int git_fs_path_find_executable(git_str *fullpath, const char *executable);
|
|
756
789
|
|
|
757
790
|
#endif
|