rugged 0.27.7 → 0.27.10

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 (409) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +99 -51
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  8. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  9. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  10. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  11. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  12. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  13. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
  14. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  15. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  16. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  17. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  18. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  19. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  20. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  21. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  82. data/vendor/libgit2/include/git2/apply.h +149 -0
  83. data/vendor/libgit2/include/git2/attr.h +20 -13
  84. data/vendor/libgit2/include/git2/blame.h +4 -4
  85. data/vendor/libgit2/include/git2/blob.h +44 -12
  86. data/vendor/libgit2/include/git2/buffer.h +20 -26
  87. data/vendor/libgit2/include/git2/cert.h +135 -0
  88. data/vendor/libgit2/include/git2/checkout.h +53 -21
  89. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  90. data/vendor/libgit2/include/git2/clone.h +5 -5
  91. data/vendor/libgit2/include/git2/commit.h +25 -3
  92. data/vendor/libgit2/include/git2/common.h +35 -10
  93. data/vendor/libgit2/include/git2/config.h +29 -19
  94. data/vendor/libgit2/include/git2/cred.h +308 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  96. data/vendor/libgit2/include/git2/describe.h +4 -4
  97. data/vendor/libgit2/include/git2/diff.h +177 -135
  98. data/vendor/libgit2/include/git2/errors.h +53 -46
  99. data/vendor/libgit2/include/git2/filter.h +8 -0
  100. data/vendor/libgit2/include/git2/index.h +74 -52
  101. data/vendor/libgit2/include/git2/indexer.h +76 -6
  102. data/vendor/libgit2/include/git2/merge.h +25 -10
  103. data/vendor/libgit2/include/git2/net.h +0 -5
  104. data/vendor/libgit2/include/git2/notes.h +1 -1
  105. data/vendor/libgit2/include/git2/object.h +17 -29
  106. data/vendor/libgit2/include/git2/odb.h +12 -11
  107. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  108. data/vendor/libgit2/include/git2/oid.h +2 -2
  109. data/vendor/libgit2/include/git2/pack.h +14 -3
  110. data/vendor/libgit2/include/git2/proxy.h +5 -3
  111. data/vendor/libgit2/include/git2/rebase.h +46 -2
  112. data/vendor/libgit2/include/git2/refs.h +34 -16
  113. data/vendor/libgit2/include/git2/remote.h +111 -14
  114. data/vendor/libgit2/include/git2/repository.h +69 -34
  115. data/vendor/libgit2/include/git2/revert.h +1 -1
  116. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  117. data/vendor/libgit2/include/git2/signature.h +2 -2
  118. data/vendor/libgit2/include/git2/stash.h +5 -5
  119. data/vendor/libgit2/include/git2/status.h +26 -17
  120. data/vendor/libgit2/include/git2/submodule.h +23 -6
  121. data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
  122. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  123. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  124. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  125. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  126. data/vendor/libgit2/include/git2/sys/merge.h +3 -3
  127. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  128. data/vendor/libgit2/include/git2/sys/path.h +14 -5
  129. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  130. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  131. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  132. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  133. data/vendor/libgit2/include/git2/tag.h +13 -4
  134. data/vendor/libgit2/include/git2/trace.h +2 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -311
  136. data/vendor/libgit2/include/git2/tree.h +4 -4
  137. data/vendor/libgit2/include/git2/types.h +25 -106
  138. data/vendor/libgit2/include/git2/version.h +3 -3
  139. data/vendor/libgit2/include/git2/worktree.h +5 -5
  140. data/vendor/libgit2/include/git2.h +4 -0
  141. data/vendor/libgit2/src/CMakeLists.txt +104 -235
  142. data/vendor/libgit2/src/alloc.c +14 -18
  143. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
  144. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  145. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  146. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  147. data/vendor/libgit2/src/annotated_commit.c +18 -11
  148. data/vendor/libgit2/src/apply.c +535 -28
  149. data/vendor/libgit2/src/apply.h +3 -1
  150. data/vendor/libgit2/src/array.h +2 -2
  151. data/vendor/libgit2/src/attr.c +77 -71
  152. data/vendor/libgit2/src/attr_file.c +203 -117
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +49 -51
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +38 -18
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +29 -15
  159. data/vendor/libgit2/src/blob.c +123 -37
  160. data/vendor/libgit2/src/blob.h +19 -2
  161. data/vendor/libgit2/src/branch.c +47 -23
  162. data/vendor/libgit2/src/buf_text.c +7 -6
  163. data/vendor/libgit2/src/buffer.c +60 -53
  164. data/vendor/libgit2/src/cache.c +38 -45
  165. data/vendor/libgit2/src/cache.h +3 -3
  166. data/vendor/libgit2/src/cc-compat.h +20 -3
  167. data/vendor/libgit2/src/checkout.c +77 -67
  168. data/vendor/libgit2/src/cherrypick.c +12 -6
  169. data/vendor/libgit2/src/clone.c +36 -14
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +103 -48
  172. data/vendor/libgit2/src/commit.h +7 -0
  173. data/vendor/libgit2/src/commit_list.c +36 -78
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +24 -90
  176. data/vendor/libgit2/src/config.c +203 -176
  177. data/vendor/libgit2/src/config.h +8 -20
  178. data/vendor/libgit2/src/config_backend.h +96 -0
  179. data/vendor/libgit2/src/config_cache.c +41 -35
  180. data/vendor/libgit2/src/config_entries.c +229 -0
  181. data/vendor/libgit2/src/config_entries.h +24 -0
  182. data/vendor/libgit2/src/config_file.c +422 -680
  183. data/vendor/libgit2/src/config_mem.c +220 -0
  184. data/vendor/libgit2/src/config_parse.c +96 -68
  185. data/vendor/libgit2/src/config_parse.h +15 -14
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +219 -196
  188. data/vendor/libgit2/src/delta.c +25 -18
  189. data/vendor/libgit2/src/describe.c +42 -41
  190. data/vendor/libgit2/src/diff.c +52 -67
  191. data/vendor/libgit2/src/diff.h +2 -1
  192. data/vendor/libgit2/src/diff_driver.c +44 -46
  193. data/vendor/libgit2/src/diff_file.c +16 -14
  194. data/vendor/libgit2/src/diff_file.h +1 -1
  195. data/vendor/libgit2/src/diff_generate.c +158 -103
  196. data/vendor/libgit2/src/diff_generate.h +3 -3
  197. data/vendor/libgit2/src/diff_parse.c +4 -4
  198. data/vendor/libgit2/src/diff_print.c +34 -22
  199. data/vendor/libgit2/src/diff_stats.c +22 -7
  200. data/vendor/libgit2/src/diff_tform.c +18 -16
  201. data/vendor/libgit2/src/diff_xdiff.c +3 -3
  202. data/vendor/libgit2/src/errors.c +51 -39
  203. data/vendor/libgit2/src/errors.h +81 -0
  204. data/vendor/libgit2/src/features.h.in +9 -3
  205. data/vendor/libgit2/src/fetch.c +8 -3
  206. data/vendor/libgit2/src/fetchhead.c +12 -12
  207. data/vendor/libgit2/src/filebuf.c +28 -32
  208. data/vendor/libgit2/src/filebuf.h +2 -2
  209. data/vendor/libgit2/src/filter.c +47 -33
  210. data/vendor/libgit2/src/filter.h +0 -10
  211. data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
  212. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  213. data/vendor/libgit2/src/global.c +35 -55
  214. data/vendor/libgit2/src/global.h +0 -2
  215. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  216. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  218. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  219. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  220. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  221. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  222. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
  223. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  224. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  226. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  227. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  228. data/vendor/libgit2/src/hash/sha1.h +38 -0
  229. data/vendor/libgit2/src/hash.c +61 -0
  230. data/vendor/libgit2/src/hash.h +20 -21
  231. data/vendor/libgit2/src/hashsig.c +5 -5
  232. data/vendor/libgit2/src/idxmap.c +107 -61
  233. data/vendor/libgit2/src/idxmap.h +153 -31
  234. data/vendor/libgit2/src/ignore.c +38 -42
  235. data/vendor/libgit2/src/index.c +264 -199
  236. data/vendor/libgit2/src/index.h +7 -1
  237. data/vendor/libgit2/src/indexer.c +338 -167
  238. data/vendor/libgit2/src/integer.h +71 -26
  239. data/vendor/libgit2/src/iterator.c +134 -62
  240. data/vendor/libgit2/src/iterator.h +15 -0
  241. data/vendor/libgit2/src/mailmap.c +8 -8
  242. data/vendor/libgit2/src/map.h +1 -1
  243. data/vendor/libgit2/src/merge.c +137 -93
  244. data/vendor/libgit2/src/merge_driver.c +11 -11
  245. data/vendor/libgit2/src/merge_file.c +2 -2
  246. data/vendor/libgit2/src/mwindow.c +24 -29
  247. data/vendor/libgit2/src/mwindow.h +4 -4
  248. data/vendor/libgit2/src/net.c +184 -0
  249. data/vendor/libgit2/src/net.h +36 -0
  250. data/vendor/libgit2/src/netops.c +55 -156
  251. data/vendor/libgit2/src/netops.h +3 -23
  252. data/vendor/libgit2/src/notes.c +14 -9
  253. data/vendor/libgit2/src/object.c +120 -69
  254. data/vendor/libgit2/src/object.h +22 -9
  255. data/vendor/libgit2/src/object_api.c +8 -8
  256. data/vendor/libgit2/src/odb.c +111 -88
  257. data/vendor/libgit2/src/odb.h +8 -7
  258. data/vendor/libgit2/src/odb_loose.c +58 -47
  259. data/vendor/libgit2/src/odb_mempack.c +21 -34
  260. data/vendor/libgit2/src/odb_pack.c +17 -13
  261. data/vendor/libgit2/src/offmap.c +53 -35
  262. data/vendor/libgit2/src/offmap.h +108 -21
  263. data/vendor/libgit2/src/oid.c +12 -7
  264. data/vendor/libgit2/src/oidmap.c +49 -47
  265. data/vendor/libgit2/src/oidmap.h +101 -24
  266. data/vendor/libgit2/src/pack-objects.c +87 -86
  267. data/vendor/libgit2/src/pack-objects.h +2 -8
  268. data/vendor/libgit2/src/pack.c +94 -96
  269. data/vendor/libgit2/src/pack.h +16 -18
  270. data/vendor/libgit2/src/parse.c +17 -4
  271. data/vendor/libgit2/src/parse.h +3 -3
  272. data/vendor/libgit2/src/patch.c +3 -3
  273. data/vendor/libgit2/src/patch_generate.c +18 -18
  274. data/vendor/libgit2/src/patch_parse.c +147 -79
  275. data/vendor/libgit2/src/path.c +207 -62
  276. data/vendor/libgit2/src/path.h +14 -0
  277. data/vendor/libgit2/src/pathspec.c +18 -18
  278. data/vendor/libgit2/src/pool.c +26 -22
  279. data/vendor/libgit2/src/pool.h +7 -7
  280. data/vendor/libgit2/src/posix.c +10 -10
  281. data/vendor/libgit2/src/posix.h +12 -1
  282. data/vendor/libgit2/src/proxy.c +8 -3
  283. data/vendor/libgit2/src/push.c +35 -29
  284. data/vendor/libgit2/src/push.h +2 -1
  285. data/vendor/libgit2/src/reader.c +265 -0
  286. data/vendor/libgit2/src/reader.h +107 -0
  287. data/vendor/libgit2/src/rebase.c +97 -38
  288. data/vendor/libgit2/src/refdb.c +15 -3
  289. data/vendor/libgit2/src/refdb_fs.c +318 -222
  290. data/vendor/libgit2/src/reflog.c +13 -15
  291. data/vendor/libgit2/src/refs.c +122 -89
  292. data/vendor/libgit2/src/refs.h +5 -3
  293. data/vendor/libgit2/src/refspec.c +27 -33
  294. data/vendor/libgit2/src/regexp.c +221 -0
  295. data/vendor/libgit2/src/regexp.h +97 -0
  296. data/vendor/libgit2/src/remote.c +229 -178
  297. data/vendor/libgit2/src/remote.h +11 -2
  298. data/vendor/libgit2/src/repository.c +227 -172
  299. data/vendor/libgit2/src/repository.h +52 -40
  300. data/vendor/libgit2/src/reset.c +7 -7
  301. data/vendor/libgit2/src/revert.c +11 -6
  302. data/vendor/libgit2/src/revparse.c +46 -46
  303. data/vendor/libgit2/src/revwalk.c +89 -54
  304. data/vendor/libgit2/src/revwalk.h +20 -0
  305. data/vendor/libgit2/src/settings.c +22 -9
  306. data/vendor/libgit2/src/signature.c +15 -13
  307. data/vendor/libgit2/src/sortedcache.c +22 -36
  308. data/vendor/libgit2/src/sortedcache.h +1 -1
  309. data/vendor/libgit2/src/stash.c +56 -76
  310. data/vendor/libgit2/src/status.c +27 -21
  311. data/vendor/libgit2/src/stream.h +17 -2
  312. data/vendor/libgit2/src/streams/mbedtls.c +100 -80
  313. data/vendor/libgit2/src/streams/mbedtls.h +5 -2
  314. data/vendor/libgit2/src/streams/openssl.c +93 -81
  315. data/vendor/libgit2/src/streams/openssl.h +5 -2
  316. data/vendor/libgit2/src/streams/registry.c +118 -0
  317. data/vendor/libgit2/src/streams/registry.h +19 -0
  318. data/vendor/libgit2/src/streams/socket.c +55 -30
  319. data/vendor/libgit2/src/streams/stransport.c +57 -32
  320. data/vendor/libgit2/src/streams/stransport.h +5 -0
  321. data/vendor/libgit2/src/streams/tls.c +48 -20
  322. data/vendor/libgit2/src/streams/tls.h +12 -4
  323. data/vendor/libgit2/src/strmap.c +47 -74
  324. data/vendor/libgit2/src/strmap.h +108 -33
  325. data/vendor/libgit2/src/submodule.c +190 -169
  326. data/vendor/libgit2/src/submodule.h +1 -1
  327. data/vendor/libgit2/src/sysdir.c +25 -15
  328. data/vendor/libgit2/src/tag.c +39 -26
  329. data/vendor/libgit2/src/tag.h +2 -1
  330. data/vendor/libgit2/src/trace.c +2 -2
  331. data/vendor/libgit2/src/trace.h +2 -2
  332. data/vendor/libgit2/src/trailer.c +46 -32
  333. data/vendor/libgit2/src/transaction.c +30 -29
  334. data/vendor/libgit2/src/transport.c +3 -3
  335. data/vendor/libgit2/src/transports/auth.c +14 -10
  336. data/vendor/libgit2/src/transports/auth.h +10 -3
  337. data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
  338. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  339. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  340. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  341. data/vendor/libgit2/src/transports/cred.c +24 -24
  342. data/vendor/libgit2/src/transports/git.c +25 -30
  343. data/vendor/libgit2/src/transports/http.c +871 -335
  344. data/vendor/libgit2/src/transports/http.h +2 -0
  345. data/vendor/libgit2/src/transports/local.c +28 -28
  346. data/vendor/libgit2/src/transports/smart.c +64 -46
  347. data/vendor/libgit2/src/transports/smart.h +5 -6
  348. data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
  349. data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
  350. data/vendor/libgit2/src/transports/ssh.c +76 -65
  351. data/vendor/libgit2/src/transports/winhttp.c +328 -319
  352. data/vendor/libgit2/src/tree-cache.c +21 -14
  353. data/vendor/libgit2/src/tree.c +119 -112
  354. data/vendor/libgit2/src/tree.h +1 -0
  355. data/vendor/libgit2/src/unix/map.c +3 -3
  356. data/vendor/libgit2/src/unix/posix.h +1 -11
  357. data/vendor/libgit2/src/userdiff.h +3 -1
  358. data/vendor/libgit2/src/util.c +154 -93
  359. data/vendor/libgit2/src/util.h +19 -23
  360. data/vendor/libgit2/src/vector.c +15 -10
  361. data/vendor/libgit2/src/wildmatch.c +320 -0
  362. data/vendor/libgit2/src/wildmatch.h +23 -0
  363. data/vendor/libgit2/src/win32/dir.c +3 -3
  364. data/vendor/libgit2/src/win32/findfile.c +1 -1
  365. data/vendor/libgit2/src/win32/map.c +9 -11
  366. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  367. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  368. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  369. data/vendor/libgit2/src/win32/posix.h +1 -4
  370. data/vendor/libgit2/src/win32/posix_w32.c +69 -44
  371. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  372. data/vendor/libgit2/src/win32/thread.c +5 -10
  373. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  374. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  375. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
  376. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  377. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  378. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  379. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  380. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  381. data/vendor/libgit2/src/worktree.c +44 -30
  382. data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
  383. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  384. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  385. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  386. data/vendor/libgit2/src/zstream.c +4 -4
  387. metadata +115 -38
  388. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  389. data/vendor/libgit2/deps/regex/config.h +0 -7
  390. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  391. data/vendor/libgit2/deps/regex/regex.c +0 -92
  392. data/vendor/libgit2/deps/regex/regex.h +0 -582
  393. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  394. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  395. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  396. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  397. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  398. data/vendor/libgit2/libgit2.pc.in +0 -13
  399. data/vendor/libgit2/src/config_file.h +0 -73
  400. data/vendor/libgit2/src/fnmatch.c +0 -248
  401. data/vendor/libgit2/src/fnmatch.h +0 -48
  402. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  403. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  404. data/vendor/libgit2/src/streams/curl.c +0 -385
  405. data/vendor/libgit2/src/streams/curl.h +0 -17
  406. /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  407. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  408. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  409. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
