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,168 @@
|
|
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 <git2.h>
|
9
|
+
#include <git2/sys/config.h>
|
10
|
+
|
11
|
+
#include "git2_util.h"
|
12
|
+
#include "vector.h"
|
13
|
+
#include "fs_path.h"
|
14
|
+
|
15
|
+
#include "common.h"
|
16
|
+
#include "error.h"
|
17
|
+
|
18
|
+
static int parse_option(cli_opt *opt, void *data)
|
19
|
+
{
|
20
|
+
git_str kv = GIT_STR_INIT, env = GIT_STR_INIT;
|
21
|
+
git_vector *cmdline_config = data;
|
22
|
+
int error = 0;
|
23
|
+
|
24
|
+
if (opt->spec && opt->spec->alias == 'c') {
|
25
|
+
if (git_str_puts(&kv, opt->value) < 0) {
|
26
|
+
error = cli_error_git();
|
27
|
+
goto done;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
else if (opt->spec && !strcmp(opt->spec->name, "config-env")) {
|
32
|
+
char *val = strchr(opt->value, '=');
|
33
|
+
|
34
|
+
if (val == NULL || *(val + 1) == '\0') {
|
35
|
+
error = cli_error("invalid config format: '%s'", opt->value);
|
36
|
+
goto done;
|
37
|
+
}
|
38
|
+
|
39
|
+
if (git_str_put(&kv, opt->value, (val - opt->value)) < 0) {
|
40
|
+
error = cli_error_git();
|
41
|
+
goto done;
|
42
|
+
}
|
43
|
+
|
44
|
+
val++;
|
45
|
+
|
46
|
+
if ((error = git__getenv(&env, val)) == GIT_ENOTFOUND) {
|
47
|
+
error = cli_error("missing environment variable '%s' for configuration '%s'", val, kv.ptr);
|
48
|
+
goto done;
|
49
|
+
} else if (error) {
|
50
|
+
error = cli_error_git();
|
51
|
+
goto done;
|
52
|
+
}
|
53
|
+
|
54
|
+
if (git_str_putc(&kv, '=') < 0 ||
|
55
|
+
git_str_puts(&kv, env.ptr) < 0) {
|
56
|
+
error = cli_error_git();
|
57
|
+
goto done;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
if (kv.size > 0 &&
|
62
|
+
git_vector_insert(cmdline_config, git_str_detach(&kv)) < 0)
|
63
|
+
error = cli_error_git();
|
64
|
+
|
65
|
+
done:
|
66
|
+
git_str_dispose(&env);
|
67
|
+
git_str_dispose(&kv);
|
68
|
+
return error;
|
69
|
+
}
|
70
|
+
|
71
|
+
static int parse_common_options(
|
72
|
+
git_repository *repo,
|
73
|
+
cli_repository_open_options *opts)
|
74
|
+
{
|
75
|
+
cli_opt_spec common_opts[] = {
|
76
|
+
{ CLI_COMMON_OPT_CONFIG },
|
77
|
+
{ CLI_COMMON_OPT_CONFIG_ENV },
|
78
|
+
{ 0 }
|
79
|
+
};
|
80
|
+
git_config_backend_memory_options config_opts =
|
81
|
+
GIT_CONFIG_BACKEND_MEMORY_OPTIONS_INIT;
|
82
|
+
git_vector cmdline = GIT_VECTOR_INIT;
|
83
|
+
git_config *config = NULL;
|
84
|
+
git_config_backend *backend = NULL;
|
85
|
+
int error = 0;
|
86
|
+
|
87
|
+
config_opts.backend_type = "command line";
|
88
|
+
|
89
|
+
if ((error = cli_opt_foreach(common_opts, opts->args,
|
90
|
+
opts->args_len, CLI_OPT_PARSE_GNU, parse_option,
|
91
|
+
&cmdline)) < 0)
|
92
|
+
goto done;
|
93
|
+
|
94
|
+
if (git_vector_length(&cmdline) == 0)
|
95
|
+
goto done;
|
96
|
+
|
97
|
+
if (git_repository_config(&config, repo) < 0 ||
|
98
|
+
git_config_backend_from_values(&backend,
|
99
|
+
(const char **)cmdline.contents, cmdline.length,
|
100
|
+
&config_opts) < 0 ||
|
101
|
+
git_config_add_backend(config, backend, GIT_CONFIG_LEVEL_APP,
|
102
|
+
repo, 0) < 0)
|
103
|
+
error = cli_error_git();
|
104
|
+
|
105
|
+
done:
|
106
|
+
if (error && backend)
|
107
|
+
backend->free(backend);
|
108
|
+
git_config_free(config);
|
109
|
+
git_vector_dispose_deep(&cmdline);
|
110
|
+
return error;
|
111
|
+
}
|
112
|
+
|
113
|
+
int cli_repository_open(
|
114
|
+
git_repository **out,
|
115
|
+
cli_repository_open_options *opts)
|
116
|
+
{
|
117
|
+
git_repository *repo;
|
118
|
+
|
119
|
+
if (git_repository_open_ext(&repo, ".", GIT_REPOSITORY_OPEN_FROM_ENV, NULL) < 0)
|
120
|
+
return -1;
|
121
|
+
|
122
|
+
if (opts && parse_common_options(repo, opts) < 0)
|
123
|
+
return -1;
|
124
|
+
|
125
|
+
*out = repo;
|
126
|
+
return 0;
|
127
|
+
}
|
128
|
+
|
129
|
+
/*
|
130
|
+
* This resolves paths - not _pathspecs_ like git - it accepts an absolute
|
131
|
+
* path (to a path within the repository working directory) or a path
|
132
|
+
* relative to the current directory.
|
133
|
+
*/
|
134
|
+
int cli_resolve_path(git_str *out, git_repository *repo, const char *given_path)
|
135
|
+
{
|
136
|
+
git_str path = GIT_STR_INIT;
|
137
|
+
int error = 0;
|
138
|
+
|
139
|
+
if (!git_fs_path_is_absolute(given_path)) {
|
140
|
+
char cwd[GIT_PATH_MAX];
|
141
|
+
|
142
|
+
if (p_getcwd(cwd, GIT_PATH_MAX) < 0)
|
143
|
+
error = cli_error_os();
|
144
|
+
else if (git_str_puts(&path, cwd) < 0 ||
|
145
|
+
git_fs_path_apply_relative(&path, given_path) < 0)
|
146
|
+
error = cli_error_git();
|
147
|
+
|
148
|
+
if (error)
|
149
|
+
goto done;
|
150
|
+
} else if (git_str_puts(&path, given_path) < 0) {
|
151
|
+
error = cli_error_git();
|
152
|
+
goto done;
|
153
|
+
}
|
154
|
+
|
155
|
+
error = git_fs_path_make_relative(&path, git_repository_workdir(repo));
|
156
|
+
|
157
|
+
if (error == GIT_ENOTFOUND)
|
158
|
+
error = cli_error("path '%s' is not inside the git repository '%s'",
|
159
|
+
given_path, git_repository_workdir(repo));
|
160
|
+
else if (error < 0)
|
161
|
+
error = cli_error_git();
|
162
|
+
else
|
163
|
+
git_str_swap(out, &path);
|
164
|
+
|
165
|
+
done:
|
166
|
+
git_str_dispose(&path);
|
167
|
+
return error;
|
168
|
+
}
|
@@ -0,0 +1,63 @@
|
|
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
|
+
#ifndef CLI_common_h__
|
9
|
+
#define CLI_common_h__
|
10
|
+
|
11
|
+
#define PROGRAM_NAME "git2"
|
12
|
+
|
13
|
+
#include "git2_util.h"
|
14
|
+
|
15
|
+
#include "error.h"
|
16
|
+
#include "opt.h"
|
17
|
+
#include "opt_usage.h"
|
18
|
+
|
19
|
+
/*
|
20
|
+
* Common command arguments.
|
21
|
+
*/
|
22
|
+
|
23
|
+
extern int cli_opt__show_help;
|
24
|
+
extern int cli_opt__use_pager;
|
25
|
+
|
26
|
+
#define CLI_COMMON_OPT_HELP \
|
27
|
+
CLI_OPT_TYPE_SWITCH, "help", 0, &cli_opt__show_help, 1, \
|
28
|
+
CLI_OPT_USAGE_HIDDEN | CLI_OPT_USAGE_STOP_PARSING, \
|
29
|
+
NULL, "display help information"
|
30
|
+
#define CLI_COMMON_OPT_CONFIG \
|
31
|
+
CLI_OPT_TYPE_VALUE, NULL, 'c', NULL, 0, \
|
32
|
+
CLI_OPT_USAGE_HIDDEN, \
|
33
|
+
"key=value", "add configuration value"
|
34
|
+
#define CLI_COMMON_OPT_CONFIG_ENV \
|
35
|
+
CLI_OPT_TYPE_VALUE, "config-env", 0, NULL, 0, \
|
36
|
+
CLI_OPT_USAGE_HIDDEN, \
|
37
|
+
"key=value", "set configuration value to environment variable"
|
38
|
+
#define CLI_COMMON_OPT_NO_PAGER \
|
39
|
+
CLI_OPT_TYPE_SWITCH, "no-pager", 0, &cli_opt__use_pager, 0, \
|
40
|
+
CLI_OPT_USAGE_HIDDEN, \
|
41
|
+
NULL, "don't paginate multi-page output"
|
42
|
+
|
43
|
+
#define CLI_COMMON_OPT \
|
44
|
+
{ CLI_COMMON_OPT_HELP }, \
|
45
|
+
{ CLI_COMMON_OPT_CONFIG }, \
|
46
|
+
{ CLI_COMMON_OPT_CONFIG_ENV }, \
|
47
|
+
{ CLI_COMMON_OPT_NO_PAGER }
|
48
|
+
|
49
|
+
typedef struct {
|
50
|
+
char **args;
|
51
|
+
int args_len;
|
52
|
+
} cli_repository_open_options;
|
53
|
+
|
54
|
+
extern int cli_repository_open(
|
55
|
+
git_repository **out,
|
56
|
+
cli_repository_open_options *opts);
|
57
|
+
|
58
|
+
extern int cli_resolve_path(
|
59
|
+
git_str *out,
|
60
|
+
git_repository *repo,
|
61
|
+
const char *given_path);
|
62
|
+
|
63
|
+
#endif /* CLI_common_h__ */
|
@@ -7,17 +7,19 @@
|
|
7
7
|
|
8
8
|
#include <stdio.h>
|
9
9
|
#include <git2.h>
|
10
|
-
#include "
|
10
|
+
#include "common.h"
|
11
11
|
#include "cmd.h"
|
12
12
|
|
13
|
-
|
13
|
+
int cli_opt__show_help = 0;
|
14
|
+
int cli_opt__use_pager = 1;
|
15
|
+
|
14
16
|
static int show_version = 0;
|
15
17
|
static char *command = NULL;
|
16
18
|
static char **args = NULL;
|
17
19
|
|
18
20
|
const cli_opt_spec cli_common_opts[] = {
|
19
|
-
|
20
|
-
|
21
|
+
CLI_COMMON_OPT,
|
22
|
+
|
21
23
|
{ CLI_OPT_TYPE_SWITCH, "version", 0, &show_version, 1,
|
22
24
|
CLI_OPT_USAGE_DEFAULT, NULL, "display the version" },
|
23
25
|
{ CLI_OPT_TYPE_ARG, "command", 0, &command, 0,
|
@@ -28,21 +30,57 @@ const cli_opt_spec cli_common_opts[] = {
|
|
28
30
|
};
|
29
31
|
|
30
32
|
const cli_cmd_spec cli_cmds[] = {
|
33
|
+
{ "blame", cmd_blame, "Show the origin of each line of a file" },
|
31
34
|
{ "cat-file", cmd_cat_file, "Display an object in the repository" },
|
32
35
|
{ "clone", cmd_clone, "Clone a repository into a new directory" },
|
36
|
+
{ "config", cmd_config, "View or set configuration values " },
|
33
37
|
{ "hash-object", cmd_hash_object, "Hash a raw object and product its object ID" },
|
34
38
|
{ "help", cmd_help, "Display help information" },
|
39
|
+
{ "index-pack", cmd_index_pack, "Create an index for a packfile" },
|
40
|
+
{ "init", cmd_init, "Create a new git repository" },
|
35
41
|
{ NULL }
|
36
42
|
};
|
37
43
|
|
44
|
+
/*
|
45
|
+
* Reorder the argv as it was given, since git has the notion of global
|
46
|
+
* options (like `--help` or `-c key=val`) that we want to pass to the
|
47
|
+
* subcommand, and that can appear early in the arguments, before the
|
48
|
+
* command name. Put the command-name in argv[1] to allow easier parsing.
|
49
|
+
*/
|
50
|
+
static void reorder_args(char **argv, size_t first)
|
51
|
+
{
|
52
|
+
char *tmp;
|
53
|
+
size_t i;
|
54
|
+
|
55
|
+
if (first == 1)
|
56
|
+
return;
|
57
|
+
|
58
|
+
tmp = argv[first];
|
59
|
+
|
60
|
+
for (i = first; i > 1; i--)
|
61
|
+
argv[i] = argv[i - 1];
|
62
|
+
|
63
|
+
argv[1] = tmp;
|
64
|
+
}
|
65
|
+
|
66
|
+
/*
|
67
|
+
* When invoked without a command, or just with `--help`, we invoke
|
68
|
+
* the help command; but we want to preserve only arguments that would
|
69
|
+
* be useful for that.
|
70
|
+
*/
|
71
|
+
static void help_args(int *argc, char **argv)
|
72
|
+
{
|
73
|
+
cli_opt__show_help = 0;
|
74
|
+
|
75
|
+
argv[0] = "help";
|
76
|
+
*argc = 1;
|
77
|
+
}
|
78
|
+
|
38
79
|
int main(int argc, char **argv)
|
39
80
|
{
|
40
81
|
const cli_cmd_spec *cmd;
|
41
82
|
cli_opt_parser optparser;
|
42
83
|
cli_opt opt;
|
43
|
-
char *help_args[3] = { NULL };
|
44
|
-
int help_args_len;
|
45
|
-
int args_len = 0;
|
46
84
|
int ret = 0;
|
47
85
|
|
48
86
|
if (git_libgit2_init() < 0) {
|
@@ -56,7 +94,7 @@ int main(int argc, char **argv)
|
|
56
94
|
while (cli_opt_parser_next(&opt, &optparser)) {
|
57
95
|
if (!opt.spec) {
|
58
96
|
cli_opt_status_fprint(stderr, PROGRAM_NAME, &opt);
|
59
|
-
cli_opt_usage_fprint(stderr, PROGRAM_NAME, NULL, cli_common_opts);
|
97
|
+
cli_opt_usage_fprint(stderr, PROGRAM_NAME, NULL, cli_common_opts, CLI_OPT_USAGE_SHOW_HIDDEN);
|
60
98
|
ret = CLI_EXIT_USAGE;
|
61
99
|
goto done;
|
62
100
|
}
|
@@ -66,8 +104,7 @@ int main(int argc, char **argv)
|
|
66
104
|
* remaining arguments as args for the command itself.
|
67
105
|
*/
|
68
106
|
if (command) {
|
69
|
-
|
70
|
-
args_len = (int)(argc - optparser.idx);
|
107
|
+
reorder_args(argv, optparser.idx);
|
71
108
|
break;
|
72
109
|
}
|
73
110
|
}
|
@@ -77,19 +114,10 @@ int main(int argc, char **argv)
|
|
77
114
|
goto done;
|
78
115
|
}
|
79
116
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
*/
|
85
|
-
if (!command || show_help) {
|
86
|
-
help_args[0] = command ? (char *)command : "help";
|
87
|
-
help_args[1] = command ? "--help" : NULL;
|
88
|
-
help_args_len = command ? 2 : 1;
|
89
|
-
|
90
|
-
command = help_args[0];
|
91
|
-
args = help_args;
|
92
|
-
args_len = help_args_len;
|
117
|
+
if (!command) {
|
118
|
+
help_args(&argc, argv);
|
119
|
+
ret = cmd_help(argc, argv);
|
120
|
+
goto done;
|
93
121
|
}
|
94
122
|
|
95
123
|
if ((cmd = cli_cmd_spec_byname(command)) == NULL) {
|
@@ -98,7 +126,7 @@ int main(int argc, char **argv)
|
|
98
126
|
goto done;
|
99
127
|
}
|
100
128
|
|
101
|
-
ret = cmd->fn(
|
129
|
+
ret = cmd->fn(argc - 1, &argv[1]);
|
102
130
|
|
103
131
|
done:
|
104
132
|
git_libgit2_shutdown();
|
@@ -10,7 +10,7 @@
|
|
10
10
|
* This file was produced by using the `rename.pl` script included with
|
11
11
|
* adopt. The command-line specified was:
|
12
12
|
*
|
13
|
-
* ./rename.pl cli_opt --filename=opt --include=
|
13
|
+
* ./rename.pl cli_opt --filename=opt --include=common.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
|
14
14
|
*/
|
15
15
|
|
16
16
|
#include <stdlib.h>
|
@@ -19,7 +19,11 @@
|
|
19
19
|
#include <limits.h>
|
20
20
|
#include <assert.h>
|
21
21
|
|
22
|
-
#
|
22
|
+
#if defined(__sun) || defined(__illumos__)
|
23
|
+
# include <alloca.h>
|
24
|
+
#endif
|
25
|
+
|
26
|
+
#include "common.h"
|
23
27
|
#include "opt.h"
|
24
28
|
|
25
29
|
#ifdef _WIN32
|
@@ -73,7 +77,7 @@ GIT_INLINE(const cli_opt_spec *) spec_for_long(
|
|
73
77
|
|
74
78
|
/* Handle --option=value arguments */
|
75
79
|
if (spec->type == CLI_OPT_TYPE_VALUE &&
|
76
|
-
eql &&
|
80
|
+
spec->name && eql &&
|
77
81
|
strncmp(arg, spec->name, eql_pos) == 0 &&
|
78
82
|
spec->name[eql_pos] == '\0') {
|
79
83
|
*has_value = 1;
|
@@ -575,6 +579,28 @@ cli_opt_status_t cli_opt_parse(
|
|
575
579
|
return validate_required(opt, specs, given_specs);
|
576
580
|
}
|
577
581
|
|
582
|
+
int cli_opt_foreach(
|
583
|
+
const cli_opt_spec specs[],
|
584
|
+
char **args,
|
585
|
+
size_t args_len,
|
586
|
+
unsigned int flags,
|
587
|
+
int (*callback)(cli_opt *, void *),
|
588
|
+
void *callback_data)
|
589
|
+
{
|
590
|
+
cli_opt_parser parser;
|
591
|
+
cli_opt opt;
|
592
|
+
int ret;
|
593
|
+
|
594
|
+
cli_opt_parser_init(&parser, specs, args, args_len, flags);
|
595
|
+
|
596
|
+
while (cli_opt_parser_next(&opt, &parser)) {
|
597
|
+
if ((ret = callback(&opt, callback_data)) != 0)
|
598
|
+
return ret;
|
599
|
+
}
|
600
|
+
|
601
|
+
return 0;
|
602
|
+
}
|
603
|
+
|
578
604
|
static int spec_name_fprint(FILE *file, const cli_opt_spec *spec)
|
579
605
|
{
|
580
606
|
int error;
|
@@ -10,7 +10,7 @@
|
|
10
10
|
* This file was produced by using the `rename.pl` script included with
|
11
11
|
* adopt. The command-line specified was:
|
12
12
|
*
|
13
|
-
* ./rename.pl cli_opt --filename=opt --include=
|
13
|
+
* ./rename.pl cli_opt --filename=opt --include=common.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
|
14
14
|
*/
|
15
15
|
|
16
16
|
#ifndef CLI_opt_h__
|
@@ -275,8 +275,8 @@ typedef struct cli_opt_parser {
|
|
275
275
|
size_t arg_idx;
|
276
276
|
size_t in_args;
|
277
277
|
size_t in_short;
|
278
|
-
int needs_sort : 1,
|
279
|
-
|
278
|
+
unsigned int needs_sort : 1,
|
279
|
+
in_literal : 1;
|
280
280
|
} cli_opt_parser;
|
281
281
|
|
282
282
|
/**
|
@@ -300,6 +300,24 @@ cli_opt_status_t cli_opt_parse(
|
|
300
300
|
size_t args_len,
|
301
301
|
unsigned int flags);
|
302
302
|
|
303
|
+
/**
|
304
|
+
* Quickly executes the given callback for each argument.
|
305
|
+
*
|
306
|
+
* @param specs A NULL-terminated array of `cli_opt_spec`s that can be parsed
|
307
|
+
* @param args The arguments that will be parsed
|
308
|
+
* @param args_len The length of arguments to be parsed
|
309
|
+
* @param flags The `cli_opt_flag_t flags for parsing
|
310
|
+
* @param callback The callback to invoke for each specified option
|
311
|
+
* @param callback_data Data to be provided to the callback
|
312
|
+
*/
|
313
|
+
int cli_opt_foreach(
|
314
|
+
const cli_opt_spec specs[],
|
315
|
+
char **args,
|
316
|
+
size_t args_len,
|
317
|
+
unsigned int flags,
|
318
|
+
int (*callback)(cli_opt *, void *),
|
319
|
+
void *callback_data);
|
320
|
+
|
303
321
|
/**
|
304
322
|
* Initializes a parser that parses the given arguments according to the
|
305
323
|
* given specifications.
|
@@ -5,35 +5,84 @@
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
6
6
|
*/
|
7
7
|
|
8
|
-
#include "
|
8
|
+
#include "common.h"
|
9
9
|
#include "str.h"
|
10
10
|
|
11
|
-
|
11
|
+
#define is_switch_or_value(spec) \
|
12
|
+
((spec)->type == CLI_OPT_TYPE_SWITCH || \
|
13
|
+
(spec)->type == CLI_OPT_TYPE_VALUE)
|
14
|
+
|
15
|
+
static int print_spec_args(git_str *out, const cli_opt_spec *spec)
|
12
16
|
{
|
13
|
-
|
14
|
-
|
15
|
-
!(spec->usage & CLI_OPT_USAGE_SHOW_LONG))
|
16
|
-
return git_str_printf(out, "-%c <%s>", spec->alias, spec->value_name);
|
17
|
-
if (spec->type == CLI_OPT_TYPE_VALUE && spec->alias &&
|
18
|
-
!(spec->usage & CLI_OPT_USAGE_SHOW_LONG))
|
19
|
-
return git_str_printf(out, "-%c [<%s>]", spec->alias, spec->value_name);
|
20
|
-
if (spec->type == CLI_OPT_TYPE_VALUE &&
|
21
|
-
!(spec->usage & CLI_OPT_USAGE_VALUE_OPTIONAL))
|
22
|
-
return git_str_printf(out, "--%s[=<%s>]", spec->name, spec->value_name);
|
23
|
-
if (spec->type == CLI_OPT_TYPE_VALUE)
|
24
|
-
return git_str_printf(out, "--%s=<%s>", spec->name, spec->value_name);
|
17
|
+
GIT_ASSERT(!is_switch_or_value(spec));
|
18
|
+
|
25
19
|
if (spec->type == CLI_OPT_TYPE_ARG)
|
26
20
|
return git_str_printf(out, "<%s>", spec->value_name);
|
27
21
|
if (spec->type == CLI_OPT_TYPE_ARGS)
|
28
22
|
return git_str_printf(out, "<%s>...", spec->value_name);
|
29
23
|
if (spec->type == CLI_OPT_TYPE_LITERAL)
|
30
24
|
return git_str_printf(out, "--");
|
31
|
-
|
25
|
+
|
26
|
+
GIT_ASSERT(!"unknown option spec type");
|
27
|
+
return -1;
|
28
|
+
}
|
29
|
+
|
30
|
+
GIT_INLINE(int) print_spec_alias(git_str *out, const cli_opt_spec *spec)
|
31
|
+
{
|
32
|
+
GIT_ASSERT(is_switch_or_value(spec) && spec->alias);
|
33
|
+
|
34
|
+
if (spec->type == CLI_OPT_TYPE_VALUE &&
|
35
|
+
!(spec->usage & CLI_OPT_USAGE_VALUE_OPTIONAL))
|
36
|
+
return git_str_printf(out, "-%c <%s>", spec->alias, spec->value_name);
|
37
|
+
else if (spec->type == CLI_OPT_TYPE_VALUE)
|
38
|
+
return git_str_printf(out, "-%c [<%s>]", spec->alias, spec->value_name);
|
39
|
+
else
|
32
40
|
return git_str_printf(out, "-%c", spec->alias);
|
33
|
-
|
41
|
+
}
|
42
|
+
|
43
|
+
GIT_INLINE(int) print_spec_name(git_str *out, const cli_opt_spec *spec)
|
44
|
+
{
|
45
|
+
GIT_ASSERT(is_switch_or_value(spec) && spec->name);
|
46
|
+
|
47
|
+
if (spec->type == CLI_OPT_TYPE_VALUE &&
|
48
|
+
!(spec->usage & CLI_OPT_USAGE_VALUE_OPTIONAL))
|
49
|
+
return git_str_printf(out, "--%s=<%s>", spec->name, spec->value_name);
|
50
|
+
else if (spec->type == CLI_OPT_TYPE_VALUE)
|
51
|
+
return git_str_printf(out, "--%s[=<%s>]", spec->name, spec->value_name);
|
52
|
+
else
|
34
53
|
return git_str_printf(out, "--%s", spec->name);
|
54
|
+
}
|
55
|
+
|
56
|
+
GIT_INLINE(int) print_spec_full(git_str *out, const cli_opt_spec *spec)
|
57
|
+
{
|
58
|
+
int error = 0;
|
35
59
|
|
36
|
-
|
60
|
+
if (is_switch_or_value(spec)) {
|
61
|
+
if (spec->alias)
|
62
|
+
error |= print_spec_alias(out, spec);
|
63
|
+
|
64
|
+
if (spec->alias && spec->name)
|
65
|
+
error |= git_str_printf(out, ", ");
|
66
|
+
|
67
|
+
if (spec->name)
|
68
|
+
error |= print_spec_name(out, spec);
|
69
|
+
} else {
|
70
|
+
error |= print_spec_args(out, spec);
|
71
|
+
}
|
72
|
+
|
73
|
+
return error;
|
74
|
+
}
|
75
|
+
|
76
|
+
GIT_INLINE(int) print_spec(git_str *out, const cli_opt_spec *spec)
|
77
|
+
{
|
78
|
+
if (is_switch_or_value(spec)) {
|
79
|
+
if (spec->alias && !(spec->usage & CLI_OPT_USAGE_SHOW_LONG))
|
80
|
+
return print_spec_alias(out, spec);
|
81
|
+
else
|
82
|
+
return print_spec_name(out, spec);
|
83
|
+
}
|
84
|
+
|
85
|
+
return print_spec_args(out, spec);
|
37
86
|
}
|
38
87
|
|
39
88
|
/*
|
@@ -46,7 +95,8 @@ int cli_opt_usage_fprint(
|
|
46
95
|
FILE *file,
|
47
96
|
const char *command,
|
48
97
|
const char *subcommand,
|
49
|
-
const cli_opt_spec specs[]
|
98
|
+
const cli_opt_spec specs[],
|
99
|
+
unsigned int print_flags)
|
50
100
|
{
|
51
101
|
git_str usage = GIT_BUF_INIT, opt = GIT_BUF_INIT;
|
52
102
|
const cli_opt_spec *spec;
|
@@ -55,7 +105,7 @@ int cli_opt_usage_fprint(
|
|
55
105
|
int error;
|
56
106
|
|
57
107
|
/* TODO: query actual console width. */
|
58
|
-
int console_width =
|
108
|
+
int console_width = 78;
|
59
109
|
|
60
110
|
if ((error = git_str_printf(&usage, "usage: %s", command)) < 0)
|
61
111
|
goto done;
|
@@ -73,7 +123,8 @@ int cli_opt_usage_fprint(
|
|
73
123
|
|
74
124
|
next_choice = !!((spec + 1)->usage & CLI_OPT_USAGE_CHOICE);
|
75
125
|
|
76
|
-
if (spec->usage & CLI_OPT_USAGE_HIDDEN)
|
126
|
+
if ((spec->usage & CLI_OPT_USAGE_HIDDEN) &&
|
127
|
+
!(print_flags & CLI_OPT_USAGE_SHOW_HIDDEN))
|
77
128
|
continue;
|
78
129
|
|
79
130
|
if (choice)
|
@@ -86,7 +137,7 @@ int cli_opt_usage_fprint(
|
|
86
137
|
if (!optional && !choice && next_choice)
|
87
138
|
git_str_putc(&opt, '(');
|
88
139
|
|
89
|
-
if ((error =
|
140
|
+
if ((error = print_spec(&opt, spec)) < 0)
|
90
141
|
goto done;
|
91
142
|
|
92
143
|
if (!optional && choice && !next_choice)
|
@@ -111,11 +162,11 @@ int cli_opt_usage_fprint(
|
|
111
162
|
git_str_putc(&usage, ' ');
|
112
163
|
|
113
164
|
linelen = prefixlen;
|
114
|
-
} else {
|
115
|
-
git_str_putc(&usage, ' ');
|
116
|
-
linelen += git_str_len(&opt) + 1;
|
117
165
|
}
|
118
166
|
|
167
|
+
git_str_putc(&usage, ' ');
|
168
|
+
linelen += git_str_len(&opt) + 1;
|
169
|
+
|
119
170
|
git_str_puts(&usage, git_str_cstr(&opt));
|
120
171
|
|
121
172
|
if (git_str_oom(&usage)) {
|
@@ -140,7 +191,7 @@ int cli_opt_usage_error(
|
|
140
191
|
const cli_opt *invalid_opt)
|
141
192
|
{
|
142
193
|
cli_opt_status_fprint(stderr, PROGRAM_NAME, invalid_opt);
|
143
|
-
cli_opt_usage_fprint(stderr, PROGRAM_NAME, subcommand, specs);
|
194
|
+
cli_opt_usage_fprint(stderr, PROGRAM_NAME, subcommand, specs, 0);
|
144
195
|
return CLI_EXIT_USAGE;
|
145
196
|
}
|
146
197
|
|
@@ -150,35 +201,53 @@ int cli_opt_help_fprint(
|
|
150
201
|
{
|
151
202
|
git_str help = GIT_BUF_INIT;
|
152
203
|
const cli_opt_spec *spec;
|
204
|
+
bool required;
|
153
205
|
int error = 0;
|
154
206
|
|
155
207
|
/* Display required arguments first */
|
156
208
|
for (spec = specs; spec->type; ++spec) {
|
157
|
-
if (
|
158
|
-
(spec->
|
209
|
+
if ((spec->usage & CLI_OPT_USAGE_HIDDEN) ||
|
210
|
+
(spec->type == CLI_OPT_TYPE_LITERAL))
|
211
|
+
continue;
|
212
|
+
|
213
|
+
required = ((spec->usage & CLI_OPT_USAGE_REQUIRED) ||
|
214
|
+
((spec->usage & CLI_OPT_USAGE_CHOICE) && required));
|
215
|
+
|
216
|
+
if (!required)
|
159
217
|
continue;
|
160
218
|
|
161
219
|
git_str_printf(&help, " ");
|
162
220
|
|
163
|
-
if ((error =
|
221
|
+
if ((error = print_spec_full(&help, spec)) < 0)
|
164
222
|
goto done;
|
165
223
|
|
166
|
-
git_str_printf(&help, "
|
224
|
+
git_str_printf(&help, "\n");
|
225
|
+
|
226
|
+
if (spec->help)
|
227
|
+
git_str_printf(&help, " %s\n", spec->help);
|
167
228
|
}
|
168
229
|
|
169
230
|
/* Display the remaining arguments */
|
170
231
|
for (spec = specs; spec->type; ++spec) {
|
171
|
-
if ((spec->usage &
|
172
|
-
(spec->
|
232
|
+
if ((spec->usage & CLI_OPT_USAGE_HIDDEN) ||
|
233
|
+
(spec->type == CLI_OPT_TYPE_LITERAL))
|
234
|
+
continue;
|
235
|
+
|
236
|
+
required = ((spec->usage & CLI_OPT_USAGE_REQUIRED) ||
|
237
|
+
((spec->usage & CLI_OPT_USAGE_CHOICE) && required));
|
238
|
+
|
239
|
+
if (required)
|
173
240
|
continue;
|
174
241
|
|
175
242
|
git_str_printf(&help, " ");
|
176
243
|
|
177
|
-
if ((error =
|
244
|
+
if ((error = print_spec_full(&help, spec)) < 0)
|
178
245
|
goto done;
|
179
246
|
|
180
|
-
git_str_printf(&help, "
|
247
|
+
git_str_printf(&help, "\n");
|
181
248
|
|
249
|
+
if (spec->help)
|
250
|
+
git_str_printf(&help, " %s\n", spec->help);
|
182
251
|
}
|
183
252
|
|
184
253
|
if (git_str_oom(&help) ||
|