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
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
#include "runtime.h"
|
|
11
11
|
#include "strmap.h"
|
|
12
12
|
#include "hash.h"
|
|
13
|
+
#include "rand.h"
|
|
14
|
+
|
|
13
15
|
#include <ctype.h>
|
|
14
|
-
|
|
15
|
-
#
|
|
16
|
-
#endif
|
|
16
|
+
|
|
17
|
+
#define GIT_FILEMODE_DEFAULT 0100666
|
|
17
18
|
|
|
18
19
|
int git_futils_mkpath2file(const char *file_path, const mode_t mode)
|
|
19
20
|
{
|
|
@@ -22,32 +23,31 @@ int git_futils_mkpath2file(const char *file_path, const mode_t mode)
|
|
|
22
23
|
GIT_MKDIR_PATH | GIT_MKDIR_SKIP_LAST | GIT_MKDIR_VERIFY_DIR);
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
int git_futils_mktmp(
|
|
26
|
+
int git_futils_mktmp(git_str *path_out, const char *filename, mode_t mode)
|
|
26
27
|
{
|
|
28
|
+
const int open_flags = O_RDWR | O_CREAT | O_EXCL | O_BINARY | O_CLOEXEC;
|
|
29
|
+
unsigned int tries = 32;
|
|
27
30
|
int fd;
|
|
28
|
-
mode_t mask;
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
while (tries--) {
|
|
33
|
+
uint64_t rand = git_rand_next();
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (git_buf_oom(path_out))
|
|
36
|
-
return -1;
|
|
35
|
+
git_str_sets(path_out, filename);
|
|
36
|
+
git_str_puts(path_out, "_git2_");
|
|
37
|
+
git_str_encode_hexstr(path_out, (void *)&rand, sizeof(uint64_t));
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"failed to create temporary file '%s'", path_out->ptr);
|
|
41
|
-
return -1;
|
|
42
|
-
}
|
|
39
|
+
if (git_str_oom(path_out))
|
|
40
|
+
return -1;
|
|
43
41
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return -1;
|
|
42
|
+
/* Note that we open with O_CREAT | O_EXCL */
|
|
43
|
+
if ((fd = p_open(path_out->ptr, open_flags, mode)) >= 0)
|
|
44
|
+
return fd;
|
|
48
45
|
}
|
|
49
46
|
|
|
50
|
-
|
|
47
|
+
git_error_set(GIT_ERROR_OS,
|
|
48
|
+
"failed to create temporary file '%s'", path_out->ptr);
|
|
49
|
+
git_str_dispose(path_out);
|
|
50
|
+
return -1;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
int git_futils_creat_withpath(const char *path, const mode_t dirmode, const mode_t mode)
|
|
@@ -99,7 +99,7 @@ int git_futils_open_ro(const char *path)
|
|
|
99
99
|
{
|
|
100
100
|
int fd = p_open(path, O_RDONLY);
|
|
101
101
|
if (fd < 0)
|
|
102
|
-
return
|
|
102
|
+
return git_fs_path_set_error(errno, path, "open");
|
|
103
103
|
return fd;
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -107,7 +107,7 @@ int git_futils_truncate(const char *path, int mode)
|
|
|
107
107
|
{
|
|
108
108
|
int fd = p_open(path, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, mode);
|
|
109
109
|
if (fd < 0)
|
|
110
|
-
return
|
|
110
|
+
return git_fs_path_set_error(errno, path, "open");
|
|
111
111
|
|
|
112
112
|
close(fd);
|
|
113
113
|
return 0;
|
|
@@ -145,12 +145,12 @@ mode_t git_futils_canonical_mode(mode_t raw_mode)
|
|
|
145
145
|
return 0;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
int git_futils_readbuffer_fd(
|
|
148
|
+
int git_futils_readbuffer_fd(git_str *buf, git_file fd, size_t len)
|
|
149
149
|
{
|
|
150
150
|
ssize_t read_size = 0;
|
|
151
151
|
size_t alloc_len;
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
git_str_clear(buf);
|
|
154
154
|
|
|
155
155
|
if (!git__is_ssizet(len)) {
|
|
156
156
|
git_error_set(GIT_ERROR_INVALID, "read too large");
|
|
@@ -158,15 +158,21 @@ int git_futils_readbuffer_fd(git_buf *buf, git_file fd, size_t len)
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, len, 1);
|
|
161
|
-
if (
|
|
161
|
+
if (git_str_grow(buf, alloc_len) < 0)
|
|
162
162
|
return -1;
|
|
163
163
|
|
|
164
164
|
/* p_read loops internally to read len bytes */
|
|
165
165
|
read_size = p_read(fd, buf->ptr, len);
|
|
166
166
|
|
|
167
|
-
if (read_size
|
|
167
|
+
if (read_size < 0) {
|
|
168
168
|
git_error_set(GIT_ERROR_OS, "failed to read descriptor");
|
|
169
|
-
|
|
169
|
+
git_str_dispose(buf);
|
|
170
|
+
return -1;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if ((size_t)read_size != len) {
|
|
174
|
+
git_error_set(GIT_ERROR_FILESYSTEM, "could not read (expected %" PRIuZ " bytes, read %" PRIuZ ")", len, (size_t)read_size);
|
|
175
|
+
git_str_dispose(buf);
|
|
170
176
|
return -1;
|
|
171
177
|
}
|
|
172
178
|
|
|
@@ -176,14 +182,53 @@ int git_futils_readbuffer_fd(git_buf *buf, git_file fd, size_t len)
|
|
|
176
182
|
return 0;
|
|
177
183
|
}
|
|
178
184
|
|
|
185
|
+
int git_futils_readbuffer_fd_full(git_str *buf, git_file fd)
|
|
186
|
+
{
|
|
187
|
+
static size_t blocksize = 10240;
|
|
188
|
+
size_t alloc_len = 0, total_size = 0;
|
|
189
|
+
ssize_t read_size = 0;
|
|
190
|
+
|
|
191
|
+
git_str_clear(buf);
|
|
192
|
+
|
|
193
|
+
while (true) {
|
|
194
|
+
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, blocksize);
|
|
195
|
+
|
|
196
|
+
if (git_str_grow(buf, alloc_len) < 0)
|
|
197
|
+
return -1;
|
|
198
|
+
|
|
199
|
+
/* p_read loops internally to read blocksize bytes */
|
|
200
|
+
read_size = p_read(fd, buf->ptr, blocksize);
|
|
201
|
+
|
|
202
|
+
if (read_size < 0) {
|
|
203
|
+
git_error_set(GIT_ERROR_OS, "failed to read descriptor");
|
|
204
|
+
git_str_dispose(buf);
|
|
205
|
+
return -1;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
total_size += read_size;
|
|
209
|
+
|
|
210
|
+
if ((size_t)read_size < blocksize) {
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
buf->ptr[total_size] = '\0';
|
|
216
|
+
buf->size = total_size;
|
|
217
|
+
|
|
218
|
+
return 0;
|
|
219
|
+
}
|
|
220
|
+
|
|
179
221
|
int git_futils_readbuffer_updated(
|
|
180
|
-
|
|
222
|
+
git_str *out,
|
|
223
|
+
const char *path,
|
|
224
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE],
|
|
225
|
+
int *updated)
|
|
181
226
|
{
|
|
182
227
|
int error;
|
|
183
228
|
git_file fd;
|
|
184
229
|
struct stat st;
|
|
185
|
-
|
|
186
|
-
|
|
230
|
+
git_str buf = GIT_STR_INIT;
|
|
231
|
+
unsigned char checksum_new[GIT_HASH_SHA1_SIZE];
|
|
187
232
|
|
|
188
233
|
GIT_ASSERT_ARG(out);
|
|
189
234
|
GIT_ASSERT_ARG(path && *path);
|
|
@@ -192,7 +237,7 @@ int git_futils_readbuffer_updated(
|
|
|
192
237
|
*updated = 0;
|
|
193
238
|
|
|
194
239
|
if (p_stat(path, &st) < 0)
|
|
195
|
-
return
|
|
240
|
+
return git_fs_path_set_error(errno, path, "stat");
|
|
196
241
|
|
|
197
242
|
|
|
198
243
|
if (S_ISDIR(st.st_mode)) {
|
|
@@ -216,23 +261,23 @@ int git_futils_readbuffer_updated(
|
|
|
216
261
|
p_close(fd);
|
|
217
262
|
|
|
218
263
|
if (checksum) {
|
|
219
|
-
if ((error = git_hash_buf(
|
|
220
|
-
|
|
264
|
+
if ((error = git_hash_buf(checksum_new, buf.ptr, buf.size, GIT_HASH_ALGORITHM_SHA1)) < 0) {
|
|
265
|
+
git_str_dispose(&buf);
|
|
221
266
|
return error;
|
|
222
267
|
}
|
|
223
268
|
|
|
224
269
|
/*
|
|
225
270
|
* If we were given a checksum, we only want to use it if it's different
|
|
226
271
|
*/
|
|
227
|
-
if (!
|
|
228
|
-
|
|
272
|
+
if (!memcmp(checksum, checksum_new, GIT_HASH_SHA1_SIZE)) {
|
|
273
|
+
git_str_dispose(&buf);
|
|
229
274
|
if (updated)
|
|
230
275
|
*updated = 0;
|
|
231
276
|
|
|
232
277
|
return 0;
|
|
233
278
|
}
|
|
234
279
|
|
|
235
|
-
|
|
280
|
+
memcpy(checksum, checksum_new, GIT_HASH_SHA1_SIZE);
|
|
236
281
|
}
|
|
237
282
|
|
|
238
283
|
/*
|
|
@@ -241,19 +286,19 @@ int git_futils_readbuffer_updated(
|
|
|
241
286
|
if (updated != NULL)
|
|
242
287
|
*updated = 1;
|
|
243
288
|
|
|
244
|
-
|
|
245
|
-
|
|
289
|
+
git_str_swap(out, &buf);
|
|
290
|
+
git_str_dispose(&buf);
|
|
246
291
|
|
|
247
292
|
return 0;
|
|
248
293
|
}
|
|
249
294
|
|
|
250
|
-
int git_futils_readbuffer(
|
|
295
|
+
int git_futils_readbuffer(git_str *buf, const char *path)
|
|
251
296
|
{
|
|
252
297
|
return git_futils_readbuffer_updated(buf, path, NULL, NULL);
|
|
253
298
|
}
|
|
254
299
|
|
|
255
300
|
int git_futils_writebuffer(
|
|
256
|
-
const
|
|
301
|
+
const git_str *buf, const char *path, int flags, mode_t mode)
|
|
257
302
|
{
|
|
258
303
|
int fd, do_fsync = 0, error = 0;
|
|
259
304
|
|
|
@@ -266,14 +311,14 @@ int git_futils_writebuffer(
|
|
|
266
311
|
flags &= ~O_FSYNC;
|
|
267
312
|
|
|
268
313
|
if (!mode)
|
|
269
|
-
mode =
|
|
314
|
+
mode = GIT_FILEMODE_DEFAULT;
|
|
270
315
|
|
|
271
316
|
if ((fd = p_open(path, flags, mode)) < 0) {
|
|
272
317
|
git_error_set(GIT_ERROR_OS, "could not open '%s' for writing", path);
|
|
273
318
|
return fd;
|
|
274
319
|
}
|
|
275
320
|
|
|
276
|
-
if ((error = p_write(fd,
|
|
321
|
+
if ((error = p_write(fd, git_str_cstr(buf), git_str_len(buf))) < 0) {
|
|
277
322
|
git_error_set(GIT_ERROR_OS, "could not write to '%s'", path);
|
|
278
323
|
(void)p_close(fd);
|
|
279
324
|
return error;
|
|
@@ -415,7 +460,7 @@ GIT_INLINE(int) mkdir_validate_mode(
|
|
|
415
460
|
}
|
|
416
461
|
|
|
417
462
|
GIT_INLINE(int) mkdir_canonicalize(
|
|
418
|
-
|
|
463
|
+
git_str *path,
|
|
419
464
|
uint32_t flags)
|
|
420
465
|
{
|
|
421
466
|
ssize_t root_len;
|
|
@@ -426,7 +471,7 @@ GIT_INLINE(int) mkdir_canonicalize(
|
|
|
426
471
|
}
|
|
427
472
|
|
|
428
473
|
/* Trim trailing slashes (except the root) */
|
|
429
|
-
if ((root_len =
|
|
474
|
+
if ((root_len = git_fs_path_root(path->ptr)) < 0)
|
|
430
475
|
root_len = 0;
|
|
431
476
|
else
|
|
432
477
|
root_len++;
|
|
@@ -436,18 +481,18 @@ GIT_INLINE(int) mkdir_canonicalize(
|
|
|
436
481
|
|
|
437
482
|
/* if we are not supposed to made the last element, truncate it */
|
|
438
483
|
if ((flags & GIT_MKDIR_SKIP_LAST2) != 0) {
|
|
439
|
-
|
|
484
|
+
git_fs_path_dirname_r(path, path->ptr);
|
|
440
485
|
flags |= GIT_MKDIR_SKIP_LAST;
|
|
441
486
|
}
|
|
442
487
|
if ((flags & GIT_MKDIR_SKIP_LAST) != 0) {
|
|
443
|
-
|
|
488
|
+
git_fs_path_dirname_r(path, path->ptr);
|
|
444
489
|
}
|
|
445
490
|
|
|
446
491
|
/* We were either given the root path (or trimmed it to
|
|
447
492
|
* the root), we don't have anything to do.
|
|
448
493
|
*/
|
|
449
494
|
if (path->size <= (size_t)root_len)
|
|
450
|
-
|
|
495
|
+
git_str_clear(path);
|
|
451
496
|
|
|
452
497
|
return 0;
|
|
453
498
|
}
|
|
@@ -457,20 +502,20 @@ int git_futils_mkdir(
|
|
|
457
502
|
mode_t mode,
|
|
458
503
|
uint32_t flags)
|
|
459
504
|
{
|
|
460
|
-
|
|
505
|
+
git_str make_path = GIT_STR_INIT, parent_path = GIT_STR_INIT;
|
|
461
506
|
const char *relative;
|
|
462
507
|
struct git_futils_mkdir_options opts = { 0 };
|
|
463
508
|
struct stat st;
|
|
464
509
|
size_t depth = 0;
|
|
465
510
|
int len = 0, root_len, error;
|
|
466
511
|
|
|
467
|
-
if ((error =
|
|
512
|
+
if ((error = git_str_puts(&make_path, path)) < 0 ||
|
|
468
513
|
(error = mkdir_canonicalize(&make_path, flags)) < 0 ||
|
|
469
|
-
(error =
|
|
514
|
+
(error = git_str_puts(&parent_path, make_path.ptr)) < 0 ||
|
|
470
515
|
make_path.size == 0)
|
|
471
516
|
goto done;
|
|
472
517
|
|
|
473
|
-
root_len =
|
|
518
|
+
root_len = git_fs_path_root(make_path.ptr);
|
|
474
519
|
|
|
475
520
|
/* find the first parent directory that exists. this will be used
|
|
476
521
|
* as the base to dirname_relative.
|
|
@@ -489,7 +534,7 @@ int git_futils_mkdir(
|
|
|
489
534
|
depth++;
|
|
490
535
|
|
|
491
536
|
/* examine the parent of the current path */
|
|
492
|
-
if ((len =
|
|
537
|
+
if ((len = git_fs_path_dirname_r(&parent_path, parent_path.ptr)) < 0) {
|
|
493
538
|
error = len;
|
|
494
539
|
goto done;
|
|
495
540
|
}
|
|
@@ -538,8 +583,8 @@ int git_futils_mkdir(
|
|
|
538
583
|
parent_path.size ? parent_path.ptr : NULL, mode, flags, &opts);
|
|
539
584
|
|
|
540
585
|
done:
|
|
541
|
-
|
|
542
|
-
|
|
586
|
+
git_str_dispose(&make_path);
|
|
587
|
+
git_str_dispose(&parent_path);
|
|
543
588
|
return error;
|
|
544
589
|
}
|
|
545
590
|
|
|
@@ -555,7 +600,7 @@ int git_futils_mkdir_relative(
|
|
|
555
600
|
uint32_t flags,
|
|
556
601
|
struct git_futils_mkdir_options *opts)
|
|
557
602
|
{
|
|
558
|
-
|
|
603
|
+
git_str make_path = GIT_STR_INIT;
|
|
559
604
|
ssize_t root = 0, min_root_len;
|
|
560
605
|
char lastch = '/', *tail;
|
|
561
606
|
struct stat st;
|
|
@@ -566,7 +611,7 @@ int git_futils_mkdir_relative(
|
|
|
566
611
|
opts = &empty_opts;
|
|
567
612
|
|
|
568
613
|
/* build path and find "root" where we should start calling mkdir */
|
|
569
|
-
if (
|
|
614
|
+
if (git_fs_path_join_unrooted(&make_path, relative_path, base, &root) < 0)
|
|
570
615
|
return -1;
|
|
571
616
|
|
|
572
617
|
if ((error = mkdir_canonicalize(&make_path, flags)) < 0 ||
|
|
@@ -575,10 +620,10 @@ int git_futils_mkdir_relative(
|
|
|
575
620
|
|
|
576
621
|
/* if we are not supposed to make the whole path, reset root */
|
|
577
622
|
if ((flags & GIT_MKDIR_PATH) == 0)
|
|
578
|
-
root =
|
|
623
|
+
root = git_str_rfind(&make_path, '/');
|
|
579
624
|
|
|
580
625
|
/* advance root past drive name or network mount prefix */
|
|
581
|
-
min_root_len =
|
|
626
|
+
min_root_len = git_fs_path_root(make_path.ptr);
|
|
582
627
|
if (root < min_root_len)
|
|
583
628
|
root = min_root_len;
|
|
584
629
|
while (root >= 0 && make_path.ptr[root] == '/')
|
|
@@ -670,7 +715,7 @@ retry_lstat:
|
|
|
670
715
|
}
|
|
671
716
|
|
|
672
717
|
done:
|
|
673
|
-
|
|
718
|
+
git_str_dispose(&make_path);
|
|
674
719
|
return error;
|
|
675
720
|
}
|
|
676
721
|
|
|
@@ -694,13 +739,13 @@ static int futils__error_cannot_rmdir(const char *path, const char *filemsg)
|
|
|
694
739
|
return -1;
|
|
695
740
|
}
|
|
696
741
|
|
|
697
|
-
static int futils__rm_first_parent(
|
|
742
|
+
static int futils__rm_first_parent(git_str *path, const char *ceiling)
|
|
698
743
|
{
|
|
699
744
|
int error = GIT_ENOTFOUND;
|
|
700
745
|
struct stat st;
|
|
701
746
|
|
|
702
747
|
while (error == GIT_ENOTFOUND) {
|
|
703
|
-
|
|
748
|
+
git_str_rtruncate_at_char(path, '/');
|
|
704
749
|
|
|
705
750
|
if (!path->size || git__prefixcmp(path->ptr, ceiling) != 0)
|
|
706
751
|
error = 0;
|
|
@@ -719,7 +764,7 @@ static int futils__rm_first_parent(git_buf *path, const char *ceiling)
|
|
|
719
764
|
return error;
|
|
720
765
|
}
|
|
721
766
|
|
|
722
|
-
static int futils__rmdir_recurs_foreach(void *opaque,
|
|
767
|
+
static int futils__rmdir_recurs_foreach(void *opaque, git_str *path)
|
|
723
768
|
{
|
|
724
769
|
int error = 0;
|
|
725
770
|
futils__rmdir_data *data = opaque;
|
|
@@ -741,13 +786,13 @@ static int futils__rmdir_recurs_foreach(void *opaque, git_buf *path)
|
|
|
741
786
|
path->ptr, "parent is not directory");
|
|
742
787
|
}
|
|
743
788
|
else
|
|
744
|
-
error =
|
|
789
|
+
error = git_fs_path_set_error(errno, path->ptr, "rmdir");
|
|
745
790
|
}
|
|
746
791
|
|
|
747
792
|
else if (S_ISDIR(st.st_mode)) {
|
|
748
793
|
data->depth++;
|
|
749
794
|
|
|
750
|
-
error =
|
|
795
|
+
error = git_fs_path_direach(path, 0, futils__rmdir_recurs_foreach, data);
|
|
751
796
|
|
|
752
797
|
data->depth--;
|
|
753
798
|
|
|
@@ -762,13 +807,13 @@ static int futils__rmdir_recurs_foreach(void *opaque, git_buf *path)
|
|
|
762
807
|
(errno == ENOTEMPTY || errno == EEXIST || errno == EBUSY))
|
|
763
808
|
error = 0;
|
|
764
809
|
else
|
|
765
|
-
error =
|
|
810
|
+
error = git_fs_path_set_error(errno, path->ptr, "rmdir");
|
|
766
811
|
}
|
|
767
812
|
}
|
|
768
813
|
|
|
769
814
|
else if ((data->flags & GIT_RMDIR_REMOVE_FILES) != 0) {
|
|
770
815
|
if (p_unlink(path->ptr) < 0)
|
|
771
|
-
error =
|
|
816
|
+
error = git_fs_path_set_error(errno, path->ptr, "remove");
|
|
772
817
|
}
|
|
773
818
|
|
|
774
819
|
else if ((data->flags & GIT_RMDIR_SKIP_NONEMPTY) == 0)
|
|
@@ -792,11 +837,11 @@ static int futils__rmdir_empty_parent(void *opaque, const char *path)
|
|
|
792
837
|
/* do nothing */
|
|
793
838
|
} else if ((data->flags & GIT_RMDIR_SKIP_NONEMPTY) == 0 &&
|
|
794
839
|
en == EBUSY) {
|
|
795
|
-
error =
|
|
840
|
+
error = git_fs_path_set_error(errno, path, "rmdir");
|
|
796
841
|
} else if (en == ENOTEMPTY || en == EEXIST || en == EBUSY) {
|
|
797
842
|
error = GIT_ITEROVER;
|
|
798
843
|
} else {
|
|
799
|
-
error =
|
|
844
|
+
error = git_fs_path_set_error(errno, path, "rmdir");
|
|
800
845
|
}
|
|
801
846
|
}
|
|
802
847
|
|
|
@@ -807,11 +852,11 @@ int git_futils_rmdir_r(
|
|
|
807
852
|
const char *path, const char *base, uint32_t flags)
|
|
808
853
|
{
|
|
809
854
|
int error;
|
|
810
|
-
|
|
855
|
+
git_str fullpath = GIT_STR_INIT;
|
|
811
856
|
futils__rmdir_data data;
|
|
812
857
|
|
|
813
858
|
/* build path and find "root" where we should start calling mkdir */
|
|
814
|
-
if (
|
|
859
|
+
if (git_fs_path_join_unrooted(&fullpath, path, base, NULL) < 0)
|
|
815
860
|
return -1;
|
|
816
861
|
|
|
817
862
|
memset(&data, 0, sizeof(data));
|
|
@@ -823,7 +868,7 @@ int git_futils_rmdir_r(
|
|
|
823
868
|
|
|
824
869
|
/* remove now-empty parents if requested */
|
|
825
870
|
if (!error && (flags & GIT_RMDIR_EMPTY_PARENTS) != 0)
|
|
826
|
-
error =
|
|
871
|
+
error = git_fs_path_walk_up(
|
|
827
872
|
&fullpath, base, futils__rmdir_empty_parent, &data);
|
|
828
873
|
|
|
829
874
|
if (error == GIT_ITEROVER) {
|
|
@@ -831,7 +876,7 @@ int git_futils_rmdir_r(
|
|
|
831
876
|
error = 0;
|
|
832
877
|
}
|
|
833
878
|
|
|
834
|
-
|
|
879
|
+
git_str_dispose(&fullpath);
|
|
835
880
|
|
|
836
881
|
return error;
|
|
837
882
|
}
|
|
@@ -850,7 +895,7 @@ int git_futils_fake_symlink(const char *target, const char *path)
|
|
|
850
895
|
static int cp_by_fd(int ifd, int ofd, bool close_fd_when_done)
|
|
851
896
|
{
|
|
852
897
|
int error = 0;
|
|
853
|
-
char buffer[
|
|
898
|
+
char buffer[GIT_BUFSIZE_FILEIO];
|
|
854
899
|
ssize_t len = 0;
|
|
855
900
|
|
|
856
901
|
while (!error && (len = p_read(ifd, buffer, sizeof(buffer))) > 0)
|
|
@@ -884,7 +929,7 @@ int git_futils_cp(const char *from, const char *to, mode_t filemode)
|
|
|
884
929
|
|
|
885
930
|
if ((ofd = p_open(to, O_WRONLY | O_CREAT | O_EXCL, filemode)) < 0) {
|
|
886
931
|
p_close(ifd);
|
|
887
|
-
return
|
|
932
|
+
return git_fs_path_set_error(errno, to, "open for writing");
|
|
888
933
|
}
|
|
889
934
|
|
|
890
935
|
return cp_by_fd(ifd, ofd, true);
|
|
@@ -900,7 +945,7 @@ int git_futils_touch(const char *path, time_t *when)
|
|
|
900
945
|
|
|
901
946
|
ret = p_utimes(path, times);
|
|
902
947
|
|
|
903
|
-
return (ret < 0) ?
|
|
948
|
+
return (ret < 0) ? git_fs_path_set_error(errno, path, "touch") : 0;
|
|
904
949
|
}
|
|
905
950
|
|
|
906
951
|
static int cp_link(const char *from, const char *to, size_t link_size)
|
|
@@ -935,7 +980,7 @@ static int cp_link(const char *from, const char *to, size_t link_size)
|
|
|
935
980
|
|
|
936
981
|
typedef struct {
|
|
937
982
|
const char *to_root;
|
|
938
|
-
|
|
983
|
+
git_str to;
|
|
939
984
|
ssize_t from_prefix;
|
|
940
985
|
uint32_t flags;
|
|
941
986
|
uint32_t mkdir_flags;
|
|
@@ -944,7 +989,7 @@ typedef struct {
|
|
|
944
989
|
|
|
945
990
|
#define GIT_CPDIR__MKDIR_DONE_FOR_TO_ROOT (1u << 10)
|
|
946
991
|
|
|
947
|
-
static int _cp_r_mkdir(cp_r_info *info,
|
|
992
|
+
static int _cp_r_mkdir(cp_r_info *info, git_str *from)
|
|
948
993
|
{
|
|
949
994
|
int error = 0;
|
|
950
995
|
|
|
@@ -966,7 +1011,7 @@ static int _cp_r_mkdir(cp_r_info *info, git_buf *from)
|
|
|
966
1011
|
return error;
|
|
967
1012
|
}
|
|
968
1013
|
|
|
969
|
-
static int _cp_r_callback(void *ref,
|
|
1014
|
+
static int _cp_r_callback(void *ref, git_str *from)
|
|
970
1015
|
{
|
|
971
1016
|
int error = 0;
|
|
972
1017
|
cp_r_info *info = ref;
|
|
@@ -974,14 +1019,14 @@ static int _cp_r_callback(void *ref, git_buf *from)
|
|
|
974
1019
|
bool exists = false;
|
|
975
1020
|
|
|
976
1021
|
if ((info->flags & GIT_CPDIR_COPY_DOTFILES) == 0 &&
|
|
977
|
-
from->ptr[
|
|
1022
|
+
from->ptr[git_fs_path_basename_offset(from)] == '.')
|
|
978
1023
|
return 0;
|
|
979
1024
|
|
|
980
|
-
if ((error =
|
|
1025
|
+
if ((error = git_str_joinpath(
|
|
981
1026
|
&info->to, info->to_root, from->ptr + info->from_prefix)) < 0)
|
|
982
1027
|
return error;
|
|
983
1028
|
|
|
984
|
-
if (!(error =
|
|
1029
|
+
if (!(error = git_fs_path_lstat(info->to.ptr, &to_st)))
|
|
985
1030
|
exists = true;
|
|
986
1031
|
else if (error != GIT_ENOTFOUND)
|
|
987
1032
|
return error;
|
|
@@ -990,7 +1035,7 @@ static int _cp_r_callback(void *ref, git_buf *from)
|
|
|
990
1035
|
error = 0;
|
|
991
1036
|
}
|
|
992
1037
|
|
|
993
|
-
if ((error =
|
|
1038
|
+
if ((error = git_fs_path_lstat(from->ptr, &from_st)) < 0)
|
|
994
1039
|
return error;
|
|
995
1040
|
|
|
996
1041
|
if (S_ISDIR(from_st.st_mode)) {
|
|
@@ -1006,7 +1051,7 @@ static int _cp_r_callback(void *ref, git_buf *from)
|
|
|
1006
1051
|
|
|
1007
1052
|
/* recurse onto target directory */
|
|
1008
1053
|
if (!error && (!exists || S_ISDIR(to_st.st_mode)))
|
|
1009
|
-
error =
|
|
1054
|
+
error = git_fs_path_direach(from, 0, _cp_r_callback, info);
|
|
1010
1055
|
|
|
1011
1056
|
if (oldmode != 0)
|
|
1012
1057
|
info->dirmode = oldmode;
|
|
@@ -1061,10 +1106,10 @@ int git_futils_cp_r(
|
|
|
1061
1106
|
mode_t dirmode)
|
|
1062
1107
|
{
|
|
1063
1108
|
int error;
|
|
1064
|
-
|
|
1109
|
+
git_str path = GIT_STR_INIT;
|
|
1065
1110
|
cp_r_info info;
|
|
1066
1111
|
|
|
1067
|
-
if (
|
|
1112
|
+
if (git_str_joinpath(&path, from, "") < 0) /* ensure trailing slash */
|
|
1068
1113
|
return -1;
|
|
1069
1114
|
|
|
1070
1115
|
memset(&info, 0, sizeof(info));
|
|
@@ -1072,7 +1117,7 @@ int git_futils_cp_r(
|
|
|
1072
1117
|
info.flags = flags;
|
|
1073
1118
|
info.dirmode = dirmode;
|
|
1074
1119
|
info.from_prefix = path.size;
|
|
1075
|
-
|
|
1120
|
+
git_str_init(&info.to, 0);
|
|
1076
1121
|
|
|
1077
1122
|
/* precalculate mkdir flags */
|
|
1078
1123
|
if ((flags & GIT_CPDIR_CREATE_EMPTY_DIRS) == 0) {
|
|
@@ -1090,8 +1135,8 @@ int git_futils_cp_r(
|
|
|
1090
1135
|
|
|
1091
1136
|
error = _cp_r_callback(&info, &path);
|
|
1092
1137
|
|
|
1093
|
-
|
|
1094
|
-
|
|
1138
|
+
git_str_dispose(&path);
|
|
1139
|
+
git_str_dispose(&info.to);
|
|
1095
1140
|
|
|
1096
1141
|
return error;
|
|
1097
1142
|
}
|
|
@@ -1179,7 +1224,7 @@ int git_futils_fsync_parent(const char *path)
|
|
|
1179
1224
|
char *parent;
|
|
1180
1225
|
int error;
|
|
1181
1226
|
|
|
1182
|
-
if ((parent =
|
|
1227
|
+
if ((parent = git_fs_path_dirname(path)) == NULL)
|
|
1183
1228
|
return -1;
|
|
1184
1229
|
|
|
1185
1230
|
error = git_futils_fsync_dir(parent);
|