@@ -20,6 +20,7 @@
20
20
  #include "message.h"
21
21
  #include "refs.h"
22
22
  #include "object.h"
23
+ #include "array.h"
23
24
  #include "oidarray.h"
24
25
 
25
26
  void git_commit__free(void *_commit)
@@ -80,33 +81,33 @@ on_error:
80
81
  }
81
82
 
82
83
  static int validate_tree_and_parents(git_array_oid_t *parents, git_repository *repo, const git_oid *tree,
83
- git_commit_parent_callback parent_cb, void *parent_payload,
84
- const git_oid *current_id, bool validate)
84
+ git_commit_parent_callback parent_cb, void *parent_payload,
85
+ const git_oid *current_id, bool validate)
85
86
  {
86
87
  size_t i;
87
88
  int error;
88
89
  git_oid *parent_cpy;
89
90
  const git_oid *parent;
90
91
 
91
- if (validate && !git_object__is_valid(repo, tree, GIT_OBJ_TREE))
92
+ if (validate && !git_object__is_valid(repo, tree, GIT_OBJECT_TREE))
92
93
  return -1;
93
94
 
94
95
  i = 0;
95
96
  while ((parent = parent_cb(i, parent_payload)) != NULL) {
96
- if (validate && !git_object__is_valid(repo, parent, GIT_OBJ_COMMIT)) {
97
+ if (validate && !git_object__is_valid(repo, parent, GIT_OBJECT_COMMIT)) {
97
98
  error = -1;
98
99
  goto on_error;
99
100
  }
100
101
 
101
102
  parent_cpy = git_array_alloc(*parents);
102
- GITERR_CHECK_ALLOC(parent_cpy);
103
+ GIT_ERROR_CHECK_ALLOC(parent_cpy);
103
104
 
104
105
  git_oid_cpy(parent_cpy, parent);
105
106
  i++;
106
107
  }
107
108
 
108
109
  if (current_id && (parents->size == 0 || git_oid_cmp(current_id, git_array_get(*parents, 0)))) {
109
- giterr_set(GITERR_OBJECT, "failed to create commit: current tip is not the first parent");
110
+ git_error_set(GIT_ERROR_OBJECT, "failed to create commit: current tip is not the first parent");
110
111
  error = GIT_EMODIFIED;
111
112
  goto on_error;
112
113
  }
@@ -143,7 +144,7 @@ static int git_commit__create_internal(
143
144
  if (error < 0 && error != GIT_ENOTFOUND)
144
145
  return error;
145
146
  }
146
- giterr_clear();
147
+ git_error_clear();
147
148
 
148
149
  if (ref)
149
150
  current_id = git_reference_target(ref);
@@ -152,8 +153,8 @@ static int git_commit__create_internal(
152
153
  goto cleanup;
153
154
 
154
155
  error = git_commit__create_buffer_internal(&buf, author, committer,
155
- message_encoding, message, tree,
156
- &parents);
156
+ message_encoding, message, tree,
157
+ &parents);
157
158
 
158
159
  if (error < 0)
159
160
  goto cleanup;
@@ -164,7 +165,7 @@ static int git_commit__create_internal(
164
165
  if (git_odb__freshen(odb, tree) < 0)
165
166
  goto cleanup;
166
167
 
167
- if (git_odb_write(id, odb, buf.ptr, buf.size, GIT_OBJ_COMMIT) < 0)
168
+ if (git_odb_write(id, odb, buf.ptr, buf.size, GIT_OBJECT_COMMIT) < 0)
168
169
  goto cleanup;
169
170
 
170
171
 
@@ -351,7 +352,7 @@ int git_commit_amend(
351
352
 
352
353
  if (!tree) {
353
354
  git_tree *old_tree;
354
- GITERR_CHECK_ERROR( git_commit_tree(&old_tree, commit_to_amend) );
355
+ GIT_ERROR_CHECK_ERROR( git_commit_tree(&old_tree, commit_to_amend) );
355
356
  git_oid_cpy(&tree_id, git_tree_id(old_tree));
356
357
  git_tree_free(old_tree);
357
358
  } else {
@@ -365,7 +366,7 @@ int git_commit_amend(
365
366
 
366
367
  if (git_oid_cmp(git_commit_id(commit_to_amend), git_reference_target(ref))) {
367
368
  git_reference_free(ref);
368
- giterr_set(GITERR_REFERENCE, "commit to amend is not the tip of the given branch");
369
+ git_error_set(GIT_ERROR_REFERENCE, "commit to amend is not the tip of the given branch");
369
370
  return -1;
370
371
  }
371
372
  }
@@ -383,24 +384,32 @@ int git_commit_amend(
383
384
  return error;
384
385
  }
385
386
 
386
- int git_commit__parse(void *_commit, git_odb_object *odb_obj)
387
+ static int commit_parse(git_commit *commit, const char *data, size_t size, unsigned int flags)
387
388
  {
388
- git_commit *commit = _commit;
389
- const char *buffer_start = git_odb_object_data(odb_obj), *buffer;
390
- const char *buffer_end = buffer_start + git_odb_object_size(odb_obj);
389
+ const char *buffer_start = data, *buffer;
390
+ const char *buffer_end = buffer_start + size;
391
391
  git_oid parent_id;
392
392
  size_t header_len;
393
393
  git_signature dummy_sig;
394
394
 
395
+ assert(commit && data);
396
+
395
397
  buffer = buffer_start;
396
398
 
397
399
  /* Allocate for one, which will allow not to realloc 90% of the time */
398
400
  git_array_init_to_size(commit->parent_ids, 1);
399
- GITERR_CHECK_ARRAY(commit->parent_ids);
401
+ GIT_ERROR_CHECK_ARRAY(commit->parent_ids);
400
402
 
401
403
  /* The tree is always the first field */
402
- if (git_oid__parse(&commit->tree_id, &buffer, buffer_end, "tree ") < 0)
403
- goto bad_buffer;
404
+ if (!(flags & GIT_COMMIT_PARSE_QUICK)) {
405
+ if (git_oid__parse(&commit->tree_id, &buffer, buffer_end, "tree ") < 0)
406
+ goto bad_buffer;
407
+ } else {
408
+ size_t tree_len = strlen("tree ") + GIT_OID_HEXSZ + 1;
409
+ if (buffer + tree_len > buffer_end)
410
+ goto bad_buffer;
411
+ buffer += tree_len;
412
+ }
404
413
 
405
414
  /*
406
415
  * TODO: commit grafts!
@@ -408,19 +417,21 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
408
417
 
409
418
  while (git_oid__parse(&parent_id, &buffer, buffer_end, "parent ") == 0) {
410
419
  git_oid *new_id = git_array_alloc(commit->parent_ids);
411
- GITERR_CHECK_ALLOC(new_id);
420
+ GIT_ERROR_CHECK_ALLOC(new_id);
412
421
 
413
422
  git_oid_cpy(new_id, &parent_id);
414
423
  }
415
424
 
416
- commit->author = git__malloc(sizeof(git_signature));
417
- GITERR_CHECK_ALLOC(commit->author);
425
+ if (!(flags & GIT_COMMIT_PARSE_QUICK)) {
426
+ commit->author = git__malloc(sizeof(git_signature));
427
+ GIT_ERROR_CHECK_ALLOC(commit->author);
418
428
 
419
- if (git_signature__parse(commit->author, &buffer, buffer_end, "author ", '\n') < 0)
420
- return -1;
429
+ if (git_signature__parse(commit->author, &buffer, buffer_end, "author ", '\n') < 0)
430
+ return -1;
431
+ }
421
432
 
422
433
  /* Some tools create multiple author fields, ignore the extra ones */
423
- while ((size_t)(buffer_end - buffer) >= strlen("author ") && !git__prefixcmp(buffer, "author ")) {
434
+ while (!git__prefixncmp(buffer, buffer_end - buffer, "author ")) {
424
435
  if (git_signature__parse(&dummy_sig, &buffer, buffer_end, "author ", '\n') < 0)
425
436
  return -1;
426
437
 
@@ -430,11 +441,14 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
430
441
 
431
442
  /* Always parse the committer; we need the commit time */
432
443
  commit->committer = git__malloc(sizeof(git_signature));
433
- GITERR_CHECK_ALLOC(commit->committer);
444
+ GIT_ERROR_CHECK_ALLOC(commit->committer);
434
445
 
435
446
  if (git_signature__parse(commit->committer, &buffer, buffer_end, "committer ", '\n') < 0)
436
447
  return -1;
437
448
 
449
+ if (flags & GIT_COMMIT_PARSE_QUICK)
450
+ return 0;
451
+
438
452
  /* Parse add'l header entries */
439
453
  while (buffer < buffer_end) {
440
454
  const char *eoln = buffer;
@@ -444,11 +458,11 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
444
458
  while (eoln < buffer_end && *eoln != '\n')
445
459
  ++eoln;
446
460
 
447
- if (git__prefixcmp(buffer, "encoding ") == 0) {
461
+ if (git__prefixncmp(buffer, buffer_end - buffer, "encoding ") == 0) {
448
462
  buffer += strlen("encoding ");
449
463
 
450
464
  commit->message_encoding = git__strndup(buffer, eoln - buffer);
451
- GITERR_CHECK_ALLOC(commit->message_encoding);
465
+ GIT_ERROR_CHECK_ALLOC(commit->message_encoding);
452
466
  }
453
467
 
454
468
  if (eoln < buffer_end && *eoln == '\n')
@@ -458,7 +472,7 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
458
472
 
459
473
  header_len = buffer - buffer_start;
460
474
  commit->raw_header = git__strndup(buffer_start, header_len);
461
- GITERR_CHECK_ALLOC(commit->raw_header);
475
+ GIT_ERROR_CHECK_ALLOC(commit->raw_header);
462
476
 
463
477
  /* point "buffer" to data after header, +1 for the final LF */
464
478
  buffer = buffer_start + header_len + 1;
@@ -468,15 +482,30 @@ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
468
482
  commit->raw_message = git__strndup(buffer, buffer_end - buffer);
469
483
  else
470
484
  commit->raw_message = git__strdup("");
471
- GITERR_CHECK_ALLOC(commit->raw_message);
485
+ GIT_ERROR_CHECK_ALLOC(commit->raw_message);
472
486
 
473
487
  return 0;
474
488
 
475
489
  bad_buffer:
476
- giterr_set(GITERR_OBJECT, "failed to parse bad commit object");
490
+ git_error_set(GIT_ERROR_OBJECT, "failed to parse bad commit object");
477
491
  return -1;
478
492
  }
479
493
 
494
+ int git_commit__parse_raw(void *commit, const char *data, size_t size)
495
+ {
496
+ return commit_parse(commit, data, size, 0);
497
+ }
498
+
499
+ int git_commit__parse_ext(git_commit *commit, git_odb_object *odb_obj, unsigned int flags)
500
+ {
501
+ return commit_parse(commit, git_odb_object_data(odb_obj), git_odb_object_size(odb_obj), flags);
502
+ }
503
+
504
+ int git_commit__parse(void *_commit, git_odb_object *odb_obj)
505
+ {
506
+ return git_commit__parse_ext(_commit, odb_obj, 0);
507
+ }
508
+
480
509
  #define GIT_COMMIT_GETTER(_rvalue, _name, _return) \
481
510
  _rvalue git_commit_##_name(const git_commit *commit) \
482
511
  {\
@@ -575,7 +604,7 @@ const char *git_commit_body(git_commit *commit)
575
604
  break;
576
605
 
577
606
  if (*msg)
578
- commit->body = git__strndup(msg, end - msg + 1);
607
+ commit->body = git__strndup(msg, end - msg + 1);
579
608
  }
580
609
 
581
610
  return commit->body;
@@ -603,7 +632,7 @@ int git_commit_parent(
603
632
 
604
633
  parent_id = git_commit_parent_id(commit, n);
605
634
  if (parent_id == NULL) {
606
- giterr_set(GITERR_INVALID, "parent %u does not exist", n);
635
+ git_error_set(GIT_ERROR_INVALID, "parent %u does not exist", n);
607
636
  return GIT_ENOTFOUND;
608
637
  }
609
638
 
@@ -692,14 +721,14 @@ int git_commit_header_field(git_buf *out, const git_commit *commit, const char *
692
721
  return 0;
693
722
  }
694
723
 
695
- giterr_set(GITERR_OBJECT, "no such field '%s'", field);
724
+ git_error_set(GIT_ERROR_OBJECT, "no such field '%s'", field);
696
725
  return GIT_ENOTFOUND;
697
726
 
698
727
  malformed:
699
- giterr_set(GITERR_OBJECT, "malformed header");
728
+ git_error_set(GIT_ERROR_OBJECT, "malformed header");
700
729
  return -1;
701
730
  oom:
702
- giterr_set_oom();
731
+ git_error_set_oom();
703
732
  return -1;
704
733
  }
705
734
 
@@ -723,8 +752,8 @@ int git_commit_extract_signature(git_buf *signature, git_buf *signed_data, git_r
723
752
  if ((error = git_odb_read(&obj, odb, commit_id)) < 0)
724
753
  return error;
725
754
 
726
- if (obj->cached.type != GIT_OBJ_COMMIT) {
727
- giterr_set(GITERR_INVALID, "the requested type does not match the type in ODB");
755
+ if (obj->cached.type != GIT_OBJECT_COMMIT) {
756
+ git_error_set(GIT_ERROR_INVALID, "the requested type does not match the type in ODB");
728
757
  error = GIT_ENOTFOUND;
729
758
  goto cleanup;
730
759
  }
@@ -776,16 +805,16 @@ int git_commit_extract_signature(git_buf *signature, git_buf *signed_data, git_r
776
805
  return error;
777
806
  }
778
807
 
779
- giterr_set(GITERR_OBJECT, "this commit is not signed");
808
+ git_error_set(GIT_ERROR_OBJECT, "this commit is not signed");
780
809
  error = GIT_ENOTFOUND;
781
810
  goto cleanup;
782
811
 
783
812
  malformed:
784
- giterr_set(GITERR_OBJECT, "malformed header");
813
+ git_error_set(GIT_ERROR_OBJECT, "malformed header");
785
814
  error = -1;
786
815
  goto cleanup;
787
816
  oom:
788
- giterr_set_oom();
817
+ git_error_set_oom();
789
818
  error = -1;
790
819
  goto cleanup;
791
820
 
@@ -849,6 +878,14 @@ static void format_header_field(git_buf *out, const char *field, const char *con
849
878
  git_buf_putc(out, '\n');
850
879
  }
851
880
 
881
+ static const git_oid *commit_parent_from_commit(size_t n, void *payload)
882
+ {
883
+ const git_commit *commit = (const git_commit *) payload;
884
+
885
+ return git_array_get(commit->parent_ids, n);
886
+
887
+ }
888
+
852
889
  int git_commit_create_with_signature(
853
890
  git_oid *out,
854
891
  git_repository *repo,
@@ -861,20 +898,37 @@ int git_commit_create_with_signature(
861
898
  const char *field;
862
899
  const char *header_end;
863
900
  git_buf commit = GIT_BUF_INIT;
901
+ git_commit *parsed;
902
+ git_array_oid_t parents = GIT_ARRAY_INIT;
903
+
904
+ /* The first step is to verify that all the tree and parents exist */
905
+ parsed = git__calloc(1, sizeof(git_commit));
906
+ GIT_ERROR_CHECK_ALLOC(parsed);
907
+ if ((error = commit_parse(parsed, commit_content, strlen(commit_content), 0)) < 0)
908
+ goto cleanup;
864
909
 
865
- /* We start by identifying the end of the commit header */
910
+ if ((error = validate_tree_and_parents(&parents, repo, &parsed->tree_id, commit_parent_from_commit, parsed, NULL, true)) < 0)
911
+ goto cleanup;
912
+
913
+ git_array_clear(parents);
914
+
915
+ /* Then we start appending by identifying the end of the commit header */
866
916
  header_end = strstr(commit_content, "\n\n");
867
917
  if (!header_end) {
868
- giterr_set(GITERR_INVALID, "malformed commit contents");
869
- return -1;
918
+ git_error_set(GIT_ERROR_INVALID, "malformed commit contents");
919
+ error = -1;
920
+ goto cleanup;
870
921
  }
871
922
 
872
- field = signature_field ? signature_field : "gpgsig";
873
-
874
923
  /* The header ends after the first LF */
875
924
  header_end++;
876
925
  git_buf_put(&commit, commit_content, header_end - commit_content);
877
- format_header_field(&commit, field, signature);
926
+
927
+ if (signature != NULL) {
928
+ field = signature_field ? signature_field : "gpgsig";
929
+ format_header_field(&commit, field, signature);
930
+ }
931
+
878
932
  git_buf_puts(&commit, header_end);
879
933
 
880
934
  if (git_buf_oom(&commit))
@@ -883,10 +937,11 @@ int git_commit_create_with_signature(
883
937
  if ((error = git_repository_odb__weakptr(&odb, repo)) < 0)
884
938
  goto cleanup;
885
939
 
886
- if ((error = git_odb_write(out, odb, commit.ptr, commit.size, GIT_OBJ_COMMIT)) < 0)
940
+ if ((error = git_odb_write(out, odb, commit.ptr, commit.size, GIT_OBJECT_COMMIT)) < 0)
887
941
  goto cleanup;
888
942
 
889
943
  cleanup:
944
+ git_commit__free(parsed);
890
945
  git_buf_dispose(&commit);
891
946
  return error;
892
947
  }
@@ -35,5 +35,12 @@ struct git_commit {
35
35
 
36
36
  void git_commit__free(void *commit);
37
37
  int git_commit__parse(void *commit, git_odb_object *obj);
38
+ int git_commit__parse_raw(void *commit, const char *data, size_t size);
39
+
40
+ typedef enum {
41
+ GIT_COMMIT_PARSE_QUICK = (1 << 0), /**< Only parse parents and committer info */
42
+ } git_commit__parse_flags;
43
+
44
+ int git_commit__parse_ext(git_commit *commit, git_odb_object *odb_obj, unsigned int flags);
38
45
 
39
46
  #endif
@@ -10,6 +10,7 @@
10
10
  #include "revwalk.h"
11
11
  #include "pool.h"
12
12
  #include "odb.h"
13
+ #include "commit.h"
13
14
 
14
15
  int git_commit_list_time_cmp(const void *a, const void *b)
15
16
  {
@@ -55,25 +56,18 @@ git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk)
55
56
  return (git_commit_list_node *)git_pool_mallocz(&walk->commit_pool, 1);
56
57
  }
57
58
 
58
- static int commit_error(git_commit_list_node *commit, const char *msg)
59
- {
60
- char commit_oid[GIT_OID_HEXSZ + 1];
61
- git_oid_fmt(commit_oid, &commit->oid);
62
- commit_oid[GIT_OID_HEXSZ] = '\0';
63
-
64
- giterr_set(GITERR_ODB, "failed to parse commit %s - %s", commit_oid, msg);
65
-
66
- return -1;
67
- }
68
-
69
59
  static git_commit_list_node **alloc_parents(
70
60
  git_revwalk *walk, git_commit_list_node *commit, size_t n_parents)
71
61
  {
62
+ size_t bytes;
63
+
72
64
  if (n_parents <= PARENTS_PER_COMMIT)
73
65
  return (git_commit_list_node **)((char *)commit + sizeof(git_commit_list_node));
74
66
 
75
- return (git_commit_list_node **)git_pool_malloc(
76
- &walk->commit_pool, (uint32_t)(n_parents * sizeof(git_commit_list_node *)));
67
+ if (git__multiply_sizet_overflow(&bytes, n_parents, sizeof(git_commit_list_node *)))
68
+ return NULL;
69
+
70
+ return (git_commit_list_node **)git_pool_malloc(&walk->commit_pool, bytes);
77
71
  }
78
72
 
79
73
 
@@ -107,75 +101,42 @@ git_commit_list_node *git_commit_list_pop(git_commit_list **stack)
107
101
 
108
102
  static int commit_quick_parse(
109
103
  git_revwalk *walk,
110
- git_commit_list_node *commit,
111
- const uint8_t *buffer,
112
- size_t buffer_len)
104
+ git_commit_list_node *node,
105
+ git_odb_object *obj)
113
106
  {
114
- const size_t parent_len = strlen("parent ") + GIT_OID_HEXSZ + 1;
115
- const uint8_t *buffer_end = buffer + buffer_len;
116
- const uint8_t *parents_start, *committer_start;
117
- int i, parents = 0;
118
- int64_t commit_time;
119
-
120
- buffer += strlen("tree ") + GIT_OID_HEXSZ + 1;
121
-
122
- parents_start = buffer;
123
- while (buffer + parent_len < buffer_end && memcmp(buffer, "parent ", strlen("parent ")) == 0) {
124
- parents++;
125
- buffer += parent_len;
126
- }
127
-
128
- commit->parents = alloc_parents(walk, commit, parents);
129
- GITERR_CHECK_ALLOC(commit->parents);
130
-
131
- buffer = parents_start;
132
- for (i = 0; i < parents; ++i) {
133
- git_oid oid;
134
-
135
- if (git_oid_fromstr(&oid, (const char *)buffer + strlen("parent ")) < 0)
136
- return -1;
107
+ git_oid *parent_oid;
108
+ git_commit *commit;
109
+ int error;
110
+ size_t i;
137
111
 
138
- commit->parents[i] = git_revwalk__commit_lookup(walk, &oid);
139
- if (commit->parents[i] == NULL)
140
- return -1;
112
+ commit = git__calloc(1, sizeof(*commit));
113
+ GIT_ERROR_CHECK_ALLOC(commit);
114
+ commit->object.repo = walk->repo;
141
115
 
142
- buffer += parent_len;
116
+ if ((error = git_commit__parse_ext(commit, obj, GIT_COMMIT_PARSE_QUICK)) < 0) {
117
+ git__free(commit);
118
+ return error;
143
119
  }
144
120
 
145
- commit->out_degree = (unsigned short)parents;
146
-
147
- if ((committer_start = buffer = memchr(buffer, '\n', buffer_end - buffer)) == NULL)
148
- return commit_error(commit, "object is corrupted");
149
-
150
- buffer++;
151
-
152
- if ((buffer = memchr(buffer, '\n', buffer_end - buffer)) == NULL)
153
- return commit_error(commit, "object is corrupted");
154
-
155
- /* Skip trailing spaces */
156
- while (buffer > committer_start && git__isspace(*buffer))
157
- buffer--;
158
-
159
- /* Seek for the beginning of the pack of digits */
160
- while (buffer > committer_start && git__isdigit(*buffer))
161
- buffer--;
162
-
163
- /* Skip potential timezone offset */
164
- if ((buffer > committer_start) && (*buffer == '+' || *buffer == '-')) {
165
- buffer--;
121
+ if (!git__is_uint16(git_array_size(commit->parent_ids))) {
122
+ git__free(commit);
123
+ git_error_set(GIT_ERROR_INVALID, "commit has more than 2^16 parents");
124
+ return -1;
125
+ }
166
126
 
167
- while (buffer > committer_start && git__isspace(*buffer))
168
- buffer--;
127
+ node->time = commit->committer->when.time;
128
+ node->out_degree = (uint16_t) git_array_size(commit->parent_ids);
129
+ node->parents = alloc_parents(walk, node, node->out_degree);
130
+ GIT_ERROR_CHECK_ALLOC(node->parents);
169
131
 
170
- while (buffer > committer_start && git__isdigit(*buffer))
171
- buffer--;
132
+ git_array_foreach(commit->parent_ids, i, parent_oid) {
133
+ node->parents[i] = git_revwalk__commit_lookup(walk, parent_oid);
172
134
  }
173
135
 
174
- if ((buffer == committer_start) || (git__strtol64(&commit_time, (char *)(buffer + 1), NULL, 10) < 0))
175
- return commit_error(commit, "cannot parse commit time");
136
+ git_commit__free(commit);
137
+
138
+ node->parsed = 1;
176
139
 
177
- commit->time = commit_time;
178
- commit->parsed = 1;
179
140
  return 0;
180
141
  }
181
142
 
@@ -190,14 +151,11 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
190
151
  if ((error = git_odb_read(&obj, walk->odb, &commit->oid)) < 0)
191
152
  return error;
192
153
 
193
- if (obj->cached.type != GIT_OBJ_COMMIT) {
194
- giterr_set(GITERR_INVALID, "object is no commit object");
154
+ if (obj->cached.type != GIT_OBJECT_COMMIT) {
155
+ git_error_set(GIT_ERROR_INVALID, "object is no commit object");
195
156
  error = -1;
196
157
  } else
197
- error = commit_quick_parse(
198
- walk, commit,
199
- (const uint8_t *)git_odb_object_data(obj),
200
- git_odb_object_size(obj));
158
+ error = commit_quick_parse(walk, commit, obj);
201
159
 
202
160
  git_odb_object_free(obj);
203
161
  return error;
@@ -33,8 +33,8 @@ typedef struct git_commit_list_node {
33
33
  added:1,
34
34
  flags : FLAG_BITS;
35
35
 
36
- unsigned short in_degree;
37
- unsigned short out_degree;
36
+ uint16_t in_degree;
37
+ uint16_t out_degree;
38
38
 
39
39
  struct git_commit_list_node **parents;
40
40
  } git_commit_list_node;