rugged 1.0.0 → 1.2.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/LICENSE +1 -0
- data/README.md +3 -3
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_commit.c +1 -1
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_remote.c +32 -2
- data/ext/rugged/rugged_repo.c +13 -3
- data/lib/rugged/commit.rb +17 -4
- data/lib/rugged/repository.rb +7 -8
- data/lib/rugged/submodule_collection.rb +4 -4
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +41 -74
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
- data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
- data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
- data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
- data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
- data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
- data/vendor/libgit2/deps/pcre/LICENCE +93 -0
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
- data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
- data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
- data/vendor/libgit2/deps/zlib/deflate.c +1 -0
- data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
- data/vendor/libgit2/include/git2/apply.h +2 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +95 -42
- data/vendor/libgit2/include/git2/blob.h +31 -3
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +33 -6
- data/vendor/libgit2/include/git2/config.h +1 -1
- data/vendor/libgit2/include/git2/deprecated.h +248 -8
- data/vendor/libgit2/include/git2/diff.h +35 -20
- data/vendor/libgit2/include/git2/errors.h +8 -7
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +4 -5
- data/vendor/libgit2/include/git2/indexer.h +2 -1
- data/vendor/libgit2/include/git2/odb.h +44 -20
- data/vendor/libgit2/include/git2/pack.h +1 -1
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +9 -5
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/repository.h +95 -52
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/strarray.h +6 -10
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/transport.h +1 -1
- data/vendor/libgit2/include/git2/tree.h +2 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +77 -44
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +21 -8
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/assert_safe.h +58 -0
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +92 -42
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +44 -40
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +28 -15
- data/vendor/libgit2/src/blame_git.c +6 -3
- data/vendor/libgit2/src/blob.c +46 -24
- data/vendor/libgit2/src/branch.c +87 -37
- data/vendor/libgit2/src/buffer.c +339 -27
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +3 -24
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +97 -98
- data/vendor/libgit2/src/cherrypick.c +8 -2
- data/vendor/libgit2/src/clone.c +104 -29
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +26 -2
- data/vendor/libgit2/src/config.c +40 -22
- data/vendor/libgit2/src/config_cache.c +9 -4
- data/vendor/libgit2/src/config_entries.c +35 -27
- data/vendor/libgit2/src/config_file.c +25 -8
- data/vendor/libgit2/src/config_parse.c +5 -7
- data/vendor/libgit2/src/config_snapshot.c +2 -1
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +11 -4
- data/vendor/libgit2/src/diff.c +23 -19
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +5 -7
- data/vendor/libgit2/src/diff_generate.c +56 -28
- data/vendor/libgit2/src/diff_parse.c +2 -3
- data/vendor/libgit2/src/diff_print.c +81 -65
- data/vendor/libgit2/src/diff_stats.c +19 -16
- data/vendor/libgit2/src/diff_tform.c +13 -13
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +26 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +7 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +209 -113
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +8 -8
- data/vendor/libgit2/src/futils.h +4 -4
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/idxmap.c +0 -22
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +126 -84
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +60 -36
- data/vendor/libgit2/src/integer.h +79 -2
- data/vendor/libgit2/src/iterator.c +40 -28
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +108 -46
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +15 -9
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +879 -0
- data/vendor/libgit2/src/midx.h +110 -0
- data/vendor/libgit2/src/mwindow.c +214 -95
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +133 -4
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +24 -15
- data/vendor/libgit2/src/odb.c +298 -57
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +31 -21
- data/vendor/libgit2/src/odb_mempack.c +3 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +7 -4
- data/vendor/libgit2/src/pack-objects.c +83 -69
- data/vendor/libgit2/src/pack.c +383 -150
- data/vendor/libgit2/src/pack.h +44 -9
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +3 -5
- data/vendor/libgit2/src/patch_parse.c +6 -3
- data/vendor/libgit2/src/path.c +102 -57
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +12 -11
- data/vendor/libgit2/src/pool.c +34 -22
- data/vendor/libgit2/src/pool.h +9 -1
- data/vendor/libgit2/src/posix.c +43 -12
- data/vendor/libgit2/src/posix.h +9 -0
- data/vendor/libgit2/src/proxy.c +2 -0
- data/vendor/libgit2/src/push.c +2 -0
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +95 -49
- data/vendor/libgit2/src/refdb.c +165 -13
- data/vendor/libgit2/src/refdb.h +69 -0
- data/vendor/libgit2/src/refdb_fs.c +144 -152
- data/vendor/libgit2/src/reflog.c +21 -20
- data/vendor/libgit2/src/refs.c +151 -231
- data/vendor/libgit2/src/refs.h +2 -20
- data/vendor/libgit2/src/refspec.c +80 -44
- data/vendor/libgit2/src/regexp.c +2 -2
- data/vendor/libgit2/src/remote.c +312 -121
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +351 -189
- data/vendor/libgit2/src/repository.h +23 -29
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +8 -2
- data/vendor/libgit2/src/revparse.c +19 -13
- data/vendor/libgit2/src/revwalk.c +35 -20
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.c +2 -3
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +7 -3
- data/vendor/libgit2/src/status.c +9 -4
- data/vendor/libgit2/src/strarray.c +64 -0
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +113 -207
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +10 -9
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +134 -66
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +8 -26
- data/vendor/libgit2/src/sysdir.h +0 -11
- data/vendor/libgit2/src/tag.c +49 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +21 -9
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +17 -7
- data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +84 -42
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +5 -5
- data/vendor/libgit2/src/transports/smart.c +14 -9
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +156 -88
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/posix.h +16 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +74 -183
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/git2.rc +18 -3
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +23 -25
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +77 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +37 -15
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +56 -38
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
- data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -361
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -246
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
data/vendor/libgit2/src/tree.c
CHANGED
|
@@ -54,7 +54,7 @@ GIT_INLINE(git_filemode_t) normalize_filemode(git_filemode_t filemode)
|
|
|
54
54
|
static int valid_entry_name(git_repository *repo, const char *filename)
|
|
55
55
|
{
|
|
56
56
|
return *filename != '\0' &&
|
|
57
|
-
|
|
57
|
+
git_path_validate(repo, filename, 0,
|
|
58
58
|
GIT_PATH_REJECT_TRAVERSAL | GIT_PATH_REJECT_DOT_GIT | GIT_PATH_REJECT_SLASH);
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -228,7 +228,7 @@ int git_tree_entry_dup(git_tree_entry **dest, const git_tree_entry *source)
|
|
|
228
228
|
{
|
|
229
229
|
git_tree_entry *cpy;
|
|
230
230
|
|
|
231
|
-
|
|
231
|
+
GIT_ASSERT_ARG(source);
|
|
232
232
|
|
|
233
233
|
cpy = alloc_entry(source->filename, source->filename_len, source->oid);
|
|
234
234
|
if (cpy == NULL)
|
|
@@ -261,19 +261,19 @@ git_filemode_t git_tree_entry_filemode_raw(const git_tree_entry *entry)
|
|
|
261
261
|
|
|
262
262
|
const char *git_tree_entry_name(const git_tree_entry *entry)
|
|
263
263
|
{
|
|
264
|
-
|
|
264
|
+
GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
|
|
265
265
|
return entry->filename;
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
const git_oid *git_tree_entry_id(const git_tree_entry *entry)
|
|
269
269
|
{
|
|
270
|
-
|
|
270
|
+
GIT_ASSERT_ARG_WITH_RETVAL(entry, NULL);
|
|
271
271
|
return entry->oid;
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
git_object_t git_tree_entry_type(const git_tree_entry *entry)
|
|
275
275
|
{
|
|
276
|
-
|
|
276
|
+
GIT_ASSERT_ARG_WITH_RETVAL(entry, GIT_OBJECT_INVALID);
|
|
277
277
|
|
|
278
278
|
if (S_ISGITLINK(entry->attr))
|
|
279
279
|
return GIT_OBJECT_COMMIT;
|
|
@@ -288,7 +288,9 @@ int git_tree_entry_to_object(
|
|
|
288
288
|
git_repository *repo,
|
|
289
289
|
const git_tree_entry *entry)
|
|
290
290
|
{
|
|
291
|
-
|
|
291
|
+
GIT_ASSERT_ARG(entry);
|
|
292
|
+
GIT_ASSERT_ARG(object_out);
|
|
293
|
+
|
|
292
294
|
return git_object_lookup(object_out, repo, entry->oid, GIT_OBJECT_ANY);
|
|
293
295
|
}
|
|
294
296
|
|
|
@@ -306,7 +308,8 @@ static const git_tree_entry *entry_fromname(
|
|
|
306
308
|
const git_tree_entry *git_tree_entry_byname(
|
|
307
309
|
const git_tree *tree, const char *filename)
|
|
308
310
|
{
|
|
309
|
-
|
|
311
|
+
GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
|
|
312
|
+
GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
|
|
310
313
|
|
|
311
314
|
return entry_fromname(tree, filename, strlen(filename));
|
|
312
315
|
}
|
|
@@ -314,7 +317,7 @@ const git_tree_entry *git_tree_entry_byname(
|
|
|
314
317
|
const git_tree_entry *git_tree_entry_byindex(
|
|
315
318
|
const git_tree *tree, size_t idx)
|
|
316
319
|
{
|
|
317
|
-
|
|
320
|
+
GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
|
|
318
321
|
return git_array_get(tree->entries, idx);
|
|
319
322
|
}
|
|
320
323
|
|
|
@@ -324,7 +327,7 @@ const git_tree_entry *git_tree_entry_byid(
|
|
|
324
327
|
size_t i;
|
|
325
328
|
const git_tree_entry *e;
|
|
326
329
|
|
|
327
|
-
|
|
330
|
+
GIT_ASSERT_ARG_WITH_RETVAL(tree, NULL);
|
|
328
331
|
|
|
329
332
|
git_array_foreach(tree->entries, i, e) {
|
|
330
333
|
if (memcmp(&e->oid->id, &id->id, sizeof(id->id)) == 0)
|
|
@@ -336,13 +339,13 @@ const git_tree_entry *git_tree_entry_byid(
|
|
|
336
339
|
|
|
337
340
|
size_t git_tree_entrycount(const git_tree *tree)
|
|
338
341
|
{
|
|
339
|
-
|
|
342
|
+
GIT_ASSERT_ARG_WITH_RETVAL(tree, 0);
|
|
340
343
|
return tree->entries.size;
|
|
341
344
|
}
|
|
342
345
|
|
|
343
346
|
size_t git_treebuilder_entrycount(git_treebuilder *bld)
|
|
344
347
|
{
|
|
345
|
-
|
|
348
|
+
GIT_ASSERT_ARG_WITH_RETVAL(bld, 0);
|
|
346
349
|
|
|
347
350
|
return git_strmap_size(bld->map);
|
|
348
351
|
}
|
|
@@ -489,6 +492,56 @@ static int check_entry(git_repository *repo, const char *filename, const git_oid
|
|
|
489
492
|
return 0;
|
|
490
493
|
}
|
|
491
494
|
|
|
495
|
+
static int git_treebuilder__write_with_buffer(
|
|
496
|
+
git_oid *oid,
|
|
497
|
+
git_treebuilder *bld,
|
|
498
|
+
git_buf *buf)
|
|
499
|
+
{
|
|
500
|
+
int error = 0;
|
|
501
|
+
size_t i, entrycount;
|
|
502
|
+
git_odb *odb;
|
|
503
|
+
git_tree_entry *entry;
|
|
504
|
+
git_vector entries = GIT_VECTOR_INIT;
|
|
505
|
+
|
|
506
|
+
git_buf_clear(buf);
|
|
507
|
+
|
|
508
|
+
entrycount = git_strmap_size(bld->map);
|
|
509
|
+
if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
|
|
510
|
+
goto out;
|
|
511
|
+
|
|
512
|
+
if (buf->asize == 0 &&
|
|
513
|
+
(error = git_buf_grow(buf, entrycount * 72)) < 0)
|
|
514
|
+
goto out;
|
|
515
|
+
|
|
516
|
+
git_strmap_foreach_value(bld->map, entry, {
|
|
517
|
+
if ((error = git_vector_insert(&entries, entry)) < 0)
|
|
518
|
+
goto out;
|
|
519
|
+
});
|
|
520
|
+
|
|
521
|
+
git_vector_sort(&entries);
|
|
522
|
+
|
|
523
|
+
for (i = 0; i < entries.length && !error; ++i) {
|
|
524
|
+
entry = git_vector_get(&entries, i);
|
|
525
|
+
|
|
526
|
+
git_buf_printf(buf, "%o ", entry->attr);
|
|
527
|
+
git_buf_put(buf, entry->filename, entry->filename_len + 1);
|
|
528
|
+
git_buf_put(buf, (char *)entry->oid->id, GIT_OID_RAWSZ);
|
|
529
|
+
|
|
530
|
+
if (git_buf_oom(buf)) {
|
|
531
|
+
error = -1;
|
|
532
|
+
goto out;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
|
|
537
|
+
error = git_odb_write(oid, odb, buf->ptr, buf->size, GIT_OBJECT_TREE);
|
|
538
|
+
|
|
539
|
+
out:
|
|
540
|
+
git_vector_free(&entries);
|
|
541
|
+
|
|
542
|
+
return error;
|
|
543
|
+
}
|
|
544
|
+
|
|
492
545
|
static int append_entry(
|
|
493
546
|
git_treebuilder *bld,
|
|
494
547
|
const char *filename,
|
|
@@ -607,7 +660,7 @@ static int write_tree(
|
|
|
607
660
|
}
|
|
608
661
|
}
|
|
609
662
|
|
|
610
|
-
if (
|
|
663
|
+
if (git_treebuilder__write_with_buffer(oid, bld, shared_buf) < 0)
|
|
611
664
|
goto on_error;
|
|
612
665
|
|
|
613
666
|
git_treebuilder_free(bld);
|
|
@@ -626,7 +679,9 @@ int git_tree__write_index(
|
|
|
626
679
|
git_buf shared_buf = GIT_BUF_INIT;
|
|
627
680
|
bool old_ignore_case = false;
|
|
628
681
|
|
|
629
|
-
|
|
682
|
+
GIT_ASSERT_ARG(oid);
|
|
683
|
+
GIT_ASSERT_ARG(index);
|
|
684
|
+
GIT_ASSERT_ARG(repo);
|
|
630
685
|
|
|
631
686
|
if (git_index_has_conflicts(index)) {
|
|
632
687
|
git_error_set(GIT_ERROR_INDEX,
|
|
@@ -680,7 +735,8 @@ int git_treebuilder_new(
|
|
|
680
735
|
git_treebuilder *bld;
|
|
681
736
|
size_t i;
|
|
682
737
|
|
|
683
|
-
|
|
738
|
+
GIT_ASSERT_ARG(builder_p);
|
|
739
|
+
GIT_ASSERT_ARG(repo);
|
|
684
740
|
|
|
685
741
|
bld = git__calloc(1, sizeof(git_treebuilder));
|
|
686
742
|
GIT_ERROR_CHECK_ALLOC(bld);
|
|
@@ -723,7 +779,9 @@ int git_treebuilder_insert(
|
|
|
723
779
|
git_tree_entry *entry;
|
|
724
780
|
int error;
|
|
725
781
|
|
|
726
|
-
|
|
782
|
+
GIT_ASSERT_ARG(bld);
|
|
783
|
+
GIT_ASSERT_ARG(id);
|
|
784
|
+
GIT_ASSERT_ARG(filename);
|
|
727
785
|
|
|
728
786
|
if ((error = check_entry(bld->repo, filename, id, filemode)) < 0)
|
|
729
787
|
return error;
|
|
@@ -751,7 +809,9 @@ int git_treebuilder_insert(
|
|
|
751
809
|
|
|
752
810
|
static git_tree_entry *treebuilder_get(git_treebuilder *bld, const char *filename)
|
|
753
811
|
{
|
|
754
|
-
|
|
812
|
+
GIT_ASSERT_ARG_WITH_RETVAL(bld, NULL);
|
|
813
|
+
GIT_ASSERT_ARG_WITH_RETVAL(filename, NULL);
|
|
814
|
+
|
|
755
815
|
return git_strmap_get(bld->map, filename);
|
|
756
816
|
}
|
|
757
817
|
|
|
@@ -775,63 +835,10 @@ int git_treebuilder_remove(git_treebuilder *bld, const char *filename)
|
|
|
775
835
|
|
|
776
836
|
int git_treebuilder_write(git_oid *oid, git_treebuilder *bld)
|
|
777
837
|
{
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
error = git_treebuilder_write_with_buffer(oid, bld, &buffer);
|
|
782
|
-
|
|
783
|
-
git_buf_dispose(&buffer);
|
|
784
|
-
return error;
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_buf *tree)
|
|
788
|
-
{
|
|
789
|
-
int error = 0;
|
|
790
|
-
size_t i, entrycount;
|
|
791
|
-
git_odb *odb;
|
|
792
|
-
git_tree_entry *entry;
|
|
793
|
-
git_vector entries = GIT_VECTOR_INIT;
|
|
794
|
-
|
|
795
|
-
assert(bld);
|
|
796
|
-
assert(tree);
|
|
797
|
-
|
|
798
|
-
git_buf_clear(tree);
|
|
799
|
-
|
|
800
|
-
entrycount = git_strmap_size(bld->map);
|
|
801
|
-
if ((error = git_vector_init(&entries, entrycount, entry_sort_cmp)) < 0)
|
|
802
|
-
goto out;
|
|
803
|
-
|
|
804
|
-
if (tree->asize == 0 &&
|
|
805
|
-
(error = git_buf_grow(tree, entrycount * 72)) < 0)
|
|
806
|
-
goto out;
|
|
807
|
-
|
|
808
|
-
git_strmap_foreach_value(bld->map, entry, {
|
|
809
|
-
if ((error = git_vector_insert(&entries, entry)) < 0)
|
|
810
|
-
goto out;
|
|
811
|
-
});
|
|
812
|
-
|
|
813
|
-
git_vector_sort(&entries);
|
|
838
|
+
GIT_ASSERT_ARG(oid);
|
|
839
|
+
GIT_ASSERT_ARG(bld);
|
|
814
840
|
|
|
815
|
-
|
|
816
|
-
entry = git_vector_get(&entries, i);
|
|
817
|
-
|
|
818
|
-
git_buf_printf(tree, "%o ", entry->attr);
|
|
819
|
-
git_buf_put(tree, entry->filename, entry->filename_len + 1);
|
|
820
|
-
git_buf_put(tree, (char *)entry->oid->id, GIT_OID_RAWSZ);
|
|
821
|
-
|
|
822
|
-
if (git_buf_oom(tree)) {
|
|
823
|
-
error = -1;
|
|
824
|
-
goto out;
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
if ((error = git_repository_odb__weakptr(&odb, bld->repo)) == 0)
|
|
829
|
-
error = git_odb_write(oid, odb, tree->ptr, tree->size, GIT_OBJECT_TREE);
|
|
830
|
-
|
|
831
|
-
out:
|
|
832
|
-
git_vector_free(&entries);
|
|
833
|
-
|
|
834
|
-
return error;
|
|
841
|
+
return git_treebuilder__write_with_buffer(oid, bld, &bld->write_cache);
|
|
835
842
|
}
|
|
836
843
|
|
|
837
844
|
int git_treebuilder_filter(
|
|
@@ -842,7 +849,8 @@ int git_treebuilder_filter(
|
|
|
842
849
|
const char *filename;
|
|
843
850
|
git_tree_entry *entry;
|
|
844
851
|
|
|
845
|
-
|
|
852
|
+
GIT_ASSERT_ARG(bld);
|
|
853
|
+
GIT_ASSERT_ARG(filter);
|
|
846
854
|
|
|
847
855
|
git_strmap_foreach(bld->map, filename, entry, {
|
|
848
856
|
if (filter(entry, payload)) {
|
|
@@ -858,7 +866,7 @@ int git_treebuilder_clear(git_treebuilder *bld)
|
|
|
858
866
|
{
|
|
859
867
|
git_tree_entry *e;
|
|
860
868
|
|
|
861
|
-
|
|
869
|
+
GIT_ASSERT_ARG(bld);
|
|
862
870
|
|
|
863
871
|
git_strmap_foreach_value(bld->map, e, git_tree_entry_free(e));
|
|
864
872
|
git_strmap_clear(bld->map);
|
|
@@ -871,6 +879,7 @@ void git_treebuilder_free(git_treebuilder *bld)
|
|
|
871
879
|
if (bld == NULL)
|
|
872
880
|
return;
|
|
873
881
|
|
|
882
|
+
git_buf_dispose(&bld->write_cache);
|
|
874
883
|
git_treebuilder_clear(bld);
|
|
875
884
|
git_strmap_free(bld->map);
|
|
876
885
|
git__free(bld);
|
|
@@ -1174,10 +1183,10 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
|
|
|
1174
1183
|
|
|
1175
1184
|
for (j = 0; j < steps_up; j++) {
|
|
1176
1185
|
tree_stack_entry *current, *popped = git_array_pop(stack);
|
|
1177
|
-
|
|
1186
|
+
GIT_ASSERT(popped);
|
|
1178
1187
|
|
|
1179
1188
|
current = git_array_last(stack);
|
|
1180
|
-
|
|
1189
|
+
GIT_ASSERT(current);
|
|
1181
1190
|
|
|
1182
1191
|
if ((error = create_popped_tree(current, popped, &component)) < 0)
|
|
1183
1192
|
goto cleanup;
|
|
@@ -1242,8 +1251,9 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
|
|
|
1242
1251
|
}
|
|
1243
1252
|
case GIT_TREE_UPDATE_REMOVE:
|
|
1244
1253
|
{
|
|
1254
|
+
tree_stack_entry *last = git_array_last(stack);
|
|
1245
1255
|
char *basename = git_path_basename(update->path);
|
|
1246
|
-
error = git_treebuilder_remove(
|
|
1256
|
+
error = git_treebuilder_remove(last->bld, basename);
|
|
1247
1257
|
git__free(basename);
|
|
1248
1258
|
break;
|
|
1249
1259
|
}
|
|
@@ -1295,3 +1305,16 @@ cleanup:
|
|
|
1295
1305
|
git_vector_free(&entries);
|
|
1296
1306
|
return error;
|
|
1297
1307
|
}
|
|
1308
|
+
|
|
1309
|
+
/* Deprecated Functions */
|
|
1310
|
+
|
|
1311
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
1312
|
+
|
|
1313
|
+
int git_treebuilder_write_with_buffer(git_oid *oid, git_treebuilder *bld, git_buf *buf)
|
|
1314
|
+
{
|
|
1315
|
+
GIT_UNUSED(buf);
|
|
1316
|
+
|
|
1317
|
+
return git_treebuilder_write(oid, bld);
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
#endif
|
data/vendor/libgit2/src/tree.h
CHANGED
data/vendor/libgit2/src/tsort.c
CHANGED
|
@@ -66,8 +66,10 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, off64_t offset
|
|
|
66
66
|
|
|
67
67
|
int p_munmap(git_map *map)
|
|
68
68
|
{
|
|
69
|
-
|
|
69
|
+
GIT_ASSERT_ARG(map);
|
|
70
70
|
munmap(map->data, map->len);
|
|
71
|
+
map->data = NULL;
|
|
72
|
+
map->len = 0;
|
|
71
73
|
|
|
72
74
|
return 0;
|
|
73
75
|
}
|
|
@@ -62,11 +62,23 @@ GIT_INLINE(int) p_fsync(int fd)
|
|
|
62
62
|
#define p_snprintf snprintf
|
|
63
63
|
#define p_mkstemp(p) mkstemp(p)
|
|
64
64
|
#define p_chdir(p) chdir(p)
|
|
65
|
-
#define p_chmod(p,m) chmod(p, m)
|
|
66
65
|
#define p_rmdir(p) rmdir(p)
|
|
67
66
|
#define p_access(p,m) access(p,m)
|
|
68
67
|
#define p_ftruncate(fd, sz) ftruncate(fd, sz)
|
|
69
68
|
|
|
69
|
+
/*
|
|
70
|
+
* Pre-Android 5 did not implement a virtual filesystem atop FAT
|
|
71
|
+
* partitions for Unix permissions, which causes chmod to fail. However,
|
|
72
|
+
* Unix permissions have no effect on Android anyway as file permissions
|
|
73
|
+
* are not actually managed this way, so treating it as a no-op across
|
|
74
|
+
* all Android is safe.
|
|
75
|
+
*/
|
|
76
|
+
#ifdef __ANDROID__
|
|
77
|
+
# define p_chmod(p,m) 0
|
|
78
|
+
#else
|
|
79
|
+
# define p_chmod(p,m) chmod(p, m)
|
|
80
|
+
#endif
|
|
81
|
+
|
|
70
82
|
/* see win32/posix.h for explanation about why this exists */
|
|
71
83
|
#define p_lstat_posixly(p,b) lstat(p,b)
|
|
72
84
|
|
|
@@ -89,4 +101,7 @@ GIT_INLINE(int) p_futimes(int f, const struct p_timeval t[2])
|
|
|
89
101
|
# define p_futimes futimes
|
|
90
102
|
#endif
|
|
91
103
|
|
|
104
|
+
#define p_pread(f, d, s, o) pread(f, d, s, o)
|
|
105
|
+
#define p_pwrite(f, d, s, o) pwrite(f, d, s, o)
|
|
106
|
+
|
|
92
107
|
#endif
|
|
@@ -12,7 +12,8 @@ typedef struct {
|
|
|
12
12
|
pthread_t thread;
|
|
13
13
|
} git_thread;
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
GIT_INLINE(int) git_threads_global_init(void) { return 0; }
|
|
16
|
+
|
|
16
17
|
#define git_thread_create(git_thread_ptr, start_routine, arg) \
|
|
17
18
|
pthread_create(&(git_thread_ptr)->thread, NULL, start_routine, arg)
|
|
18
19
|
#define git_thread_join(git_thread_ptr, status) \
|
|
@@ -0,0 +1,150 @@
|
|
|
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 "utf8.h"
|
|
9
|
+
|
|
10
|
+
#include "common.h"
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* git_utf8_iterate is taken from the utf8proc project,
|
|
14
|
+
* http://www.public-software-group.org/utf8proc
|
|
15
|
+
*
|
|
16
|
+
* Copyright (c) 2009 Public Software Group e. V., Berlin, Germany
|
|
17
|
+
*
|
|
18
|
+
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
19
|
+
* copy of this software and associated documentation files (the ""Software""),
|
|
20
|
+
* to deal in the Software without restriction, including without limitation
|
|
21
|
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
22
|
+
* and/or sell copies of the Software, and to permit persons to whom the
|
|
23
|
+
* Software is furnished to do so, subject to the following conditions:
|
|
24
|
+
*
|
|
25
|
+
* The above copyright notice and this permission notice shall be included in
|
|
26
|
+
* all copies or substantial portions of the Software.
|
|
27
|
+
*
|
|
28
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
29
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
30
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
31
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
32
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
33
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
34
|
+
* DEALINGS IN THE SOFTWARE.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
static const uint8_t utf8proc_utf8class[256] = {
|
|
38
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
39
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
40
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
41
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
42
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
43
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
44
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
45
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
|
46
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
47
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
48
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
49
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
50
|
+
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
|
51
|
+
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
|
52
|
+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
53
|
+
4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
static int utf8_charlen(const uint8_t *str, size_t str_len)
|
|
57
|
+
{
|
|
58
|
+
uint8_t length;
|
|
59
|
+
size_t i;
|
|
60
|
+
|
|
61
|
+
length = utf8proc_utf8class[str[0]];
|
|
62
|
+
if (!length)
|
|
63
|
+
return -1;
|
|
64
|
+
|
|
65
|
+
if (str_len > 0 && length > str_len)
|
|
66
|
+
return -1;
|
|
67
|
+
|
|
68
|
+
for (i = 1; i < length; i++) {
|
|
69
|
+
if ((str[i] & 0xC0) != 0x80)
|
|
70
|
+
return -1;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return (int)length;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
int git_utf8_iterate(uint32_t *out, const char *_str, size_t str_len)
|
|
77
|
+
{
|
|
78
|
+
const uint8_t *str = (const uint8_t *)_str;
|
|
79
|
+
uint32_t uc = 0;
|
|
80
|
+
int length;
|
|
81
|
+
|
|
82
|
+
*out = 0;
|
|
83
|
+
|
|
84
|
+
if ((length = utf8_charlen(str, str_len)) < 0)
|
|
85
|
+
return -1;
|
|
86
|
+
|
|
87
|
+
switch (length) {
|
|
88
|
+
case 1:
|
|
89
|
+
uc = str[0];
|
|
90
|
+
break;
|
|
91
|
+
case 2:
|
|
92
|
+
uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
|
|
93
|
+
if (uc < 0x80) uc = -1;
|
|
94
|
+
break;
|
|
95
|
+
case 3:
|
|
96
|
+
uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6)
|
|
97
|
+
+ (str[2] & 0x3F);
|
|
98
|
+
if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) ||
|
|
99
|
+
(uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1;
|
|
100
|
+
break;
|
|
101
|
+
case 4:
|
|
102
|
+
uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12)
|
|
103
|
+
+ ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
|
|
104
|
+
if (uc < 0x10000 || uc >= 0x110000) uc = -1;
|
|
105
|
+
break;
|
|
106
|
+
default:
|
|
107
|
+
return -1;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if ((uc & 0xFFFF) >= 0xFFFE)
|
|
111
|
+
return -1;
|
|
112
|
+
|
|
113
|
+
*out = uc;
|
|
114
|
+
return length;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
size_t git_utf8_char_length(const char *_str, size_t str_len)
|
|
118
|
+
{
|
|
119
|
+
const uint8_t *str = (const uint8_t *)_str;
|
|
120
|
+
size_t offset = 0, count = 0;
|
|
121
|
+
|
|
122
|
+
while (offset < str_len) {
|
|
123
|
+
int length = utf8_charlen(str + offset, str_len - offset);
|
|
124
|
+
|
|
125
|
+
if (length < 0)
|
|
126
|
+
length = 1;
|
|
127
|
+
|
|
128
|
+
offset += length;
|
|
129
|
+
count++;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return count;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
size_t git_utf8_valid_buf_length(const char *_str, size_t str_len)
|
|
136
|
+
{
|
|
137
|
+
const uint8_t *str = (const uint8_t *)_str;
|
|
138
|
+
size_t offset = 0;
|
|
139
|
+
|
|
140
|
+
while (offset < str_len) {
|
|
141
|
+
int length = utf8_charlen(str + offset, str_len - offset);
|
|
142
|
+
|
|
143
|
+
if (length < 0)
|
|
144
|
+
break;
|
|
145
|
+
|
|
146
|
+
offset += length;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return offset;
|
|
150
|
+
}
|