rugged 1.4.5 → 1.5.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/README.md +34 -2
- data/ext/rugged/extconf.rb +1 -0
- data/ext/rugged/rugged.c +16 -0
- data/ext/rugged/rugged.h +4 -0
- data/ext/rugged/rugged_remote.c +10 -10
- data/ext/rugged/rugged_repo.c +2 -7
- data/ext/rugged/rugged_settings.c +5 -0
- data/lib/rugged/tree.rb +4 -0
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +16 -3
- data/vendor/libgit2/COPYING +40 -0
- data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
- data/vendor/libgit2/cmake/FindPCRE.cmake +3 -4
- data/vendor/libgit2/cmake/FindPCRE2.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +1 -1
- data/vendor/libgit2/cmake/SelectHashes.cmake +62 -14
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
- data/vendor/libgit2/include/git2/branch.h +2 -2
- data/vendor/libgit2/include/git2/common.h +11 -0
- data/vendor/libgit2/include/git2/config.h +6 -6
- data/vendor/libgit2/include/git2/deprecated.h +2 -0
- data/vendor/libgit2/include/git2/errors.h +17 -3
- data/vendor/libgit2/include/git2/merge.h +1 -1
- data/vendor/libgit2/include/git2/status.h +5 -2
- data/vendor/libgit2/include/git2/sys/remote.h +15 -0
- data/vendor/libgit2/include/git2/sys/transport.h +9 -5
- data/vendor/libgit2/include/git2/version.h +27 -6
- data/vendor/libgit2/src/CMakeLists.txt +104 -214
- data/vendor/libgit2/src/README.md +12 -0
- data/vendor/libgit2/src/cli/CMakeLists.txt +53 -0
- data/vendor/libgit2/src/cli/README.md +26 -0
- data/vendor/libgit2/src/cli/cli.h +20 -0
- data/vendor/libgit2/src/cli/cmd.c +21 -0
- data/vendor/libgit2/src/cli/cmd.h +33 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
- data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +135 -0
- data/vendor/libgit2/src/cli/cmd_help.c +86 -0
- data/vendor/libgit2/src/cli/error.h +51 -0
- data/vendor/libgit2/src/cli/main.c +106 -0
- data/vendor/libgit2/src/cli/opt.c +669 -0
- data/vendor/libgit2/src/cli/opt.h +349 -0
- data/vendor/libgit2/src/cli/opt_usage.c +194 -0
- data/vendor/libgit2/src/cli/opt_usage.h +35 -0
- data/vendor/libgit2/src/cli/progress.c +345 -0
- data/vendor/libgit2/src/cli/progress.h +117 -0
- data/vendor/libgit2/src/cli/sighandler.h +20 -0
- data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
- data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
- data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
- data/vendor/libgit2/src/features.h.in +9 -0
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +131 -0
- data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +1 -1
- data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +14 -9
- data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +20 -17
- data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +1 -1
- data/vendor/libgit2/src/libgit2/common.h +55 -0
- data/vendor/libgit2/src/{config.c → libgit2/config.c} +2 -2
- data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +1 -1
- data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +1 -0
- data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
- data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +31 -1
- data/vendor/libgit2/src/{index.c → libgit2/index.c} +6 -6
- data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +2 -2
- data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +3 -3
- data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +5 -0
- data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +20 -23
- data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +2 -1
- data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +9 -9
- data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +1 -1
- data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +0 -1
- data/vendor/libgit2/src/{object.c → libgit2/object.c} +1 -0
- data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +2 -2
- data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +2 -21
- data/vendor/libgit2/src/{oid.h → libgit2/oid.h} +35 -2
- data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
- data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +24 -18
- data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +3 -2
- data/vendor/libgit2/src/{path.c → libgit2/path.c} +1 -0
- data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +11 -1
- data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +6 -2
- data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +1 -1
- data/vendor/libgit2/src/{remote.h → libgit2/remote.h} +1 -1
- data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +1 -0
- data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +15 -5
- data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +1 -1
- data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +12 -0
- data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +91 -326
- data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +1 -1
- data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +16 -23
- data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +1 -1
- data/vendor/libgit2/src/util/CMakeLists.txt +74 -0
- data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
- data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
- data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
- data/vendor/libgit2/src/{date.c → util/date.c} +4 -3
- data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +1 -1
- data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +1 -1
- data/vendor/libgit2/src/{fs_path.c → util/fs_path.c} +17 -11
- data/vendor/libgit2/src/{fs_path.h → util/fs_path.h} +1 -1
- data/vendor/libgit2/src/{futils.c → util/futils.c} +44 -2
- data/vendor/libgit2/src/{futils.h → util/futils.h} +2 -1
- data/vendor/libgit2/src/{common.h → util/git2_util.h} +13 -59
- data/vendor/libgit2/src/util/hash/builtin.c +53 -0
- data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +1 -1
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.c +55 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.c +46 -0
- data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
- data/vendor/libgit2/src/util/hash/openssl.c +194 -0
- data/vendor/libgit2/src/util/hash/openssl.h +45 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +355 -0
- data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
- data/vendor/libgit2/src/util/hash/sha.h +70 -0
- data/vendor/libgit2/src/util/hash/win32.c +549 -0
- data/vendor/libgit2/src/util/hash/win32.h +60 -0
- data/vendor/libgit2/src/{hash.c → util/hash.c} +17 -1
- data/vendor/libgit2/src/{hash.h → util/hash.h} +5 -3
- data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
- data/vendor/libgit2/src/{net.c → util/net.c} +0 -1
- data/vendor/libgit2/src/{net.h → util/net.h} +1 -1
- data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
- data/vendor/libgit2/src/{posix.h → util/posix.h} +1 -1
- data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +1 -1
- data/vendor/libgit2/src/{rand.c → util/rand.c} +7 -3
- data/vendor/libgit2/src/{rand.h → util/rand.h} +1 -1
- data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
- data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
- data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
- data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +1 -1
- data/vendor/libgit2/src/{str.h → util/str.h} +1 -1
- data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
- data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
- data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -1
- data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -1
- data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
- data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
- data/vendor/libgit2/src/{util.c → util/util.c} +1 -1
- data/vendor/libgit2/src/{util.h → util/util.h} +1 -1
- data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
- data/vendor/libgit2/src/{vector.h → util/vector.h} +1 -1
- data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/findfile.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +1 -1
- data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
- data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
- data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
- data/vendor/libgit2/src/{zstream.h → util/zstream.h} +1 -1
- metadata +390 -361
- data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
- data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
- data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
- data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
- data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
- data/vendor/libgit2/src/hash/sha1.h +0 -40
- /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
- /data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +0 -0
- /data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +0 -0
- /data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +0 -0
- /data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +0 -0
- /data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +0 -0
- /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
- /data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +0 -0
- /data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +0 -0
- /data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +0 -0
- /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
- /data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +0 -0
- /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
- /data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +0 -0
- /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
- /data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +0 -0
- /data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +0 -0
- /data/vendor/libgit2/src/{buf.c → libgit2/buf.c} +0 -0
- /data/vendor/libgit2/src/{buf.h → libgit2/buf.h} +0 -0
- /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
- /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
- /data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +0 -0
- /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
- /data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +0 -0
- /data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +0 -0
- /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
- /data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +0 -0
- /data/vendor/libgit2/src/{commit.h → libgit2/commit.h} +0 -0
- /data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +0 -0
- /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
- /data/vendor/libgit2/src/{config.h → libgit2/config.h} +0 -0
- /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
- /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
- /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
- /data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +0 -0
- /data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +0 -0
- /data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +0 -0
- /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
- /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
- /data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +0 -0
- /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
- /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
- /data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +0 -0
- /data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +0 -0
- /data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +0 -0
- /data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +0 -0
- /data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +0 -0
- /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
- /data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +0 -0
- /data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +0 -0
- /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
- /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
- /data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +0 -0
- /data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +0 -0
- /data/vendor/libgit2/src/{diff_stats.h → libgit2/diff_stats.h} +0 -0
- /data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +0 -0
- /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
- /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
- /data/vendor/libgit2/src/{email.c → libgit2/email.c} +0 -0
- /data/vendor/libgit2/src/{email.h → libgit2/email.h} +0 -0
- /data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +0 -0
- /data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +0 -0
- /data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +0 -0
- /data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +0 -0
- /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
- /data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +0 -0
- /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
- /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
- /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
- /data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
- /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
- /data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +0 -0
- /data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +0 -0
- /data/vendor/libgit2/src/{index.h → libgit2/index.h} +0 -0
- /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
- /data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +0 -0
- /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
- /data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +0 -0
- /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
- /data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +0 -0
- /data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +0 -0
- /data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +0 -0
- /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
- /data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +0 -0
- /data/vendor/libgit2/src/{message.c → libgit2/message.c} +0 -0
- /data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +0 -0
- /data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +0 -0
- /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
- /data/vendor/libgit2/src/{object.h → libgit2/object.h} +0 -0
- /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
- /data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +0 -0
- /data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +0 -0
- /data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +0 -0
- /data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +0 -0
- /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
- /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
- /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
- /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
- /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
- /data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +0 -0
- /data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +0 -0
- /data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +0 -0
- /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
- /data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +0 -0
- /data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +0 -0
- /data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +0 -0
- /data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +0 -0
- /data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +0 -0
- /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
- /data/vendor/libgit2/src/{path.h → libgit2/path.h} +0 -0
- /data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +0 -0
- /data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +0 -0
- /data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +0 -0
- /data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +0 -0
- /data/vendor/libgit2/src/{push.c → libgit2/push.c} +0 -0
- /data/vendor/libgit2/src/{push.h → libgit2/push.h} +0 -0
- /data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +0 -0
- /data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +0 -0
- /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
- /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
- /data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +0 -0
- /data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +0 -0
- /data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +0 -0
- /data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +0 -0
- /data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +0 -0
- /data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +0 -0
- /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
- /data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +0 -0
- /data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +0 -0
- /data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +0 -0
- /data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +0 -0
- /data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +0 -0
- /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
- /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
- /data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +0 -0
- /data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +0 -0
- /data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +0 -0
- /data/vendor/libgit2/src/{status.c → libgit2/status.c} +0 -0
- /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
- /data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +0 -0
- /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
- /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
- /data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +0 -0
- /data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +0 -0
- /data/vendor/libgit2/src/{sysdir.c → libgit2/sysdir.c} +0 -0
- /data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +0 -0
- /data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +0 -0
- /data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +0 -0
- /data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +0 -0
- /data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +0 -0
- /data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +0 -0
- /data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +0 -0
- /data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +0 -0
- /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
- /data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
- /data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +0 -0
- /data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +0 -0
- /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
- /data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +0 -0
- /data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/git-xdiff.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +0 -0
- /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
- /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
- /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
- /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
- /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
- /data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +0 -0
- /data/vendor/libgit2/src/{date.h → util/date.h} +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
- /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
- /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
- /data/vendor/libgit2/src/{khash.h → util/khash.h} +0 -0
- /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
- /data/vendor/libgit2/src/{posix.c → util/posix.c} +0 -0
- /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
- /data/vendor/libgit2/src/{regexp.c → util/regexp.c} +0 -0
- /data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +0 -0
- /data/vendor/libgit2/src/{str.c → util/str.c} +0 -0
- /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
- /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
- /data/vendor/libgit2/src/{thread.h → util/thread.h} +0 -0
- /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
- /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
- /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
- /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/findfile.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
- /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
- /data/vendor/libgit2/src/{zstream.c → util/zstream.c} +0 -0
@@ -0,0 +1,204 @@
|
|
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 "cli.h"
|
10
|
+
#include "cmd.h"
|
11
|
+
|
12
|
+
#define COMMAND_NAME "cat-file"
|
13
|
+
|
14
|
+
typedef enum {
|
15
|
+
DISPLAY_CONTENT = 0,
|
16
|
+
DISPLAY_EXISTS,
|
17
|
+
DISPLAY_PRETTY,
|
18
|
+
DISPLAY_SIZE,
|
19
|
+
DISPLAY_TYPE
|
20
|
+
} display_t;
|
21
|
+
|
22
|
+
static int show_help;
|
23
|
+
static int display = DISPLAY_CONTENT;
|
24
|
+
static char *type_name, *object_spec;
|
25
|
+
|
26
|
+
static const cli_opt_spec opts[] = {
|
27
|
+
{ CLI_OPT_TYPE_SWITCH, "help", 0, &show_help, 1,
|
28
|
+
CLI_OPT_USAGE_HIDDEN | CLI_OPT_USAGE_STOP_PARSING, NULL,
|
29
|
+
"display help about the " COMMAND_NAME " command" },
|
30
|
+
|
31
|
+
{ CLI_OPT_TYPE_SWITCH, NULL, 't', &display, DISPLAY_TYPE,
|
32
|
+
CLI_OPT_USAGE_REQUIRED, NULL, "display the type of the object" },
|
33
|
+
{ CLI_OPT_TYPE_SWITCH, NULL, 's', &display, DISPLAY_SIZE,
|
34
|
+
CLI_OPT_USAGE_CHOICE, NULL, "display the size of the object" },
|
35
|
+
{ CLI_OPT_TYPE_SWITCH, NULL, 'e', &display, DISPLAY_EXISTS,
|
36
|
+
CLI_OPT_USAGE_CHOICE, NULL, "displays nothing unless the object is corrupt" },
|
37
|
+
{ CLI_OPT_TYPE_SWITCH, NULL, 'p', &display, DISPLAY_PRETTY,
|
38
|
+
CLI_OPT_USAGE_CHOICE, NULL, "pretty-print the object" },
|
39
|
+
{ CLI_OPT_TYPE_ARG, "type", 0, &type_name, 0,
|
40
|
+
CLI_OPT_USAGE_CHOICE, "type", "the type of object to display" },
|
41
|
+
{ CLI_OPT_TYPE_ARG, "object", 0, &object_spec, 0,
|
42
|
+
CLI_OPT_USAGE_REQUIRED, "object", "the object to display" },
|
43
|
+
{ 0 },
|
44
|
+
};
|
45
|
+
|
46
|
+
static void print_help(void)
|
47
|
+
{
|
48
|
+
cli_opt_usage_fprint(stdout, PROGRAM_NAME, COMMAND_NAME, opts);
|
49
|
+
printf("\n");
|
50
|
+
|
51
|
+
printf("Display the content for the given object in the repository.\n");
|
52
|
+
printf("\n");
|
53
|
+
|
54
|
+
printf("Options:\n");
|
55
|
+
|
56
|
+
cli_opt_help_fprint(stdout, opts);
|
57
|
+
}
|
58
|
+
|
59
|
+
static int print_odb(git_object *object, display_t display)
|
60
|
+
{
|
61
|
+
git_odb *odb = NULL;
|
62
|
+
git_odb_object *odb_object = NULL;
|
63
|
+
const unsigned char *content;
|
64
|
+
git_object_size_t size;
|
65
|
+
int ret = 0;
|
66
|
+
|
67
|
+
/*
|
68
|
+
* Our parsed blobs retain the raw content; all other objects are
|
69
|
+
* parsed into a working representation. To get the raw content,
|
70
|
+
* we need to do an ODB lookup. (Thankfully, this should be cached
|
71
|
+
* in-memory from our last call.)
|
72
|
+
*/
|
73
|
+
if (git_object_type(object) == GIT_OBJECT_BLOB) {
|
74
|
+
content = git_blob_rawcontent((git_blob *)object);
|
75
|
+
size = git_blob_rawsize((git_blob *)object);
|
76
|
+
} else {
|
77
|
+
if (git_repository_odb(&odb, git_object_owner(object)) < 0 ||
|
78
|
+
git_odb_read(&odb_object, odb, git_object_id(object)) < 0) {
|
79
|
+
ret = cli_error_git();
|
80
|
+
goto done;
|
81
|
+
}
|
82
|
+
|
83
|
+
content = git_odb_object_data(odb_object);
|
84
|
+
size = git_odb_object_size(odb_object);
|
85
|
+
}
|
86
|
+
|
87
|
+
switch (display) {
|
88
|
+
case DISPLAY_SIZE:
|
89
|
+
if (printf("%" PRIu64 "\n", size) < 0)
|
90
|
+
ret = cli_error_os();
|
91
|
+
break;
|
92
|
+
case DISPLAY_CONTENT:
|
93
|
+
if (p_write(fileno(stdout), content, (size_t)size) < 0)
|
94
|
+
ret = cli_error_os();
|
95
|
+
break;
|
96
|
+
default:
|
97
|
+
GIT_ASSERT(0);
|
98
|
+
}
|
99
|
+
|
100
|
+
done:
|
101
|
+
git_odb_object_free(odb_object);
|
102
|
+
git_odb_free(odb);
|
103
|
+
return ret;
|
104
|
+
}
|
105
|
+
|
106
|
+
static int print_type(git_object *object)
|
107
|
+
{
|
108
|
+
if (printf("%s\n", git_object_type2string(git_object_type(object))) < 0)
|
109
|
+
return cli_error_os();
|
110
|
+
|
111
|
+
return 0;
|
112
|
+
}
|
113
|
+
|
114
|
+
static int print_pretty(git_object *object)
|
115
|
+
{
|
116
|
+
const git_tree_entry *entry;
|
117
|
+
size_t i, count;
|
118
|
+
|
119
|
+
/*
|
120
|
+
* Only trees are stored in an unreadable format and benefit from
|
121
|
+
* pretty-printing.
|
122
|
+
*/
|
123
|
+
if (git_object_type(object) != GIT_OBJECT_TREE)
|
124
|
+
return print_odb(object, DISPLAY_CONTENT);
|
125
|
+
|
126
|
+
for (i = 0, count = git_tree_entrycount((git_tree *)object); i < count; i++) {
|
127
|
+
entry = git_tree_entry_byindex((git_tree *)object, i);
|
128
|
+
|
129
|
+
if (printf("%06o %s %s\t%s\n",
|
130
|
+
git_tree_entry_filemode_raw(entry),
|
131
|
+
git_object_type2string(git_tree_entry_type(entry)),
|
132
|
+
git_oid_tostr_s(git_tree_entry_id(entry)),
|
133
|
+
git_tree_entry_name(entry)) < 0)
|
134
|
+
return cli_error_os();
|
135
|
+
}
|
136
|
+
|
137
|
+
return 0;
|
138
|
+
}
|
139
|
+
|
140
|
+
int cmd_cat_file(int argc, char **argv)
|
141
|
+
{
|
142
|
+
git_repository *repo = NULL;
|
143
|
+
git_object *object = NULL;
|
144
|
+
git_object_t type;
|
145
|
+
cli_opt invalid_opt;
|
146
|
+
int giterr, ret = 0;
|
147
|
+
|
148
|
+
if (cli_opt_parse(&invalid_opt, opts, argv + 1, argc - 1, CLI_OPT_PARSE_GNU))
|
149
|
+
return cli_opt_usage_error(COMMAND_NAME, opts, &invalid_opt);
|
150
|
+
|
151
|
+
if (show_help) {
|
152
|
+
print_help();
|
153
|
+
return 0;
|
154
|
+
}
|
155
|
+
|
156
|
+
if (git_repository_open_ext(&repo, ".", GIT_REPOSITORY_OPEN_FROM_ENV, NULL) < 0)
|
157
|
+
return cli_error_git();
|
158
|
+
|
159
|
+
if ((giterr = git_revparse_single(&object, repo, object_spec)) < 0) {
|
160
|
+
if (display == DISPLAY_EXISTS && giterr == GIT_ENOTFOUND)
|
161
|
+
ret = 1;
|
162
|
+
else
|
163
|
+
ret = cli_error_git();
|
164
|
+
|
165
|
+
goto done;
|
166
|
+
}
|
167
|
+
|
168
|
+
if (type_name) {
|
169
|
+
git_object *peeled;
|
170
|
+
|
171
|
+
if ((type = git_object_string2type(type_name)) == GIT_OBJECT_INVALID) {
|
172
|
+
ret = cli_error_usage("invalid object type '%s'", type_name);
|
173
|
+
goto done;
|
174
|
+
}
|
175
|
+
|
176
|
+
if (git_object_peel(&peeled, object, type) < 0) {
|
177
|
+
ret = cli_error_git();
|
178
|
+
goto done;
|
179
|
+
}
|
180
|
+
|
181
|
+
git_object_free(object);
|
182
|
+
object = peeled;
|
183
|
+
}
|
184
|
+
|
185
|
+
switch (display) {
|
186
|
+
case DISPLAY_EXISTS:
|
187
|
+
ret = 0;
|
188
|
+
break;
|
189
|
+
case DISPLAY_TYPE:
|
190
|
+
ret = print_type(object);
|
191
|
+
break;
|
192
|
+
case DISPLAY_PRETTY:
|
193
|
+
ret = print_pretty(object);
|
194
|
+
break;
|
195
|
+
default:
|
196
|
+
ret = print_odb(object, display);
|
197
|
+
break;
|
198
|
+
}
|
199
|
+
|
200
|
+
done:
|
201
|
+
git_object_free(object);
|
202
|
+
git_repository_free(repo);
|
203
|
+
return ret;
|
204
|
+
}
|
@@ -0,0 +1,176 @@
|
|
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
|
+
#include "cli.h"
|
11
|
+
#include "cmd.h"
|
12
|
+
#include "error.h"
|
13
|
+
#include "sighandler.h"
|
14
|
+
#include "progress.h"
|
15
|
+
|
16
|
+
#include "fs_path.h"
|
17
|
+
#include "futils.h"
|
18
|
+
|
19
|
+
#define COMMAND_NAME "clone"
|
20
|
+
|
21
|
+
static char *branch, *remote_path, *local_path;
|
22
|
+
static int show_help, quiet, checkout = 1, bare;
|
23
|
+
static bool local_path_exists;
|
24
|
+
static cli_progress progress = CLI_PROGRESS_INIT;
|
25
|
+
|
26
|
+
static const cli_opt_spec opts[] = {
|
27
|
+
{ CLI_OPT_TYPE_SWITCH, "help", 0, &show_help, 1,
|
28
|
+
CLI_OPT_USAGE_HIDDEN | CLI_OPT_USAGE_STOP_PARSING, NULL,
|
29
|
+
"display help about the " COMMAND_NAME " command" },
|
30
|
+
|
31
|
+
{ CLI_OPT_TYPE_SWITCH, "quiet", 'q', &quiet, 1,
|
32
|
+
CLI_OPT_USAGE_DEFAULT, NULL, "display the type of the object" },
|
33
|
+
{ CLI_OPT_TYPE_SWITCH, "no-checkout", 'n', &checkout, 0,
|
34
|
+
CLI_OPT_USAGE_DEFAULT, NULL, "don't checkout HEAD" },
|
35
|
+
{ CLI_OPT_TYPE_SWITCH, "bare", 0, &bare, 1,
|
36
|
+
CLI_OPT_USAGE_DEFAULT, NULL, "don't create a working directory" },
|
37
|
+
{ CLI_OPT_TYPE_VALUE, "branch", 'b', &branch, 0,
|
38
|
+
CLI_OPT_USAGE_DEFAULT, "name", "branch to check out" },
|
39
|
+
{ CLI_OPT_TYPE_LITERAL },
|
40
|
+
{ CLI_OPT_TYPE_ARG, "repository", 0, &remote_path, 0,
|
41
|
+
CLI_OPT_USAGE_REQUIRED, "repository", "repository path" },
|
42
|
+
{ CLI_OPT_TYPE_ARG, "directory", 0, &local_path, 0,
|
43
|
+
CLI_OPT_USAGE_DEFAULT, "directory", "directory to clone into" },
|
44
|
+
{ 0 }
|
45
|
+
};
|
46
|
+
|
47
|
+
static void print_help(void)
|
48
|
+
{
|
49
|
+
cli_opt_usage_fprint(stdout, PROGRAM_NAME, COMMAND_NAME, opts);
|
50
|
+
printf("\n");
|
51
|
+
|
52
|
+
printf("Clone a repository into a new directory.\n");
|
53
|
+
printf("\n");
|
54
|
+
|
55
|
+
printf("Options:\n");
|
56
|
+
|
57
|
+
cli_opt_help_fprint(stdout, opts);
|
58
|
+
}
|
59
|
+
|
60
|
+
static char *compute_local_path(const char *orig_path)
|
61
|
+
{
|
62
|
+
const char *slash;
|
63
|
+
char *local_path;
|
64
|
+
|
65
|
+
if ((slash = strrchr(orig_path, '/')) == NULL &&
|
66
|
+
(slash = strrchr(orig_path, '\\')) == NULL)
|
67
|
+
local_path = git__strdup(orig_path);
|
68
|
+
else
|
69
|
+
local_path = git__strdup(slash + 1);
|
70
|
+
|
71
|
+
return local_path;
|
72
|
+
}
|
73
|
+
|
74
|
+
static bool validate_local_path(const char *path)
|
75
|
+
{
|
76
|
+
if (!git_fs_path_exists(path))
|
77
|
+
return false;
|
78
|
+
|
79
|
+
if (!git_fs_path_isdir(path) || !git_fs_path_is_empty_dir(path)) {
|
80
|
+
fprintf(stderr, "fatal: destination path '%s' already exists and is not an empty directory.\n",
|
81
|
+
path);
|
82
|
+
exit(128);
|
83
|
+
}
|
84
|
+
|
85
|
+
return true;
|
86
|
+
}
|
87
|
+
|
88
|
+
static void cleanup(void)
|
89
|
+
{
|
90
|
+
int rmdir_flags = GIT_RMDIR_REMOVE_FILES;
|
91
|
+
|
92
|
+
cli_progress_abort(&progress);
|
93
|
+
|
94
|
+
if (local_path_exists)
|
95
|
+
rmdir_flags |= GIT_RMDIR_SKIP_ROOT;
|
96
|
+
|
97
|
+
if (!git_fs_path_isdir(local_path))
|
98
|
+
return;
|
99
|
+
|
100
|
+
git_futils_rmdir_r(local_path, NULL, rmdir_flags);
|
101
|
+
}
|
102
|
+
|
103
|
+
static void interrupt_cleanup(void)
|
104
|
+
{
|
105
|
+
cleanup();
|
106
|
+
exit(130);
|
107
|
+
}
|
108
|
+
|
109
|
+
int cmd_clone(int argc, char **argv)
|
110
|
+
{
|
111
|
+
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
|
112
|
+
git_repository *repo = NULL;
|
113
|
+
cli_opt invalid_opt;
|
114
|
+
char *computed_path = NULL;
|
115
|
+
int ret = 0;
|
116
|
+
|
117
|
+
if (cli_opt_parse(&invalid_opt, opts, argv + 1, argc - 1, CLI_OPT_PARSE_GNU))
|
118
|
+
return cli_opt_usage_error(COMMAND_NAME, opts, &invalid_opt);
|
119
|
+
|
120
|
+
if (show_help) {
|
121
|
+
print_help();
|
122
|
+
return 0;
|
123
|
+
}
|
124
|
+
|
125
|
+
if (!remote_path) {
|
126
|
+
ret = cli_error_usage("you must specify a repository to clone");
|
127
|
+
goto done;
|
128
|
+
}
|
129
|
+
|
130
|
+
if (bare)
|
131
|
+
clone_opts.bare = 1;
|
132
|
+
|
133
|
+
if (branch)
|
134
|
+
clone_opts.checkout_branch = branch;
|
135
|
+
|
136
|
+
if (!checkout)
|
137
|
+
clone_opts.checkout_opts.checkout_strategy = GIT_CHECKOUT_NONE;
|
138
|
+
|
139
|
+
if (!local_path)
|
140
|
+
local_path = computed_path = compute_local_path(remote_path);
|
141
|
+
|
142
|
+
local_path_exists = validate_local_path(local_path);
|
143
|
+
|
144
|
+
cli_sighandler_set_interrupt(interrupt_cleanup);
|
145
|
+
|
146
|
+
if (!local_path_exists &&
|
147
|
+
git_futils_mkdir(local_path, 0777, 0) < 0) {
|
148
|
+
ret = cli_error_git();
|
149
|
+
goto done;
|
150
|
+
}
|
151
|
+
|
152
|
+
if (!quiet) {
|
153
|
+
clone_opts.fetch_opts.callbacks.sideband_progress = cli_progress_fetch_sideband;
|
154
|
+
clone_opts.fetch_opts.callbacks.transfer_progress = cli_progress_fetch_transfer;
|
155
|
+
clone_opts.fetch_opts.callbacks.payload = &progress;
|
156
|
+
|
157
|
+
clone_opts.checkout_opts.progress_cb = cli_progress_checkout;
|
158
|
+
clone_opts.checkout_opts.progress_payload = &progress;
|
159
|
+
|
160
|
+
printf("Cloning into '%s'...\n", local_path);
|
161
|
+
}
|
162
|
+
|
163
|
+
if (git_clone(&repo, remote_path, local_path, &clone_opts) < 0) {
|
164
|
+
cleanup();
|
165
|
+
ret = cli_error_git();
|
166
|
+
goto done;
|
167
|
+
}
|
168
|
+
|
169
|
+
cli_progress_finish(&progress);
|
170
|
+
|
171
|
+
done:
|
172
|
+
cli_progress_dispose(&progress);
|
173
|
+
git__free(computed_path);
|
174
|
+
git_repository_free(repo);
|
175
|
+
return ret;
|
176
|
+
}
|
@@ -0,0 +1,135 @@
|
|
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 "cli.h"
|
10
|
+
#include "cmd.h"
|
11
|
+
|
12
|
+
#include "futils.h"
|
13
|
+
|
14
|
+
#define COMMAND_NAME "hash-object"
|
15
|
+
|
16
|
+
static int show_help;
|
17
|
+
static char *type_name;
|
18
|
+
static int write_object, read_stdin, literally;
|
19
|
+
static char **filenames;
|
20
|
+
|
21
|
+
static const cli_opt_spec opts[] = {
|
22
|
+
{ CLI_OPT_TYPE_SWITCH, "help", 0, &show_help, 1,
|
23
|
+
CLI_OPT_USAGE_HIDDEN | CLI_OPT_USAGE_STOP_PARSING, NULL,
|
24
|
+
"display help about the " COMMAND_NAME " command" },
|
25
|
+
|
26
|
+
{ CLI_OPT_TYPE_VALUE, NULL, 't', &type_name, 0,
|
27
|
+
CLI_OPT_USAGE_DEFAULT, "type", "the type of object to hash (default: \"blob\")" },
|
28
|
+
{ CLI_OPT_TYPE_SWITCH, NULL, 'w', &write_object, 1,
|
29
|
+
CLI_OPT_USAGE_DEFAULT, NULL, "write the object to the object database" },
|
30
|
+
{ CLI_OPT_TYPE_SWITCH, "literally", 0, &literally, 1,
|
31
|
+
CLI_OPT_USAGE_DEFAULT, NULL, "do not validate the object contents" },
|
32
|
+
{ CLI_OPT_TYPE_SWITCH, "stdin", 0, &read_stdin, 1,
|
33
|
+
CLI_OPT_USAGE_REQUIRED, NULL, "read content from stdin" },
|
34
|
+
{ CLI_OPT_TYPE_ARGS, "file", 0, &filenames, 0,
|
35
|
+
CLI_OPT_USAGE_CHOICE, "file", "the file (or files) to read and hash" },
|
36
|
+
{ 0 },
|
37
|
+
};
|
38
|
+
|
39
|
+
static void print_help(void)
|
40
|
+
{
|
41
|
+
cli_opt_usage_fprint(stdout, PROGRAM_NAME, COMMAND_NAME, opts);
|
42
|
+
printf("\n");
|
43
|
+
|
44
|
+
printf("Compute the object ID for a given file and optionally write that file\nto the object database.\n");
|
45
|
+
printf("\n");
|
46
|
+
|
47
|
+
printf("Options:\n");
|
48
|
+
|
49
|
+
cli_opt_help_fprint(stdout, opts);
|
50
|
+
}
|
51
|
+
|
52
|
+
static int hash_buf(git_odb *odb, git_str *buf, git_object_t type)
|
53
|
+
{
|
54
|
+
git_oid oid;
|
55
|
+
|
56
|
+
if (!literally) {
|
57
|
+
int valid = 0;
|
58
|
+
|
59
|
+
if (git_object_rawcontent_is_valid(&valid, buf->ptr, buf->size, type) < 0 || !valid)
|
60
|
+
return cli_error_git();
|
61
|
+
}
|
62
|
+
|
63
|
+
if (write_object) {
|
64
|
+
if (git_odb_write(&oid, odb, buf->ptr, buf->size, type) < 0)
|
65
|
+
return cli_error_git();
|
66
|
+
} else {
|
67
|
+
if (git_odb_hash(&oid, buf->ptr, buf->size, type) < 0)
|
68
|
+
return cli_error_git();
|
69
|
+
}
|
70
|
+
|
71
|
+
if (printf("%s\n", git_oid_tostr_s(&oid)) < 0)
|
72
|
+
return cli_error_os();
|
73
|
+
|
74
|
+
return 0;
|
75
|
+
}
|
76
|
+
|
77
|
+
int cmd_hash_object(int argc, char **argv)
|
78
|
+
{
|
79
|
+
git_repository *repo = NULL;
|
80
|
+
git_odb *odb = NULL;
|
81
|
+
git_str buf = GIT_STR_INIT;
|
82
|
+
cli_opt invalid_opt;
|
83
|
+
git_object_t type = GIT_OBJECT_BLOB;
|
84
|
+
char **filename;
|
85
|
+
int ret = 0;
|
86
|
+
|
87
|
+
if (cli_opt_parse(&invalid_opt, opts, argv + 1, argc - 1, CLI_OPT_PARSE_GNU))
|
88
|
+
return cli_opt_usage_error(COMMAND_NAME, opts, &invalid_opt);
|
89
|
+
|
90
|
+
if (show_help) {
|
91
|
+
print_help();
|
92
|
+
return 0;
|
93
|
+
}
|
94
|
+
|
95
|
+
if (type_name && (type = git_object_string2type(type_name)) == GIT_OBJECT_INVALID)
|
96
|
+
return cli_error_usage("invalid object type '%s'", type_name);
|
97
|
+
|
98
|
+
if (write_object &&
|
99
|
+
(git_repository_open_ext(&repo, ".", GIT_REPOSITORY_OPEN_FROM_ENV, NULL) < 0 ||
|
100
|
+
git_repository_odb(&odb, repo) < 0)) {
|
101
|
+
ret = cli_error_git();
|
102
|
+
goto done;
|
103
|
+
}
|
104
|
+
|
105
|
+
/*
|
106
|
+
* TODO: we're reading blobs, we shouldn't pull them all into main
|
107
|
+
* memory, we should just stream them into the odb instead.
|
108
|
+
* (Or create a `git_odb_writefile` API.)
|
109
|
+
*/
|
110
|
+
if (read_stdin) {
|
111
|
+
if (git_futils_readbuffer_fd_full(&buf, fileno(stdin)) < 0) {
|
112
|
+
ret = cli_error_git();
|
113
|
+
goto done;
|
114
|
+
}
|
115
|
+
|
116
|
+
if ((ret = hash_buf(odb, &buf, type)) != 0)
|
117
|
+
goto done;
|
118
|
+
} else {
|
119
|
+
for (filename = filenames; *filename; filename++) {
|
120
|
+
if (git_futils_readbuffer(&buf, *filename) < 0) {
|
121
|
+
ret = cli_error_git();
|
122
|
+
goto done;
|
123
|
+
}
|
124
|
+
|
125
|
+
if ((ret = hash_buf(odb, &buf, type)) != 0)
|
126
|
+
goto done;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
done:
|
131
|
+
git_str_dispose(&buf);
|
132
|
+
git_odb_free(odb);
|
133
|
+
git_repository_free(repo);
|
134
|
+
return ret;
|
135
|
+
}
|
@@ -0,0 +1,86 @@
|
|
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
|
+
#include "cli.h"
|
11
|
+
#include "cmd.h"
|
12
|
+
|
13
|
+
#define COMMAND_NAME "help"
|
14
|
+
|
15
|
+
static char *command;
|
16
|
+
static int show_help;
|
17
|
+
|
18
|
+
static const cli_opt_spec opts[] = {
|
19
|
+
{ CLI_OPT_TYPE_SWITCH, "help", 0, &show_help, 1,
|
20
|
+
CLI_OPT_USAGE_HIDDEN, NULL, "display help about the help command" },
|
21
|
+
{ CLI_OPT_TYPE_ARG, "command", 0, &command, 0,
|
22
|
+
CLI_OPT_USAGE_DEFAULT, "command", "the command to show help for" },
|
23
|
+
{ 0 },
|
24
|
+
};
|
25
|
+
|
26
|
+
static int print_help(void)
|
27
|
+
{
|
28
|
+
cli_opt_usage_fprint(stdout, PROGRAM_NAME, COMMAND_NAME, opts);
|
29
|
+
printf("\n");
|
30
|
+
|
31
|
+
printf("Display help information about %s. If a command is specified, help\n", PROGRAM_NAME);
|
32
|
+
printf("about that command will be shown. Otherwise, general information about\n");
|
33
|
+
printf("%s will be shown, including the commands available.\n", PROGRAM_NAME);
|
34
|
+
|
35
|
+
return 0;
|
36
|
+
}
|
37
|
+
|
38
|
+
static int print_commands(void)
|
39
|
+
{
|
40
|
+
const cli_cmd_spec *cmd;
|
41
|
+
|
42
|
+
cli_opt_usage_fprint(stdout, PROGRAM_NAME, NULL, cli_common_opts);
|
43
|
+
printf("\n");
|
44
|
+
|
45
|
+
printf("These are the %s commands available:\n\n", PROGRAM_NAME);
|
46
|
+
|
47
|
+
for (cmd = cli_cmds; cmd->name; cmd++)
|
48
|
+
printf(" %-11s %s\n", cmd->name, cmd->desc);
|
49
|
+
|
50
|
+
printf("\nSee '%s help <command>' for more information on a specific command.\n", PROGRAM_NAME);
|
51
|
+
|
52
|
+
return 0;
|
53
|
+
}
|
54
|
+
|
55
|
+
int cmd_help(int argc, char **argv)
|
56
|
+
{
|
57
|
+
char *fake_args[2];
|
58
|
+
const cli_cmd_spec *cmd;
|
59
|
+
cli_opt invalid_opt;
|
60
|
+
|
61
|
+
if (cli_opt_parse(&invalid_opt, opts, argv + 1, argc - 1, CLI_OPT_PARSE_GNU))
|
62
|
+
return cli_opt_usage_error(COMMAND_NAME, opts, &invalid_opt);
|
63
|
+
|
64
|
+
/* Show the meta-help */
|
65
|
+
if (show_help)
|
66
|
+
return print_help();
|
67
|
+
|
68
|
+
/* We were not asked to show help for a specific command. */
|
69
|
+
if (!command)
|
70
|
+
return print_commands();
|
71
|
+
|
72
|
+
/*
|
73
|
+
* If we were asked for help for a command (eg, `help <command>`),
|
74
|
+
* delegate back to that command's `--help` option. This lets
|
75
|
+
* commands own their help. Emulate the command-line arguments
|
76
|
+
* that would invoke `<command> --help` and invoke that command.
|
77
|
+
*/
|
78
|
+
fake_args[0] = command;
|
79
|
+
fake_args[1] = "--help";
|
80
|
+
|
81
|
+
if ((cmd = cli_cmd_spec_byname(command)) == NULL)
|
82
|
+
return cli_error("'%s' is not a %s command. See '%s help'.",
|
83
|
+
command, PROGRAM_NAME, PROGRAM_NAME);
|
84
|
+
|
85
|
+
return cmd->fn(2, fake_args);
|
86
|
+
}
|
@@ -0,0 +1,51 @@
|
|
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_error_h__
|
9
|
+
#define CLI_error_h__
|
10
|
+
|
11
|
+
#include "cli.h"
|
12
|
+
#include <stdio.h>
|
13
|
+
|
14
|
+
#define CLI_EXIT_OK 0
|
15
|
+
#define CLI_EXIT_ERROR 1
|
16
|
+
#define CLI_EXIT_OS 128
|
17
|
+
#define CLI_EXIT_GIT 128
|
18
|
+
#define CLI_EXIT_USAGE 129
|
19
|
+
|
20
|
+
#define cli_error__print(fmt) do { \
|
21
|
+
va_list ap; \
|
22
|
+
va_start(ap, fmt); \
|
23
|
+
fprintf(stderr, "%s: ", PROGRAM_NAME); \
|
24
|
+
vfprintf(stderr, fmt, ap); \
|
25
|
+
fprintf(stderr, "\n"); \
|
26
|
+
va_end(ap); \
|
27
|
+
} while(0)
|
28
|
+
|
29
|
+
GIT_INLINE(int) cli_error(const char *fmt, ...)
|
30
|
+
{
|
31
|
+
cli_error__print(fmt);
|
32
|
+
return CLI_EXIT_ERROR;
|
33
|
+
}
|
34
|
+
|
35
|
+
GIT_INLINE(int) cli_error_usage(const char *fmt, ...)
|
36
|
+
{
|
37
|
+
cli_error__print(fmt);
|
38
|
+
return CLI_EXIT_USAGE;
|
39
|
+
}
|
40
|
+
|
41
|
+
GIT_INLINE(int) cli_error_git(void)
|
42
|
+
{
|
43
|
+
const git_error *err = git_error_last();
|
44
|
+
fprintf(stderr, "%s: %s\n", PROGRAM_NAME,
|
45
|
+
err ? err->message : "unknown error");
|
46
|
+
return CLI_EXIT_GIT;
|
47
|
+
}
|
48
|
+
|
49
|
+
#define cli_error_os() (perror(PROGRAM_NAME), CLI_EXIT_OS)
|
50
|
+
|
51
|
+
#endif /* CLI_error_h__ */
|