rugged 1.6.3 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +138 -56
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +100 -6
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +24 -25
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +47 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +113 -96
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +34 -8
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +6 -10
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -238
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -0,0 +1,506 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
3
|
+
*
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
#include <stdio.h>
|
9
|
+
#include <git2.h>
|
10
|
+
|
11
|
+
#include "git2_util.h"
|
12
|
+
#include "process.h"
|
13
|
+
#include "strlist.h"
|
14
|
+
|
15
|
+
#ifndef DWORD_MAX
|
16
|
+
# define DWORD_MAX INT32_MAX
|
17
|
+
#endif
|
18
|
+
|
19
|
+
#define ENV_MAX 32767
|
20
|
+
|
21
|
+
struct git_process {
|
22
|
+
wchar_t *appname;
|
23
|
+
wchar_t *cmdline;
|
24
|
+
wchar_t *env;
|
25
|
+
|
26
|
+
wchar_t *cwd;
|
27
|
+
|
28
|
+
unsigned int capture_in : 1,
|
29
|
+
capture_out : 1,
|
30
|
+
capture_err : 1;
|
31
|
+
|
32
|
+
PROCESS_INFORMATION process_info;
|
33
|
+
|
34
|
+
HANDLE child_in;
|
35
|
+
HANDLE child_out;
|
36
|
+
HANDLE child_err;
|
37
|
+
|
38
|
+
git_process_result_status status;
|
39
|
+
};
|
40
|
+
|
41
|
+
/*
|
42
|
+
* Windows processes have a single command-line that is split by the
|
43
|
+
* invoked application into arguments (instead of an array of
|
44
|
+
* command-line arguments). This command-line is split by space or
|
45
|
+
* tab delimiters, unless that whitespace is within a double quote.
|
46
|
+
* Literal double-quotes themselves can be escaped by a backslash,
|
47
|
+
* but only when not within double quotes. Literal backslashes can
|
48
|
+
* be escaped by a backslash.
|
49
|
+
*
|
50
|
+
* Effectively, this means that instead of thinking about quoting
|
51
|
+
* individual strings, think about double quotes as an escaping
|
52
|
+
* mechanism for whitespace.
|
53
|
+
*
|
54
|
+
* In other words (using ` as a string boundary):
|
55
|
+
* [ `foo`, `bar` ] => `foo bar`
|
56
|
+
* [ `foo bar` ] => `foo" "bar`
|
57
|
+
* [ `foo bar`, `foo bar` ] => `foo" "bar foo" "bar`
|
58
|
+
* [ `foo "bar" foo` ] => `foo" "\"bar\"" "foo`
|
59
|
+
*/
|
60
|
+
int git_process__cmdline(
|
61
|
+
git_str *out,
|
62
|
+
const char **in,
|
63
|
+
size_t in_len)
|
64
|
+
{
|
65
|
+
bool quoted = false;
|
66
|
+
const char *c;
|
67
|
+
size_t i;
|
68
|
+
|
69
|
+
for (i = 0; i < in_len; i++) {
|
70
|
+
/* Arguments are delimited by an unquoted space */
|
71
|
+
if (i)
|
72
|
+
git_str_putc(out, ' ');
|
73
|
+
|
74
|
+
for (c = in[i]; *c; c++) {
|
75
|
+
/* Start or stop quoting spaces within an argument */
|
76
|
+
if ((*c == ' ' || *c == '\t') && !quoted) {
|
77
|
+
git_str_putc(out, '"');
|
78
|
+
quoted = true;
|
79
|
+
} else if (*c != ' ' && *c != '\t' && quoted) {
|
80
|
+
git_str_putc(out, '"');
|
81
|
+
quoted = false;
|
82
|
+
}
|
83
|
+
|
84
|
+
/* Escape double-quotes and backslashes */
|
85
|
+
if (*c == '"' || *c == '\\')
|
86
|
+
git_str_putc(out, '\\');
|
87
|
+
|
88
|
+
git_str_putc(out, *c);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
return git_str_oom(out) ? -1 : 0;
|
93
|
+
}
|
94
|
+
|
95
|
+
GIT_INLINE(bool) is_delete_env(const char *env)
|
96
|
+
{
|
97
|
+
char *c = strchr(env, '=');
|
98
|
+
|
99
|
+
if (c == NULL)
|
100
|
+
return false;
|
101
|
+
|
102
|
+
return *(c+1) == '\0';
|
103
|
+
}
|
104
|
+
|
105
|
+
static int merge_env(wchar_t **out, const char **in, size_t in_len, bool exclude_env)
|
106
|
+
{
|
107
|
+
git_str merged = GIT_STR_INIT;
|
108
|
+
wchar_t *in16 = NULL, *env = NULL, *e;
|
109
|
+
char *e8 = NULL;
|
110
|
+
size_t e_len;
|
111
|
+
int ret = 0;
|
112
|
+
size_t i;
|
113
|
+
|
114
|
+
*out = NULL;
|
115
|
+
|
116
|
+
in16 = git__malloc(ENV_MAX * sizeof(wchar_t));
|
117
|
+
GIT_ERROR_CHECK_ALLOC(in16);
|
118
|
+
|
119
|
+
e8 = git__malloc(ENV_MAX);
|
120
|
+
GIT_ERROR_CHECK_ALLOC(e8);
|
121
|
+
|
122
|
+
for (i = 0; in && i < in_len; i++) {
|
123
|
+
if (is_delete_env(in[i]))
|
124
|
+
continue;
|
125
|
+
|
126
|
+
if ((ret = git_utf8_to_16(in16, ENV_MAX, in[i])) < 0)
|
127
|
+
goto done;
|
128
|
+
|
129
|
+
git_str_put(&merged, (const char *)in16, ret * 2);
|
130
|
+
git_str_put(&merged, "\0\0", 2);
|
131
|
+
}
|
132
|
+
|
133
|
+
if (!exclude_env) {
|
134
|
+
env = GetEnvironmentStringsW();
|
135
|
+
|
136
|
+
for (e = env; *e; e += (e_len + 1)) {
|
137
|
+
e_len = wcslen(e);
|
138
|
+
|
139
|
+
if ((ret = git_utf8_from_16(e8, ENV_MAX, e)) < 0)
|
140
|
+
goto done;
|
141
|
+
|
142
|
+
if (git_strlist_contains_key(in, in_len, e8, '='))
|
143
|
+
continue;
|
144
|
+
|
145
|
+
git_str_put(&merged, (const char *)e, e_len * 2);
|
146
|
+
git_str_put(&merged, "\0\0", 2);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
git_str_put(&merged, "\0\0", 2);
|
151
|
+
|
152
|
+
*out = (wchar_t *)git_str_detach(&merged);
|
153
|
+
|
154
|
+
done:
|
155
|
+
if (env)
|
156
|
+
FreeEnvironmentStringsW(env);
|
157
|
+
|
158
|
+
git_str_dispose(&merged);
|
159
|
+
git__free(e8);
|
160
|
+
git__free(in16);
|
161
|
+
|
162
|
+
return ret < 0 ? -1 : 0;
|
163
|
+
}
|
164
|
+
|
165
|
+
static int process_new(
|
166
|
+
git_process **out,
|
167
|
+
const char *appname,
|
168
|
+
const char *cmdline,
|
169
|
+
const char **env,
|
170
|
+
size_t env_len,
|
171
|
+
git_process_options *opts)
|
172
|
+
{
|
173
|
+
git_process *process;
|
174
|
+
int error = 0;
|
175
|
+
|
176
|
+
*out = NULL;
|
177
|
+
|
178
|
+
process = git__calloc(1, sizeof(git_process));
|
179
|
+
GIT_ERROR_CHECK_ALLOC(process);
|
180
|
+
|
181
|
+
if (appname &&
|
182
|
+
git_utf8_to_16_alloc(&process->appname, appname) < 0) {
|
183
|
+
error = -1;
|
184
|
+
goto done;
|
185
|
+
}
|
186
|
+
|
187
|
+
if (git_utf8_to_16_alloc(&process->cmdline, cmdline) < 0) {
|
188
|
+
error = -1;
|
189
|
+
goto done;
|
190
|
+
}
|
191
|
+
|
192
|
+
if (opts && opts->cwd &&
|
193
|
+
git_utf8_to_16_alloc(&process->cwd, opts->cwd) < 0) {
|
194
|
+
error = -1;
|
195
|
+
goto done;
|
196
|
+
}
|
197
|
+
|
198
|
+
if (env && (error = merge_env(&process->env, env, env_len, opts && opts->exclude_env) < 0))
|
199
|
+
goto done;
|
200
|
+
|
201
|
+
if (opts) {
|
202
|
+
process->capture_in = opts->capture_in;
|
203
|
+
process->capture_out = opts->capture_out;
|
204
|
+
process->capture_err = opts->capture_err;
|
205
|
+
}
|
206
|
+
|
207
|
+
done:
|
208
|
+
if (error)
|
209
|
+
git_process_free(process);
|
210
|
+
else
|
211
|
+
*out = process;
|
212
|
+
|
213
|
+
return error;
|
214
|
+
}
|
215
|
+
|
216
|
+
int git_process_new_from_cmdline(
|
217
|
+
git_process **out,
|
218
|
+
const char *cmdline,
|
219
|
+
const char **env,
|
220
|
+
size_t env_len,
|
221
|
+
git_process_options *opts)
|
222
|
+
{
|
223
|
+
GIT_ASSERT_ARG(out && cmdline);
|
224
|
+
|
225
|
+
return process_new(out, NULL, cmdline, env, env_len, opts);
|
226
|
+
}
|
227
|
+
|
228
|
+
int git_process_new(
|
229
|
+
git_process **out,
|
230
|
+
const char **args,
|
231
|
+
size_t args_len,
|
232
|
+
const char **env,
|
233
|
+
size_t env_len,
|
234
|
+
git_process_options *opts)
|
235
|
+
{
|
236
|
+
git_str cmdline = GIT_STR_INIT;
|
237
|
+
int error;
|
238
|
+
|
239
|
+
GIT_ASSERT_ARG(out && args && args_len > 0);
|
240
|
+
|
241
|
+
if ((error = git_process__cmdline(&cmdline, args, args_len)) < 0)
|
242
|
+
goto done;
|
243
|
+
|
244
|
+
error = process_new(out, args[0], cmdline.ptr, env, env_len, opts);
|
245
|
+
|
246
|
+
done:
|
247
|
+
git_str_dispose(&cmdline);
|
248
|
+
return error;
|
249
|
+
}
|
250
|
+
|
251
|
+
#define CLOSE_HANDLE(h) do { if ((h) != NULL) CloseHandle(h); } while(0)
|
252
|
+
|
253
|
+
int git_process_start(git_process *process)
|
254
|
+
{
|
255
|
+
STARTUPINFOW startup_info;
|
256
|
+
SECURITY_ATTRIBUTES security_attrs;
|
257
|
+
DWORD flags = CREATE_UNICODE_ENVIRONMENT;
|
258
|
+
HANDLE in[2] = { NULL, NULL },
|
259
|
+
out[2] = { NULL, NULL },
|
260
|
+
err[2] = { NULL, NULL };
|
261
|
+
|
262
|
+
memset(&security_attrs, 0, sizeof(SECURITY_ATTRIBUTES));
|
263
|
+
security_attrs.bInheritHandle = TRUE;
|
264
|
+
|
265
|
+
memset(&startup_info, 0, sizeof(STARTUPINFOW));
|
266
|
+
startup_info.cb = sizeof(STARTUPINFOW);
|
267
|
+
startup_info.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
|
268
|
+
startup_info.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
269
|
+
startup_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
270
|
+
|
271
|
+
if (process->capture_in) {
|
272
|
+
if (!CreatePipe(&in[0], &in[1], &security_attrs, 0) ||
|
273
|
+
!SetHandleInformation(in[1], HANDLE_FLAG_INHERIT, 0)) {
|
274
|
+
git_error_set(GIT_ERROR_OS, "could not create pipe");
|
275
|
+
goto on_error;
|
276
|
+
}
|
277
|
+
|
278
|
+
startup_info.hStdInput = in[0];
|
279
|
+
startup_info.dwFlags |= STARTF_USESTDHANDLES;
|
280
|
+
}
|
281
|
+
|
282
|
+
if (process->capture_out) {
|
283
|
+
if (!CreatePipe(&out[0], &out[1], &security_attrs, 0) ||
|
284
|
+
!SetHandleInformation(out[0], HANDLE_FLAG_INHERIT, 0)) {
|
285
|
+
git_error_set(GIT_ERROR_OS, "could not create pipe");
|
286
|
+
goto on_error;
|
287
|
+
}
|
288
|
+
|
289
|
+
startup_info.hStdOutput = out[1];
|
290
|
+
startup_info.dwFlags |= STARTF_USESTDHANDLES;
|
291
|
+
}
|
292
|
+
|
293
|
+
if (process->capture_err) {
|
294
|
+
if (!CreatePipe(&err[0], &err[1], &security_attrs, 0) ||
|
295
|
+
!SetHandleInformation(err[0], HANDLE_FLAG_INHERIT, 0)) {
|
296
|
+
git_error_set(GIT_ERROR_OS, "could not create pipe");
|
297
|
+
goto on_error;
|
298
|
+
}
|
299
|
+
|
300
|
+
startup_info.hStdError = err[1];
|
301
|
+
startup_info.dwFlags |= STARTF_USESTDHANDLES;
|
302
|
+
}
|
303
|
+
|
304
|
+
memset(&process->process_info, 0, sizeof(PROCESS_INFORMATION));
|
305
|
+
|
306
|
+
if (!CreateProcessW(process->appname, process->cmdline,
|
307
|
+
NULL, NULL, TRUE, flags, process->env,
|
308
|
+
process->cwd,
|
309
|
+
&startup_info,
|
310
|
+
&process->process_info)) {
|
311
|
+
git_error_set(GIT_ERROR_OS, "could not create process");
|
312
|
+
goto on_error;
|
313
|
+
}
|
314
|
+
|
315
|
+
CLOSE_HANDLE(in[0]); process->child_in = in[1];
|
316
|
+
CLOSE_HANDLE(out[1]); process->child_out = out[0];
|
317
|
+
CLOSE_HANDLE(err[1]); process->child_err = err[0];
|
318
|
+
|
319
|
+
return 0;
|
320
|
+
|
321
|
+
on_error:
|
322
|
+
CLOSE_HANDLE(in[0]); CLOSE_HANDLE(in[1]);
|
323
|
+
CLOSE_HANDLE(out[0]); CLOSE_HANDLE(out[1]);
|
324
|
+
CLOSE_HANDLE(err[0]); CLOSE_HANDLE(err[1]);
|
325
|
+
return -1;
|
326
|
+
}
|
327
|
+
|
328
|
+
int git_process_id(p_pid_t *out, git_process *process)
|
329
|
+
{
|
330
|
+
GIT_ASSERT(out && process);
|
331
|
+
|
332
|
+
if (!process->process_info.dwProcessId) {
|
333
|
+
git_error_set(GIT_ERROR_INVALID, "process not running");
|
334
|
+
return -1;
|
335
|
+
}
|
336
|
+
|
337
|
+
*out = process->process_info.dwProcessId;
|
338
|
+
return 0;
|
339
|
+
}
|
340
|
+
|
341
|
+
ssize_t git_process_read(git_process *process, void *buf, size_t count)
|
342
|
+
{
|
343
|
+
DWORD ret;
|
344
|
+
|
345
|
+
if (count > DWORD_MAX)
|
346
|
+
count = DWORD_MAX;
|
347
|
+
if (count > SSIZE_MAX)
|
348
|
+
count = SSIZE_MAX;
|
349
|
+
|
350
|
+
if (!ReadFile(process->child_out, buf, (DWORD)count, &ret, NULL)) {
|
351
|
+
if (GetLastError() == ERROR_BROKEN_PIPE)
|
352
|
+
return 0;
|
353
|
+
|
354
|
+
git_error_set(GIT_ERROR_OS, "could not read");
|
355
|
+
return -1;
|
356
|
+
}
|
357
|
+
|
358
|
+
return ret;
|
359
|
+
}
|
360
|
+
|
361
|
+
ssize_t git_process_write(git_process *process, const void *buf, size_t count)
|
362
|
+
{
|
363
|
+
DWORD ret;
|
364
|
+
|
365
|
+
if (count > DWORD_MAX)
|
366
|
+
count = DWORD_MAX;
|
367
|
+
if (count > SSIZE_MAX)
|
368
|
+
count = SSIZE_MAX;
|
369
|
+
|
370
|
+
if (!WriteFile(process->child_in, buf, (DWORD)count, &ret, NULL)) {
|
371
|
+
git_error_set(GIT_ERROR_OS, "could not write");
|
372
|
+
return -1;
|
373
|
+
}
|
374
|
+
|
375
|
+
return ret;
|
376
|
+
}
|
377
|
+
|
378
|
+
int git_process_close_in(git_process *process)
|
379
|
+
{
|
380
|
+
if (!process->capture_in) {
|
381
|
+
git_error_set(GIT_ERROR_INVALID, "input is not open");
|
382
|
+
return -1;
|
383
|
+
}
|
384
|
+
|
385
|
+
if (process->child_in) {
|
386
|
+
CloseHandle(process->child_in);
|
387
|
+
process->child_in = NULL;
|
388
|
+
}
|
389
|
+
|
390
|
+
return 0;
|
391
|
+
}
|
392
|
+
|
393
|
+
int git_process_close_out(git_process *process)
|
394
|
+
{
|
395
|
+
if (!process->capture_out) {
|
396
|
+
git_error_set(GIT_ERROR_INVALID, "output is not open");
|
397
|
+
return -1;
|
398
|
+
}
|
399
|
+
|
400
|
+
if (process->child_out) {
|
401
|
+
CloseHandle(process->child_out);
|
402
|
+
process->child_out = NULL;
|
403
|
+
}
|
404
|
+
|
405
|
+
return 0;
|
406
|
+
}
|
407
|
+
|
408
|
+
int git_process_close_err(git_process *process)
|
409
|
+
{
|
410
|
+
if (!process->capture_err) {
|
411
|
+
git_error_set(GIT_ERROR_INVALID, "error is not open");
|
412
|
+
return -1;
|
413
|
+
}
|
414
|
+
|
415
|
+
if (process->child_err) {
|
416
|
+
CloseHandle(process->child_err);
|
417
|
+
process->child_err = NULL;
|
418
|
+
}
|
419
|
+
|
420
|
+
return 0;
|
421
|
+
}
|
422
|
+
|
423
|
+
int git_process_close(git_process *process)
|
424
|
+
{
|
425
|
+
if (process->child_in) {
|
426
|
+
CloseHandle(process->child_in);
|
427
|
+
process->child_in = NULL;
|
428
|
+
}
|
429
|
+
|
430
|
+
if (process->child_out) {
|
431
|
+
CloseHandle(process->child_out);
|
432
|
+
process->child_out = NULL;
|
433
|
+
}
|
434
|
+
|
435
|
+
if (process->child_err) {
|
436
|
+
CloseHandle(process->child_err);
|
437
|
+
process->child_err = NULL;
|
438
|
+
}
|
439
|
+
|
440
|
+
CloseHandle(process->process_info.hProcess);
|
441
|
+
process->process_info.hProcess = NULL;
|
442
|
+
|
443
|
+
CloseHandle(process->process_info.hThread);
|
444
|
+
process->process_info.hThread = NULL;
|
445
|
+
|
446
|
+
return 0;
|
447
|
+
}
|
448
|
+
|
449
|
+
int git_process_wait(git_process_result *result, git_process *process)
|
450
|
+
{
|
451
|
+
DWORD exitcode;
|
452
|
+
|
453
|
+
if (result)
|
454
|
+
memset(result, 0, sizeof(git_process_result));
|
455
|
+
|
456
|
+
if (!process->process_info.dwProcessId) {
|
457
|
+
git_error_set(GIT_ERROR_INVALID, "process is stopped");
|
458
|
+
return -1;
|
459
|
+
}
|
460
|
+
|
461
|
+
if (WaitForSingleObject(process->process_info.hProcess, INFINITE) == WAIT_FAILED) {
|
462
|
+
git_error_set(GIT_ERROR_OS, "could not wait for process");
|
463
|
+
return -1;
|
464
|
+
}
|
465
|
+
|
466
|
+
if (!GetExitCodeProcess(process->process_info.hProcess, &exitcode)) {
|
467
|
+
git_error_set(GIT_ERROR_OS, "could not get process exit code");
|
468
|
+
return -1;
|
469
|
+
}
|
470
|
+
|
471
|
+
result->status = GIT_PROCESS_STATUS_NORMAL;
|
472
|
+
result->exitcode = exitcode;
|
473
|
+
|
474
|
+
memset(&process->process_info, 0, sizeof(PROCESS_INFORMATION));
|
475
|
+
return 0;
|
476
|
+
}
|
477
|
+
|
478
|
+
int git_process_result_msg(git_str *out, git_process_result *result)
|
479
|
+
{
|
480
|
+
if (result->status == GIT_PROCESS_STATUS_NONE) {
|
481
|
+
return git_str_puts(out, "process not started");
|
482
|
+
} else if (result->status == GIT_PROCESS_STATUS_NORMAL) {
|
483
|
+
return git_str_printf(out, "process exited with code %d",
|
484
|
+
result->exitcode);
|
485
|
+
} else if (result->signal) {
|
486
|
+
return git_str_printf(out, "process exited on signal %d",
|
487
|
+
result->signal);
|
488
|
+
}
|
489
|
+
|
490
|
+
return git_str_puts(out, "unknown error");
|
491
|
+
}
|
492
|
+
|
493
|
+
void git_process_free(git_process *process)
|
494
|
+
{
|
495
|
+
if (!process)
|
496
|
+
return;
|
497
|
+
|
498
|
+
if (process->process_info.hProcess)
|
499
|
+
git_process_close(process);
|
500
|
+
|
501
|
+
git__free(process->env);
|
502
|
+
git__free(process->cwd);
|
503
|
+
git__free(process->cmdline);
|
504
|
+
git__free(process->appname);
|
505
|
+
git__free(process);
|
506
|
+
}
|
@@ -15,108 +15,114 @@ GIT_INLINE(void) git__set_errno(void)
|
|
15
15
|
errno = EINVAL;
|
16
16
|
}
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
int git_utf8_to_16(wchar_t *dest, size_t dest_size, const char *src)
|
19
|
+
{
|
20
|
+
/* Length of -1 indicates NULL termination of the input string. */
|
21
|
+
return git_utf8_to_16_with_len(dest, dest_size, src, -1);
|
22
|
+
}
|
23
|
+
|
24
|
+
int git_utf8_to_16_with_len(
|
25
|
+
wchar_t *dest,
|
26
|
+
size_t _dest_size,
|
27
|
+
const char *src,
|
28
|
+
int src_len)
|
27
29
|
{
|
30
|
+
int dest_size = (int)min(_dest_size, INT_MAX);
|
28
31
|
int len;
|
29
32
|
|
30
|
-
/*
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
/*
|
34
|
+
* Subtract 1 from the result to turn 0 into -1 (an error code) and
|
35
|
+
* to not count the NULL terminator as part of the string's length.
|
36
|
+
* MultiByteToWideChar never returns int's minvalue, so underflow
|
37
|
+
* is not possible.
|
38
|
+
*/
|
39
|
+
len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
|
40
|
+
src, src_len, dest, dest_size) - 1;
|
41
|
+
|
42
|
+
if (len < 0)
|
34
43
|
git__set_errno();
|
35
44
|
|
36
45
|
return len;
|
37
46
|
}
|
38
47
|
|
39
|
-
|
40
|
-
* Converts a wide string to UTF-8.
|
41
|
-
*
|
42
|
-
* @param dest The buffer to receive the UTF-8 string.
|
43
|
-
* @param dest_size The size of the buffer, in bytes.
|
44
|
-
* @param src The wide string to convert.
|
45
|
-
* @return The length of the UTF-8 string, in bytes (not counting the NULL terminator), or < 0 for failure
|
46
|
-
*/
|
47
|
-
int git__utf16_to_8(char *dest, size_t dest_size, const wchar_t *src)
|
48
|
+
int git_utf8_from_16(char *dest, size_t dest_size, const wchar_t *src)
|
48
49
|
{
|
50
|
+
/* Length of -1 indicates NULL termination of the input string. */
|
51
|
+
return git_utf8_from_16_with_len(dest, dest_size, src, -1);
|
52
|
+
}
|
53
|
+
|
54
|
+
int git_utf8_from_16_with_len(
|
55
|
+
char *dest,
|
56
|
+
size_t _dest_size,
|
57
|
+
const wchar_t *src,
|
58
|
+
int src_len)
|
59
|
+
{
|
60
|
+
int dest_size = (int)min(_dest_size, INT_MAX);
|
49
61
|
int len;
|
50
62
|
|
51
|
-
/*
|
52
|
-
* turn 0 into -1 (an error code) and
|
53
|
-
*
|
54
|
-
|
63
|
+
/*
|
64
|
+
* Subtract 1 from the result to turn 0 into -1 (an error code) and
|
65
|
+
* to not count the NULL terminator as part of the string's length.
|
66
|
+
* WideCharToMultiByte never returns int's minvalue, so underflow
|
67
|
+
* is not possible.
|
68
|
+
*/
|
69
|
+
len = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS,
|
70
|
+
src, src_len, dest, dest_size, NULL, NULL) - 1;
|
71
|
+
|
72
|
+
if (len < 0)
|
55
73
|
git__set_errno();
|
56
74
|
|
57
75
|
return len;
|
58
76
|
}
|
59
77
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
* @return The length of the wide string, in characters (not counting the NULL terminator), or < 0 for failure
|
68
|
-
*/
|
69
|
-
int git__utf8_to_16_alloc(wchar_t **dest, const char *src)
|
78
|
+
int git_utf8_to_16_alloc(wchar_t **dest, const char *src)
|
79
|
+
{
|
80
|
+
/* Length of -1 indicates NULL termination of the input string. */
|
81
|
+
return git_utf8_to_16_alloc_with_len(dest, src, -1);
|
82
|
+
}
|
83
|
+
|
84
|
+
int git_utf8_to_16_alloc_with_len(wchar_t **dest, const char *src, int src_len)
|
70
85
|
{
|
71
86
|
int utf16_size;
|
72
87
|
|
73
88
|
*dest = NULL;
|
74
89
|
|
75
|
-
|
76
|
-
|
90
|
+
utf16_size = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
|
91
|
+
src, src_len, NULL, 0);
|
77
92
|
|
78
93
|
if (!utf16_size) {
|
79
94
|
git__set_errno();
|
80
95
|
return -1;
|
81
96
|
}
|
82
97
|
|
83
|
-
|
84
|
-
|
85
|
-
return -1;
|
86
|
-
}
|
98
|
+
*dest = git__mallocarray(utf16_size, sizeof(wchar_t));
|
99
|
+
GIT_ERROR_CHECK_ALLOC(*dest);
|
87
100
|
|
88
|
-
utf16_size =
|
89
|
-
|
90
|
-
if (!utf16_size) {
|
91
|
-
git__set_errno();
|
101
|
+
utf16_size = git_utf8_to_16_with_len(*dest, (size_t)utf16_size,
|
102
|
+
src, src_len);
|
92
103
|
|
104
|
+
if (utf16_size < 0) {
|
93
105
|
git__free(*dest);
|
94
106
|
*dest = NULL;
|
95
107
|
}
|
96
108
|
|
97
|
-
|
98
|
-
* terminator as part of the string's length. MultiByteToWideChar never returns int's minvalue,
|
99
|
-
* so underflow is not possible */
|
100
|
-
return utf16_size - 1;
|
109
|
+
return utf16_size;
|
101
110
|
}
|
102
111
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
* @return The length of the UTF-8 string, in bytes (not counting the NULL terminator), or < 0 for failure
|
111
|
-
*/
|
112
|
-
int git__utf16_to_8_alloc(char **dest, const wchar_t *src)
|
112
|
+
int git_utf8_from_16_alloc(char **dest, const wchar_t *src)
|
113
|
+
{
|
114
|
+
/* Length of -1 indicates NULL termination of the input string. */
|
115
|
+
return git_utf8_from_16_alloc_with_len(dest, src, -1);
|
116
|
+
}
|
117
|
+
|
118
|
+
int git_utf8_from_16_alloc_with_len(char **dest, const wchar_t *src, int src_len)
|
113
119
|
{
|
114
120
|
int utf8_size;
|
115
121
|
|
116
122
|
*dest = NULL;
|
117
123
|
|
118
|
-
|
119
|
-
|
124
|
+
utf8_size = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS,
|
125
|
+
src, src_len, NULL, 0, NULL, NULL);
|
120
126
|
|
121
127
|
if (!utf8_size) {
|
122
128
|
git__set_errno();
|
@@ -124,23 +130,15 @@ int git__utf16_to_8_alloc(char **dest, const wchar_t *src)
|
|
124
130
|
}
|
125
131
|
|
126
132
|
*dest = git__malloc(utf8_size);
|
133
|
+
GIT_ERROR_CHECK_ALLOC(*dest);
|
127
134
|
|
128
|
-
|
129
|
-
|
130
|
-
return -1;
|
131
|
-
}
|
132
|
-
|
133
|
-
utf8_size = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, src, -1, *dest, utf8_size, NULL, NULL);
|
134
|
-
|
135
|
-
if (!utf8_size) {
|
136
|
-
git__set_errno();
|
135
|
+
utf8_size = WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS,
|
136
|
+
src, src_len, *dest, utf8_size, NULL, NULL);
|
137
137
|
|
138
|
+
if (utf8_size < 0) {
|
138
139
|
git__free(*dest);
|
139
140
|
*dest = NULL;
|
140
141
|
}
|
141
142
|
|
142
|
-
|
143
|
-
* terminator as part of the string's length. MultiByteToWideChar never returns int's minvalue,
|
144
|
-
* so underflow is not possible */
|
145
|
-
return utf8_size - 1;
|
143
|
+
return utf8_size;
|
146
144
|
}
|