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
@@ -16,14 +16,14 @@
|
|
16
16
|
#include "git2/commit.h"
|
17
17
|
#include "git2/tree.h"
|
18
18
|
|
19
|
+
#include "checkout.h"
|
19
20
|
#include "remote.h"
|
20
21
|
#include "futils.h"
|
21
22
|
#include "refs.h"
|
22
23
|
#include "fs_path.h"
|
23
24
|
#include "repository.h"
|
24
25
|
#include "odb.h"
|
25
|
-
|
26
|
-
static int clone_local_into(git_repository *repo, git_remote *remote, const git_fetch_options *fetch_opts, const git_checkout_options *co_opts, const char *branch, int link);
|
26
|
+
#include "net.h"
|
27
27
|
|
28
28
|
static int create_branch(
|
29
29
|
git_reference **branch,
|
@@ -336,8 +336,9 @@ static int create_and_configure_origin(
|
|
336
336
|
git_remote_create_cb remote_create = options->remote_cb;
|
337
337
|
void *payload = options->remote_cb_payload;
|
338
338
|
|
339
|
-
/* If the path
|
340
|
-
if (
|
339
|
+
/* If the path is local and exists it should be the absolute path. */
|
340
|
+
if (!git_net_str_is_url(url) && git_fs_path_root(url) < 0 &&
|
341
|
+
git_fs_path_exists(url)) {
|
341
342
|
if (p_realpath(url, buf) == NULL)
|
342
343
|
return -1;
|
343
344
|
|
@@ -360,35 +361,50 @@ on_error:
|
|
360
361
|
return error;
|
361
362
|
}
|
362
363
|
|
363
|
-
static
|
364
|
+
static int should_checkout(
|
365
|
+
bool *out,
|
364
366
|
git_repository *repo,
|
365
367
|
bool is_bare,
|
366
|
-
const
|
368
|
+
const git_clone_options *opts)
|
367
369
|
{
|
368
|
-
|
369
|
-
return false;
|
370
|
+
int error;
|
370
371
|
|
371
|
-
if (!opts
|
372
|
-
|
372
|
+
if (!opts || is_bare ||
|
373
|
+
opts->checkout_opts.checkout_strategy == GIT_CHECKOUT_NONE) {
|
374
|
+
*out = false;
|
375
|
+
return 0;
|
376
|
+
}
|
373
377
|
|
374
|
-
if (
|
375
|
-
return
|
378
|
+
if ((error = git_repository_head_unborn(repo)) < 0)
|
379
|
+
return error;
|
376
380
|
|
377
|
-
|
381
|
+
*out = !error;
|
382
|
+
return 0;
|
378
383
|
}
|
379
384
|
|
380
|
-
static int checkout_branch(
|
385
|
+
static int checkout_branch(
|
386
|
+
git_repository *repo,
|
387
|
+
git_remote *remote,
|
388
|
+
const git_clone_options *opts,
|
389
|
+
const char *reflog_message)
|
381
390
|
{
|
391
|
+
bool checkout;
|
382
392
|
int error;
|
383
393
|
|
384
|
-
if (
|
385
|
-
error = update_head_to_branch(repo, remote,
|
394
|
+
if (opts->checkout_branch)
|
395
|
+
error = update_head_to_branch(repo, remote, opts->checkout_branch, reflog_message);
|
386
396
|
/* Point HEAD to the same ref as the remote's head */
|
387
397
|
else
|
388
398
|
error = update_head_to_remote(repo, remote, reflog_message);
|
389
399
|
|
390
|
-
if (
|
391
|
-
error
|
400
|
+
if (error < 0)
|
401
|
+
return error;
|
402
|
+
|
403
|
+
if ((error = should_checkout(&checkout, repo, git_repository_is_bare(repo), opts)) < 0)
|
404
|
+
return error;
|
405
|
+
|
406
|
+
if (checkout)
|
407
|
+
error = git_checkout_head(repo, &opts->checkout_opts);
|
392
408
|
|
393
409
|
return error;
|
394
410
|
}
|
@@ -396,16 +412,13 @@ static int checkout_branch(git_repository *repo, git_remote *remote, const git_c
|
|
396
412
|
static int clone_into(
|
397
413
|
git_repository *repo,
|
398
414
|
git_remote *_remote,
|
399
|
-
const
|
400
|
-
const git_checkout_options *co_opts,
|
401
|
-
const char *branch)
|
415
|
+
const git_clone_options *opts)
|
402
416
|
{
|
403
|
-
int error;
|
404
417
|
git_str reflog_message = GIT_STR_INIT;
|
405
418
|
git_remote_connect_options connect_opts = GIT_REMOTE_CONNECT_OPTIONS_INIT;
|
406
|
-
git_fetch_options fetch_opts;
|
407
419
|
git_remote *remote;
|
408
420
|
git_oid_t oid_type;
|
421
|
+
int error;
|
409
422
|
|
410
423
|
GIT_ASSERT_ARG(repo);
|
411
424
|
GIT_ASSERT_ARG(_remote);
|
@@ -418,11 +431,7 @@ static int clone_into(
|
|
418
431
|
if ((error = git_remote_dup(&remote, _remote)) < 0)
|
419
432
|
return error;
|
420
433
|
|
421
|
-
|
422
|
-
fetch_opts.update_fetchhead = 0;
|
423
|
-
fetch_opts.download_tags = GIT_REMOTE_DOWNLOAD_TAGS_ALL;
|
424
|
-
|
425
|
-
if ((error = git_remote_connect_options__from_fetch_opts(&connect_opts, remote, &fetch_opts)) < 0)
|
434
|
+
if ((error = git_remote_connect_options__from_fetch_opts(&connect_opts, remote, &opts->fetch_opts)) < 0)
|
426
435
|
goto cleanup;
|
427
436
|
|
428
437
|
git_str_printf(&reflog_message, "clone: from %s", git_remote_url(remote));
|
@@ -440,10 +449,10 @@ static int clone_into(
|
|
440
449
|
(error = git_repository__set_objectformat(repo, oid_type)) < 0)
|
441
450
|
goto cleanup;
|
442
451
|
|
443
|
-
if ((error = git_remote_fetch(remote, NULL, &fetch_opts, git_str_cstr(&reflog_message))) != 0)
|
452
|
+
if ((error = git_remote_fetch(remote, NULL, &opts->fetch_opts, git_str_cstr(&reflog_message))) != 0)
|
444
453
|
goto cleanup;
|
445
454
|
|
446
|
-
error = checkout_branch(repo, remote,
|
455
|
+
error = checkout_branch(repo, remote, opts, git_str_cstr(&reflog_message));
|
447
456
|
|
448
457
|
cleanup:
|
449
458
|
git_remote_free(remote);
|
@@ -453,37 +462,142 @@ cleanup:
|
|
453
462
|
return error;
|
454
463
|
}
|
455
464
|
|
456
|
-
|
465
|
+
static bool can_link(const char *src, const char *dst, int link)
|
466
|
+
{
|
467
|
+
#ifdef GIT_WIN32
|
468
|
+
GIT_UNUSED(src);
|
469
|
+
GIT_UNUSED(dst);
|
470
|
+
GIT_UNUSED(link);
|
471
|
+
return false;
|
472
|
+
#else
|
473
|
+
|
474
|
+
struct stat st_src, st_dst;
|
475
|
+
|
476
|
+
if (!link)
|
477
|
+
return false;
|
478
|
+
|
479
|
+
if (p_stat(src, &st_src) < 0)
|
480
|
+
return false;
|
481
|
+
|
482
|
+
if (p_stat(dst, &st_dst) < 0)
|
483
|
+
return false;
|
484
|
+
|
485
|
+
return st_src.st_dev == st_dst.st_dev;
|
486
|
+
#endif
|
487
|
+
}
|
488
|
+
|
489
|
+
static int clone_local_into(
|
490
|
+
git_repository *repo,
|
491
|
+
git_remote *remote,
|
492
|
+
const git_clone_options *opts)
|
493
|
+
{
|
494
|
+
int error, flags;
|
495
|
+
git_repository *src;
|
496
|
+
git_str src_odb = GIT_STR_INIT, dst_odb = GIT_STR_INIT, src_path = GIT_STR_INIT;
|
497
|
+
git_str reflog_message = GIT_STR_INIT;
|
498
|
+
bool link = (opts && opts->local != GIT_CLONE_LOCAL_NO_LINKS);
|
499
|
+
|
500
|
+
GIT_ASSERT_ARG(repo);
|
501
|
+
GIT_ASSERT_ARG(remote);
|
502
|
+
|
503
|
+
if (!git_repository_is_empty(repo)) {
|
504
|
+
git_error_set(GIT_ERROR_INVALID, "the repository is not empty");
|
505
|
+
return -1;
|
506
|
+
}
|
507
|
+
|
508
|
+
/*
|
509
|
+
* Let's figure out what path we should use for the source
|
510
|
+
* repo, if it's not rooted, the path should be relative to
|
511
|
+
* the repository's worktree/gitdir.
|
512
|
+
*/
|
513
|
+
if ((error = git_fs_path_from_url_or_path(&src_path, git_remote_url(remote))) < 0)
|
514
|
+
return error;
|
515
|
+
|
516
|
+
/* Copy .git/objects/ from the source to the target */
|
517
|
+
if ((error = git_repository_open(&src, git_str_cstr(&src_path))) < 0) {
|
518
|
+
git_str_dispose(&src_path);
|
519
|
+
return error;
|
520
|
+
}
|
521
|
+
|
522
|
+
if (git_repository__item_path(&src_odb, src, GIT_REPOSITORY_ITEM_OBJECTS) < 0 ||
|
523
|
+
git_repository__item_path(&dst_odb, repo, GIT_REPOSITORY_ITEM_OBJECTS) < 0) {
|
524
|
+
error = -1;
|
525
|
+
goto cleanup;
|
526
|
+
}
|
527
|
+
|
528
|
+
flags = 0;
|
529
|
+
if (can_link(git_repository_path(src), git_repository_path(repo), link))
|
530
|
+
flags |= GIT_CPDIR_LINK_FILES;
|
531
|
+
|
532
|
+
error = git_futils_cp_r(git_str_cstr(&src_odb), git_str_cstr(&dst_odb),
|
533
|
+
flags, GIT_OBJECT_DIR_MODE);
|
534
|
+
|
535
|
+
/*
|
536
|
+
* can_link() doesn't catch all variations, so if we hit an
|
537
|
+
* error and did want to link, let's try again without trying
|
538
|
+
* to link.
|
539
|
+
*/
|
540
|
+
if (error < 0 && link) {
|
541
|
+
flags &= ~GIT_CPDIR_LINK_FILES;
|
542
|
+
error = git_futils_cp_r(git_str_cstr(&src_odb), git_str_cstr(&dst_odb),
|
543
|
+
flags, GIT_OBJECT_DIR_MODE);
|
544
|
+
}
|
545
|
+
|
546
|
+
if (error < 0)
|
547
|
+
goto cleanup;
|
548
|
+
|
549
|
+
git_str_printf(&reflog_message, "clone: from %s", git_remote_url(remote));
|
550
|
+
|
551
|
+
if ((error = git_remote_fetch(remote, NULL, &opts->fetch_opts, git_str_cstr(&reflog_message))) != 0)
|
552
|
+
goto cleanup;
|
553
|
+
|
554
|
+
error = checkout_branch(repo, remote, opts, git_str_cstr(&reflog_message));
|
555
|
+
|
556
|
+
cleanup:
|
557
|
+
git_str_dispose(&reflog_message);
|
558
|
+
git_str_dispose(&src_path);
|
559
|
+
git_str_dispose(&src_odb);
|
560
|
+
git_str_dispose(&dst_odb);
|
561
|
+
git_repository_free(src);
|
562
|
+
return error;
|
563
|
+
}
|
564
|
+
|
565
|
+
int git_clone__should_clone_local(
|
566
|
+
bool *out,
|
567
|
+
const char *url_or_path,
|
568
|
+
git_clone_local_t local)
|
457
569
|
{
|
458
570
|
git_str fromurl = GIT_STR_INIT;
|
459
|
-
|
460
|
-
|
571
|
+
|
572
|
+
*out = false;
|
461
573
|
|
462
574
|
if (local == GIT_CLONE_NO_LOCAL)
|
463
575
|
return 0;
|
464
576
|
|
465
|
-
if ((
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
577
|
+
if (git_net_str_is_url(url_or_path)) {
|
578
|
+
/* If GIT_CLONE_LOCAL_AUTO is specified, any url should
|
579
|
+
* be treated as remote */
|
580
|
+
if (local == GIT_CLONE_LOCAL_AUTO ||
|
581
|
+
!git_fs_path_is_local_file_url(url_or_path))
|
582
|
+
return 0;
|
470
583
|
|
471
|
-
|
472
|
-
|
584
|
+
if (git_fs_path_fromurl(&fromurl, url_or_path) < 0)
|
585
|
+
return -1;
|
473
586
|
|
474
|
-
|
475
|
-
|
587
|
+
*out = git_fs_path_isdir(git_str_cstr(&fromurl));
|
588
|
+
git_str_dispose(&fromurl);
|
589
|
+
} else {
|
590
|
+
*out = git_fs_path_isdir(url_or_path);
|
591
|
+
}
|
476
592
|
|
477
|
-
|
478
|
-
git_str_dispose(&fromurl);
|
479
|
-
return is_local;
|
593
|
+
return 0;
|
480
594
|
}
|
481
595
|
|
482
|
-
static int
|
596
|
+
static int clone_repo(
|
483
597
|
git_repository **out,
|
484
598
|
const char *url,
|
485
599
|
const char *local_path,
|
486
|
-
const git_clone_options *
|
600
|
+
const git_clone_options *given_opts,
|
487
601
|
int use_existing)
|
488
602
|
{
|
489
603
|
int error = 0;
|
@@ -497,11 +611,17 @@ static int git__clone(
|
|
497
611
|
GIT_ASSERT_ARG(url);
|
498
612
|
GIT_ASSERT_ARG(local_path);
|
499
613
|
|
500
|
-
if (
|
501
|
-
memcpy(&options,
|
614
|
+
if (given_opts)
|
615
|
+
memcpy(&options, given_opts, sizeof(git_clone_options));
|
502
616
|
|
503
617
|
GIT_ERROR_CHECK_VERSION(&options, GIT_CLONE_OPTIONS_VERSION, "git_clone_options");
|
504
618
|
|
619
|
+
/* enforce some behavior on fetch */
|
620
|
+
options.fetch_opts.update_fetchhead = 0;
|
621
|
+
|
622
|
+
if (!options.fetch_opts.depth)
|
623
|
+
options.fetch_opts.download_tags = GIT_REMOTE_DOWNLOAD_TAGS_ALL;
|
624
|
+
|
505
625
|
/* Only clone to a new directory or an empty directory */
|
506
626
|
if (git_fs_path_exists(local_path) && !use_existing && !git_fs_path_is_empty_dir(local_path)) {
|
507
627
|
git_error_set(GIT_ERROR_INVALID,
|
@@ -522,33 +642,31 @@ static int git__clone(
|
|
522
642
|
return error;
|
523
643
|
|
524
644
|
if (!(error = create_and_configure_origin(&origin, repo, url, &options))) {
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
error
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
error =
|
534
|
-
repo, origin, &options.fetch_opts, &options.checkout_opts,
|
535
|
-
options.checkout_branch);
|
645
|
+
bool clone_local;
|
646
|
+
|
647
|
+
if ((error = git_clone__should_clone_local(&clone_local, url, options.local)) < 0) {
|
648
|
+
git_remote_free(origin);
|
649
|
+
return error;
|
650
|
+
}
|
651
|
+
|
652
|
+
if (clone_local)
|
653
|
+
error = clone_local_into(repo, origin, &options);
|
536
654
|
else
|
537
|
-
error =
|
655
|
+
error = clone_into(repo, origin, &options);
|
538
656
|
|
539
657
|
git_remote_free(origin);
|
540
658
|
}
|
541
659
|
|
542
660
|
if (error != 0) {
|
543
|
-
|
544
|
-
|
661
|
+
git_error *last_error;
|
662
|
+
git_error_save(&last_error);
|
545
663
|
|
546
664
|
git_repository_free(repo);
|
547
665
|
repo = NULL;
|
548
666
|
|
549
667
|
(void)git_futils_rmdir_r(local_path, NULL, rmdir_flags);
|
550
668
|
|
551
|
-
|
669
|
+
git_error_restore(last_error);
|
552
670
|
}
|
553
671
|
|
554
672
|
*out = repo;
|
@@ -559,18 +677,18 @@ int git_clone(
|
|
559
677
|
git_repository **out,
|
560
678
|
const char *url,
|
561
679
|
const char *local_path,
|
562
|
-
const git_clone_options *
|
680
|
+
const git_clone_options *options)
|
563
681
|
{
|
564
|
-
return
|
682
|
+
return clone_repo(out, url, local_path, options, 0);
|
565
683
|
}
|
566
684
|
|
567
685
|
int git_clone__submodule(
|
568
686
|
git_repository **out,
|
569
687
|
const char *url,
|
570
688
|
const char *local_path,
|
571
|
-
const git_clone_options *
|
689
|
+
const git_clone_options *options)
|
572
690
|
{
|
573
|
-
return
|
691
|
+
return clone_repo(out, url, local_path, options, 1);
|
574
692
|
}
|
575
693
|
|
576
694
|
int git_clone_options_init(git_clone_options *opts, unsigned int version)
|
@@ -586,99 +704,3 @@ int git_clone_init_options(git_clone_options *opts, unsigned int version)
|
|
586
704
|
return git_clone_options_init(opts, version);
|
587
705
|
}
|
588
706
|
#endif
|
589
|
-
|
590
|
-
static bool can_link(const char *src, const char *dst, int link)
|
591
|
-
{
|
592
|
-
#ifdef GIT_WIN32
|
593
|
-
GIT_UNUSED(src);
|
594
|
-
GIT_UNUSED(dst);
|
595
|
-
GIT_UNUSED(link);
|
596
|
-
return false;
|
597
|
-
#else
|
598
|
-
|
599
|
-
struct stat st_src, st_dst;
|
600
|
-
|
601
|
-
if (!link)
|
602
|
-
return false;
|
603
|
-
|
604
|
-
if (p_stat(src, &st_src) < 0)
|
605
|
-
return false;
|
606
|
-
|
607
|
-
if (p_stat(dst, &st_dst) < 0)
|
608
|
-
return false;
|
609
|
-
|
610
|
-
return st_src.st_dev == st_dst.st_dev;
|
611
|
-
#endif
|
612
|
-
}
|
613
|
-
|
614
|
-
static int clone_local_into(git_repository *repo, git_remote *remote, const git_fetch_options *fetch_opts, const git_checkout_options *co_opts, const char *branch, int link)
|
615
|
-
{
|
616
|
-
int error, flags;
|
617
|
-
git_repository *src;
|
618
|
-
git_str src_odb = GIT_STR_INIT, dst_odb = GIT_STR_INIT, src_path = GIT_STR_INIT;
|
619
|
-
git_str reflog_message = GIT_STR_INIT;
|
620
|
-
|
621
|
-
GIT_ASSERT_ARG(repo);
|
622
|
-
GIT_ASSERT_ARG(remote);
|
623
|
-
|
624
|
-
if (!git_repository_is_empty(repo)) {
|
625
|
-
git_error_set(GIT_ERROR_INVALID, "the repository is not empty");
|
626
|
-
return -1;
|
627
|
-
}
|
628
|
-
|
629
|
-
/*
|
630
|
-
* Let's figure out what path we should use for the source
|
631
|
-
* repo, if it's not rooted, the path should be relative to
|
632
|
-
* the repository's worktree/gitdir.
|
633
|
-
*/
|
634
|
-
if ((error = git_fs_path_from_url_or_path(&src_path, git_remote_url(remote))) < 0)
|
635
|
-
return error;
|
636
|
-
|
637
|
-
/* Copy .git/objects/ from the source to the target */
|
638
|
-
if ((error = git_repository_open(&src, git_str_cstr(&src_path))) < 0) {
|
639
|
-
git_str_dispose(&src_path);
|
640
|
-
return error;
|
641
|
-
}
|
642
|
-
|
643
|
-
if (git_repository__item_path(&src_odb, src, GIT_REPOSITORY_ITEM_OBJECTS) < 0 ||
|
644
|
-
git_repository__item_path(&dst_odb, repo, GIT_REPOSITORY_ITEM_OBJECTS) < 0) {
|
645
|
-
error = -1;
|
646
|
-
goto cleanup;
|
647
|
-
}
|
648
|
-
|
649
|
-
flags = 0;
|
650
|
-
if (can_link(git_repository_path(src), git_repository_path(repo), link))
|
651
|
-
flags |= GIT_CPDIR_LINK_FILES;
|
652
|
-
|
653
|
-
error = git_futils_cp_r(git_str_cstr(&src_odb), git_str_cstr(&dst_odb),
|
654
|
-
flags, GIT_OBJECT_DIR_MODE);
|
655
|
-
|
656
|
-
/*
|
657
|
-
* can_link() doesn't catch all variations, so if we hit an
|
658
|
-
* error and did want to link, let's try again without trying
|
659
|
-
* to link.
|
660
|
-
*/
|
661
|
-
if (error < 0 && link) {
|
662
|
-
flags &= ~GIT_CPDIR_LINK_FILES;
|
663
|
-
error = git_futils_cp_r(git_str_cstr(&src_odb), git_str_cstr(&dst_odb),
|
664
|
-
flags, GIT_OBJECT_DIR_MODE);
|
665
|
-
}
|
666
|
-
|
667
|
-
if (error < 0)
|
668
|
-
goto cleanup;
|
669
|
-
|
670
|
-
git_str_printf(&reflog_message, "clone: from %s", git_remote_url(remote));
|
671
|
-
|
672
|
-
if ((error = git_remote_fetch(remote, NULL, fetch_opts, git_str_cstr(&reflog_message))) != 0)
|
673
|
-
goto cleanup;
|
674
|
-
|
675
|
-
error = checkout_branch(repo, remote, co_opts, branch, git_str_cstr(&reflog_message));
|
676
|
-
|
677
|
-
cleanup:
|
678
|
-
git_str_dispose(&reflog_message);
|
679
|
-
git_str_dispose(&src_path);
|
680
|
-
git_str_dispose(&src_odb);
|
681
|
-
git_str_dispose(&dst_odb);
|
682
|
-
git_repository_free(src);
|
683
|
-
return error;
|
684
|
-
}
|
@@ -15,6 +15,9 @@ extern int git_clone__submodule(git_repository **out,
|
|
15
15
|
const char *url, const char *local_path,
|
16
16
|
const git_clone_options *_options);
|
17
17
|
|
18
|
-
extern int git_clone__should_clone_local(
|
18
|
+
extern int git_clone__should_clone_local(
|
19
|
+
bool *out,
|
20
|
+
const char *url,
|
21
|
+
git_clone_local_t local);
|
19
22
|
|
20
23
|
#endif
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include "object.h"
|
23
23
|
#include "array.h"
|
24
24
|
#include "oidarray.h"
|
25
|
+
#include "grafts.h"
|
25
26
|
|
26
27
|
void git_commit__free(void *_commit)
|
27
28
|
{
|
@@ -427,10 +428,6 @@ static int commit_parse(
|
|
427
428
|
buffer += tree_len;
|
428
429
|
}
|
429
430
|
|
430
|
-
/*
|
431
|
-
* TODO: commit grafts!
|
432
|
-
*/
|
433
|
-
|
434
431
|
while (git_object__parse_oid_header(&parent_id,
|
435
432
|
&buffer, buffer_end, "parent ",
|
436
433
|
opts->oid_type) == 0) {
|
@@ -532,16 +529,41 @@ int git_commit__parse_raw(
|
|
532
529
|
return commit_parse(commit, data, size, &parse_options);
|
533
530
|
}
|
534
531
|
|
532
|
+
static int assign_commit_parents_from_graft(git_commit *commit, git_commit_graft *graft) {
|
533
|
+
size_t idx;
|
534
|
+
git_oid *oid;
|
535
|
+
|
536
|
+
git_array_clear(commit->parent_ids);
|
537
|
+
git_array_init_to_size(commit->parent_ids, git_array_size(graft->parents));
|
538
|
+
git_array_foreach(graft->parents, idx, oid) {
|
539
|
+
git_oid *id = git_array_alloc(commit->parent_ids);
|
540
|
+
GIT_ERROR_CHECK_ALLOC(id);
|
541
|
+
|
542
|
+
git_oid_cpy(id, oid);
|
543
|
+
}
|
544
|
+
|
545
|
+
return 0;
|
546
|
+
}
|
547
|
+
|
535
548
|
int git_commit__parse_ext(
|
536
549
|
git_commit *commit,
|
537
550
|
git_odb_object *odb_obj,
|
538
551
|
git_commit__parse_options *parse_opts)
|
539
552
|
{
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
553
|
+
git_repository *repo = git_object_owner((git_object *)commit);
|
554
|
+
git_commit_graft *graft;
|
555
|
+
int error;
|
556
|
+
|
557
|
+
if ((error = commit_parse(commit, git_odb_object_data(odb_obj),
|
558
|
+
git_odb_object_size(odb_obj), parse_opts)) < 0)
|
559
|
+
return error;
|
560
|
+
|
561
|
+
/* Perform necessary grafts */
|
562
|
+
if (git_grafts_get(&graft, repo->grafts, git_odb_object_id(odb_obj)) != 0 &&
|
563
|
+
git_grafts_get(&graft, repo->shallow_grafts, git_odb_object_id(odb_obj)) != 0)
|
564
|
+
return 0;
|
565
|
+
|
566
|
+
return assign_commit_parents_from_graft(commit, graft);
|
545
567
|
}
|
546
568
|
|
547
569
|
#define GIT_COMMIT_GETTER(_rvalue, _name, _return, _invalid) \
|
@@ -1064,6 +1086,83 @@ cleanup:
|
|
1064
1086
|
return error;
|
1065
1087
|
}
|
1066
1088
|
|
1089
|
+
int git_commit_create_from_stage(
|
1090
|
+
git_oid *out,
|
1091
|
+
git_repository *repo,
|
1092
|
+
const char *message,
|
1093
|
+
const git_commit_create_options *given_opts)
|
1094
|
+
{
|
1095
|
+
git_commit_create_options opts = GIT_COMMIT_CREATE_OPTIONS_INIT;
|
1096
|
+
git_signature *default_signature = NULL;
|
1097
|
+
const git_signature *author, *committer;
|
1098
|
+
git_index *index = NULL;
|
1099
|
+
git_diff *diff = NULL;
|
1100
|
+
git_oid tree_id;
|
1101
|
+
git_tree *head_tree = NULL, *tree = NULL;
|
1102
|
+
git_commitarray parents = { 0 };
|
1103
|
+
int error = -1;
|
1104
|
+
|
1105
|
+
GIT_ASSERT_ARG(out && repo);
|
1106
|
+
|
1107
|
+
if (given_opts)
|
1108
|
+
memcpy(&opts, given_opts, sizeof(git_commit_create_options));
|
1109
|
+
|
1110
|
+
author = opts.author;
|
1111
|
+
committer = opts.committer;
|
1112
|
+
|
1113
|
+
if (!author || !committer) {
|
1114
|
+
if (git_signature_default(&default_signature, repo) < 0)
|
1115
|
+
goto done;
|
1116
|
+
|
1117
|
+
if (!author)
|
1118
|
+
author = default_signature;
|
1119
|
+
|
1120
|
+
if (!committer)
|
1121
|
+
committer = default_signature;
|
1122
|
+
}
|
1123
|
+
|
1124
|
+
if (git_repository_index(&index, repo) < 0)
|
1125
|
+
goto done;
|
1126
|
+
|
1127
|
+
if (!opts.allow_empty_commit) {
|
1128
|
+
error = git_repository_head_tree(&head_tree, repo);
|
1129
|
+
|
1130
|
+
if (error && error != GIT_EUNBORNBRANCH)
|
1131
|
+
goto done;
|
1132
|
+
|
1133
|
+
error = -1;
|
1134
|
+
|
1135
|
+
if (git_diff_tree_to_index(&diff, repo, head_tree, index, NULL) < 0)
|
1136
|
+
goto done;
|
1137
|
+
|
1138
|
+
if (git_diff_num_deltas(diff) == 0) {
|
1139
|
+
git_error_set(GIT_ERROR_REPOSITORY,
|
1140
|
+
"no changes are staged for commit");
|
1141
|
+
error = GIT_EUNCHANGED;
|
1142
|
+
goto done;
|
1143
|
+
}
|
1144
|
+
}
|
1145
|
+
|
1146
|
+
if (git_index_write_tree(&tree_id, index) < 0 ||
|
1147
|
+
git_tree_lookup(&tree, repo, &tree_id) < 0 ||
|
1148
|
+
git_repository_commit_parents(&parents, repo) < 0)
|
1149
|
+
goto done;
|
1150
|
+
|
1151
|
+
error = git_commit_create(out, repo, "HEAD", author, committer,
|
1152
|
+
opts.message_encoding, message,
|
1153
|
+
tree, parents.count,
|
1154
|
+
(const git_commit **)parents.commits);
|
1155
|
+
|
1156
|
+
done:
|
1157
|
+
git_commitarray_dispose(&parents);
|
1158
|
+
git_signature_free(default_signature);
|
1159
|
+
git_tree_free(tree);
|
1160
|
+
git_tree_free(head_tree);
|
1161
|
+
git_diff_free(diff);
|
1162
|
+
git_index_free(index);
|
1163
|
+
return error;
|
1164
|
+
}
|
1165
|
+
|
1067
1166
|
int git_commit_committer_with_mailmap(
|
1068
1167
|
git_signature **out, const git_commit *commit, const git_mailmap *mailmap)
|
1069
1168
|
{
|
@@ -1075,3 +1174,18 @@ int git_commit_author_with_mailmap(
|
|
1075
1174
|
{
|
1076
1175
|
return git_mailmap_resolve_signature(out, mailmap, commit->author);
|
1077
1176
|
}
|
1177
|
+
|
1178
|
+
void git_commitarray_dispose(git_commitarray *array)
|
1179
|
+
{
|
1180
|
+
size_t i;
|
1181
|
+
|
1182
|
+
if (array == NULL)
|
1183
|
+
return;
|
1184
|
+
|
1185
|
+
for (i = 0; i < array->count; i++)
|
1186
|
+
git_commit_free(array->commits[i]);
|
1187
|
+
|
1188
|
+
git__free((git_commit **)array->commits);
|
1189
|
+
|
1190
|
+
memset(array, 0, sizeof(*array));
|
1191
|
+
}
|