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.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -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
- git_path_isvalid(repo, filename, 0,
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
- assert(source);
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
- assert(entry);
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
- assert(entry);
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
- assert(entry);
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
- assert(entry && object_out);
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
- assert(tree && filename);
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
- assert(tree);
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
- assert(tree);
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
- assert(tree);
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
- assert(bld);
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 (git_treebuilder_write_with_buffer(oid, bld, shared_buf) < 0)
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
- assert(oid && index && repo);
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
- assert(builder_p && repo);
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
- assert(bld && id && filename);
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
- assert(bld && filename);
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
- int error;
779
- git_buf buffer = GIT_BUF_INIT;
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
- for (i = 0; i < entries.length && !error; ++i) {
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
- assert(bld && filter);
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
- assert(bld);
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
- assert(popped);
1186
+ GIT_ASSERT(popped);
1178
1187
 
1179
1188
  current = git_array_last(stack);
1180
- assert(current);
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(git_array_last(stack)->bld, basename);
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
@@ -32,6 +32,7 @@ struct git_tree {
32
32
  struct git_treebuilder {
33
33
  git_repository *repo;
34
34
  git_strmap *map;
35
+ git_buf write_cache;
35
36
  };
36
37
 
37
38
  GIT_INLINE(bool) git_tree_entry__is_tree(const struct git_tree_entry *e)
@@ -29,8 +29,6 @@ static int binsearch(
29
29
  int l, c, r;
30
30
  void *lx, *cx;
31
31
 
32
- assert(size > 0);
33
-
34
32
  l = 0;
35
33
  r = (int)size - 1;
36
34
  c = r >> 1;
@@ -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
- assert(map != NULL);
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
- #define git_threads_init() (void)0
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
+ }