rugged 1.7.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) 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 +23 -10
  5. data/vendor/libgit2/COPYING +195 -1
  6. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  7. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  8. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  9. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  10. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  11. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  12. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  13. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  14. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  15. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  16. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  17. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  18. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  19. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  20. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  21. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  22. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  23. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  24. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  25. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  26. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  29. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  30. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  31. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  32. data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  34. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  35. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  36. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  37. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  38. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  39. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  40. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  41. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  42. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  43. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  44. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  45. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  46. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  47. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  48. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  49. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  50. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  51. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  52. data/vendor/libgit2/include/git2/apply.h +27 -6
  53. data/vendor/libgit2/include/git2/attr.h +17 -4
  54. data/vendor/libgit2/include/git2/blame.h +133 -28
  55. data/vendor/libgit2/include/git2/blob.h +71 -28
  56. data/vendor/libgit2/include/git2/branch.h +22 -15
  57. data/vendor/libgit2/include/git2/buffer.h +6 -4
  58. data/vendor/libgit2/include/git2/cert.h +2 -1
  59. data/vendor/libgit2/include/git2/checkout.h +83 -32
  60. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  61. data/vendor/libgit2/include/git2/clone.h +25 -9
  62. data/vendor/libgit2/include/git2/commit.h +132 -3
  63. data/vendor/libgit2/include/git2/common.h +120 -63
  64. data/vendor/libgit2/include/git2/config.h +93 -23
  65. data/vendor/libgit2/include/git2/credential.h +30 -2
  66. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  67. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  68. data/vendor/libgit2/include/git2/describe.h +13 -1
  69. data/vendor/libgit2/include/git2/diff.h +38 -8
  70. data/vendor/libgit2/include/git2/email.h +9 -29
  71. data/vendor/libgit2/include/git2/errors.h +46 -73
  72. data/vendor/libgit2/include/git2/filter.h +14 -7
  73. data/vendor/libgit2/include/git2/global.h +8 -1
  74. data/vendor/libgit2/include/git2/graph.h +3 -2
  75. data/vendor/libgit2/include/git2/ignore.h +10 -0
  76. data/vendor/libgit2/include/git2/index.h +99 -14
  77. data/vendor/libgit2/include/git2/indexer.h +21 -4
  78. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  79. data/vendor/libgit2/include/git2/merge.h +46 -1
  80. data/vendor/libgit2/include/git2/message.h +2 -2
  81. data/vendor/libgit2/include/git2/net.h +3 -1
  82. data/vendor/libgit2/include/git2/notes.h +9 -6
  83. data/vendor/libgit2/include/git2/object.h +9 -8
  84. data/vendor/libgit2/include/git2/odb.h +91 -49
  85. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  86. data/vendor/libgit2/include/git2/oid.h +23 -24
  87. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  88. data/vendor/libgit2/include/git2/pack.h +13 -1
  89. data/vendor/libgit2/include/git2/patch.h +2 -3
  90. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  91. data/vendor/libgit2/include/git2/proxy.h +10 -0
  92. data/vendor/libgit2/include/git2/rebase.h +9 -6
  93. data/vendor/libgit2/include/git2/refdb.h +2 -2
  94. data/vendor/libgit2/include/git2/reflog.h +3 -2
  95. data/vendor/libgit2/include/git2/refs.h +9 -6
  96. data/vendor/libgit2/include/git2/refspec.h +14 -4
  97. data/vendor/libgit2/include/git2/remote.h +94 -18
  98. data/vendor/libgit2/include/git2/repository.h +57 -21
  99. data/vendor/libgit2/include/git2/reset.h +16 -3
  100. data/vendor/libgit2/include/git2/revert.h +9 -4
  101. data/vendor/libgit2/include/git2/revparse.h +3 -3
  102. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  103. data/vendor/libgit2/include/git2/signature.h +46 -1
  104. data/vendor/libgit2/include/git2/stash.h +17 -3
  105. data/vendor/libgit2/include/git2/status.h +10 -6
  106. data/vendor/libgit2/include/git2/stdint.h +87 -85
  107. data/vendor/libgit2/include/git2/strarray.h +2 -3
  108. data/vendor/libgit2/include/git2/submodule.h +20 -9
  109. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  110. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  111. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  112. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  113. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  114. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  115. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  116. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  117. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  118. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  119. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  120. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  121. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  122. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  123. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  124. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  125. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  126. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  127. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  128. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  129. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  130. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  131. data/vendor/libgit2/include/git2/sys/transport.h +24 -3
  132. data/vendor/libgit2/include/git2/tag.h +3 -1
  133. data/vendor/libgit2/include/git2/trace.h +9 -3
  134. data/vendor/libgit2/include/git2/transaction.h +3 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -3
  136. data/vendor/libgit2/include/git2/tree.h +16 -5
  137. data/vendor/libgit2/include/git2/types.h +19 -3
  138. data/vendor/libgit2/include/git2/version.h +44 -8
  139. data/vendor/libgit2/include/git2/worktree.h +16 -6
  140. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  142. data/vendor/libgit2/src/cli/cmd.c +1 -1
  143. data/vendor/libgit2/src/cli/cmd.h +4 -0
  144. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  145. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  146. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  147. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  149. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  150. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  151. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  152. data/vendor/libgit2/src/cli/common.c +168 -0
  153. data/vendor/libgit2/src/cli/common.h +63 -0
  154. data/vendor/libgit2/src/cli/error.h +1 -1
  155. data/vendor/libgit2/src/cli/main.c +52 -24
  156. data/vendor/libgit2/src/cli/opt.c +29 -3
  157. data/vendor/libgit2/src/cli/opt.h +21 -3
  158. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  159. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  160. data/vendor/libgit2/src/cli/progress.c +51 -2
  161. data/vendor/libgit2/src/cli/progress.h +12 -0
  162. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  163. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  164. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  165. data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
  166. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  167. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  168. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  169. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  170. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  171. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  172. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  173. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  174. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  175. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  176. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  177. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  178. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  179. data/vendor/libgit2/src/libgit2/clone.c +186 -166
  180. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  181. data/vendor/libgit2/src/libgit2/commit.c +92 -0
  182. data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
  183. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  184. data/vendor/libgit2/src/libgit2/config.c +389 -298
  185. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  186. data/vendor/libgit2/src/libgit2/config.h +9 -4
  187. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  188. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  189. data/vendor/libgit2/src/libgit2/config_file.c +99 -88
  190. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  191. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  192. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  193. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  194. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  195. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  196. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  197. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  198. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  199. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  200. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  201. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  202. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  203. data/vendor/libgit2/src/libgit2/email.c +1 -0
  204. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  205. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  206. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  207. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  208. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  209. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  210. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  211. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  212. data/vendor/libgit2/src/libgit2/index.c +68 -90
  213. data/vendor/libgit2/src/libgit2/index.h +2 -2
  214. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  215. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  216. data/vendor/libgit2/src/libgit2/indexer.c +34 -38
  217. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  218. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  219. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  220. data/vendor/libgit2/src/libgit2/merge.c +42 -37
  221. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  222. data/vendor/libgit2/src/libgit2/midx.c +28 -15
  223. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  224. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  225. data/vendor/libgit2/src/libgit2/object.c +6 -5
  226. data/vendor/libgit2/src/libgit2/odb.c +5 -4
  227. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  228. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  229. data/vendor/libgit2/src/libgit2/oid.c +32 -5
  230. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  231. data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
  232. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  233. data/vendor/libgit2/src/libgit2/pack.c +30 -24
  234. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  235. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  236. data/vendor/libgit2/src/libgit2/path.c +1 -1
  237. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  238. data/vendor/libgit2/src/libgit2/push.c +79 -28
  239. data/vendor/libgit2/src/libgit2/push.h +1 -0
  240. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  241. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  242. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  243. data/vendor/libgit2/src/libgit2/refs.c +26 -7
  244. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  245. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  246. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  247. data/vendor/libgit2/src/libgit2/remote.c +121 -61
  248. data/vendor/libgit2/src/libgit2/repository.c +231 -51
  249. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  250. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  251. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  252. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  253. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  254. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  255. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  256. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  257. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  258. data/vendor/libgit2/src/libgit2/status.c +1 -1
  259. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  260. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  261. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  262. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  263. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  264. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  265. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  266. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  267. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  268. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  269. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  270. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  271. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  272. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  273. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  274. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  275. data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
  276. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  277. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  278. data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
  279. data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
  280. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  281. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
  282. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  283. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  284. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  285. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  286. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  287. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  288. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  289. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  290. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  291. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  292. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  293. data/vendor/libgit2/src/util/alloc.c +4 -1
  294. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  295. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  296. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  297. data/vendor/libgit2/src/util/array.h +18 -17
  298. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  299. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  300. data/vendor/libgit2/src/util/date.c +22 -14
  301. data/vendor/libgit2/src/util/date.h +12 -0
  302. data/vendor/libgit2/src/util/errors.c +401 -0
  303. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  304. data/vendor/libgit2/src/util/fs_path.c +15 -4
  305. data/vendor/libgit2/src/util/fs_path.h +23 -0
  306. data/vendor/libgit2/src/util/futils.c +6 -5
  307. data/vendor/libgit2/src/util/futils.h +13 -4
  308. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  309. data/vendor/libgit2/src/util/git2_util.h +6 -0
  310. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  311. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  312. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  313. data/vendor/libgit2/src/util/hashmap.h +424 -0
  314. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  315. data/vendor/libgit2/src/util/integer.h +3 -1
  316. data/vendor/libgit2/src/util/net.c +13 -7
  317. data/vendor/libgit2/src/util/net.h +2 -0
  318. data/vendor/libgit2/src/util/pool.c +1 -1
  319. data/vendor/libgit2/src/util/pool.h +5 -0
  320. data/vendor/libgit2/src/util/pqueue.h +1 -1
  321. data/vendor/libgit2/src/util/process.h +222 -0
  322. data/vendor/libgit2/src/util/rand.c +1 -7
  323. data/vendor/libgit2/src/util/regexp.c +1 -1
  324. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  325. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  326. data/vendor/libgit2/src/util/str.c +2 -2
  327. data/vendor/libgit2/src/util/strlist.c +108 -0
  328. data/vendor/libgit2/src/util/strlist.h +36 -0
  329. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  330. data/vendor/libgit2/src/util/unix/process.c +629 -0
  331. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  332. data/vendor/libgit2/src/util/util.c +2 -2
  333. data/vendor/libgit2/src/util/util.h +4 -38
  334. data/vendor/libgit2/src/util/vector.c +3 -3
  335. data/vendor/libgit2/src/util/vector.h +2 -2
  336. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  337. data/vendor/libgit2/src/util/win32/process.c +506 -0
  338. metadata +45 -28
  339. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  340. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  341. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  342. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  343. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  344. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  345. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  346. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  347. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  348. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  349. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  350. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  351. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  352. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  353. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  354. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  355. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  356. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  357. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  358. data/vendor/libgit2/src/util/khash.h +0 -615
  359. data/vendor/libgit2/src/util/strmap.c +0 -100
  360. data/vendor/libgit2/src/util/strmap.h +0 -131
  361. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -12,7 +12,6 @@
12
12
  #include "hash.h"
13
13
  #include "odb.h"
14
14
  #include "array.h"
15
- #include "oidmap.h"
16
15
  #include "pack-objects.h"
17
16
 
18
17
  #include "git2/odb_backend.h"
@@ -29,9 +28,11 @@ struct memobject {
29
28
  char data[GIT_FLEX_ARRAY];
30
29
  };
31
30
 
31
+ GIT_HASHMAP_OID_SETUP(git_odb_mempack_oidmap, struct memobject *);
32
+
32
33
  struct memory_packer_db {
33
34
  git_odb_backend parent;
34
- git_oidmap *objects;
35
+ git_odb_mempack_oidmap objects;
35
36
  git_array_t(struct memobject *) commits;
36
37
  };
37
38
 
@@ -41,7 +42,7 @@ static int impl__write(git_odb_backend *_backend, const git_oid *oid, const void
41
42
  struct memobject *obj = NULL;
42
43
  size_t alloc_len;
43
44
 
44
- if (git_oidmap_exists(db->objects, oid))
45
+ if (git_odb_mempack_oidmap_contains(&db->objects, oid))
45
46
  return 0;
46
47
 
47
48
  GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, sizeof(struct memobject), len);
@@ -53,7 +54,7 @@ static int impl__write(git_odb_backend *_backend, const git_oid *oid, const void
53
54
  obj->len = len;
54
55
  obj->type = type;
55
56
 
56
- if (git_oidmap_set(db->objects, &obj->oid, obj) < 0)
57
+ if (git_odb_mempack_oidmap_put(&db->objects, &obj->oid, obj) < 0)
57
58
  return -1;
58
59
 
59
60
  if (type == GIT_OBJECT_COMMIT) {
@@ -69,16 +70,17 @@ static int impl__exists(git_odb_backend *backend, const git_oid *oid)
69
70
  {
70
71
  struct memory_packer_db *db = (struct memory_packer_db *)backend;
71
72
 
72
- return git_oidmap_exists(db->objects, oid);
73
+ return git_odb_mempack_oidmap_contains(&db->objects, oid);
73
74
  }
74
75
 
75
76
  static int impl__read(void **buffer_p, size_t *len_p, git_object_t *type_p, git_odb_backend *backend, const git_oid *oid)
76
77
  {
77
78
  struct memory_packer_db *db = (struct memory_packer_db *)backend;
78
79
  struct memobject *obj;
80
+ int error;
79
81
 
80
- if ((obj = git_oidmap_get(db->objects, oid)) == NULL)
81
- return GIT_ENOTFOUND;
82
+ if ((error = git_odb_mempack_oidmap_get(&obj, &db->objects, oid)) != 0)
83
+ return error;
82
84
 
83
85
  *len_p = obj->len;
84
86
  *type_p = obj->type;
@@ -93,9 +95,10 @@ static int impl__read_header(size_t *len_p, git_object_t *type_p, git_odb_backen
93
95
  {
94
96
  struct memory_packer_db *db = (struct memory_packer_db *)backend;
95
97
  struct memobject *obj;
98
+ int error;
96
99
 
97
- if ((obj = git_oidmap_get(db->objects, oid)) == NULL)
98
- return GIT_ENOTFOUND;
100
+ if ((error = git_odb_mempack_oidmap_get(&obj, &db->objects, oid)) != 0)
101
+ return error;
99
102
 
100
103
  *len_p = obj->len;
101
104
  *type_p = obj->type;
@@ -132,6 +135,29 @@ cleanup:
132
135
  return err;
133
136
  }
134
137
 
138
+ int git_mempack_write_thin_pack(git_odb_backend *backend, git_packbuilder *pb)
139
+ {
140
+ struct memory_packer_db *db = (struct memory_packer_db *)backend;
141
+ const git_oid *oid;
142
+ git_hashmap_iter_t iter = GIT_HASHMAP_INIT;
143
+ int err;
144
+
145
+ while (true) {
146
+ err = git_odb_mempack_oidmap_iterate(&iter, &oid, NULL, &db->objects);
147
+
148
+ if (err == GIT_ITEROVER)
149
+ break;
150
+ else if (err != 0)
151
+ return err;
152
+
153
+ err = git_packbuilder_insert(pb, oid, NULL);
154
+ if (err != 0)
155
+ return err;
156
+ }
157
+
158
+ return 0;
159
+ }
160
+
135
161
  int git_mempack_dump(
136
162
  git_buf *pack,
137
163
  git_repository *repo,
@@ -144,14 +170,13 @@ int git_mempack_reset(git_odb_backend *_backend)
144
170
  {
145
171
  struct memory_packer_db *db = (struct memory_packer_db *)_backend;
146
172
  struct memobject *object = NULL;
173
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
147
174
 
148
- git_oidmap_foreach_value(db->objects, object, {
175
+ while (git_odb_mempack_oidmap_iterate(&iter, NULL, &object, &db->objects) == 0)
149
176
  git__free(object);
150
- });
151
177
 
152
178
  git_array_clear(db->commits);
153
-
154
- git_oidmap_clear(db->objects);
179
+ git_odb_mempack_oidmap_clear(&db->objects);
155
180
 
156
181
  return 0;
157
182
  }
@@ -161,7 +186,7 @@ static void impl__free(git_odb_backend *_backend)
161
186
  struct memory_packer_db *db = (struct memory_packer_db *)_backend;
162
187
 
163
188
  git_mempack_reset(_backend);
164
- git_oidmap_free(db->objects);
189
+ git_odb_mempack_oidmap_dispose(&db->objects);
165
190
  git__free(db);
166
191
  }
167
192
 
@@ -174,9 +199,6 @@ int git_mempack_new(git_odb_backend **out)
174
199
  db = git__calloc(1, sizeof(struct memory_packer_db));
175
200
  GIT_ERROR_CHECK_ALLOC(db);
176
201
 
177
- if (git_oidmap_new(&db->objects) < 0)
178
- return -1;
179
-
180
202
  db->parent.version = GIT_ODB_BACKEND_VERSION;
181
203
  db->parent.read = &impl__read;
182
204
  db->parent.write = &impl__write;
@@ -187,3 +209,13 @@ int git_mempack_new(git_odb_backend **out)
187
209
  *out = (git_odb_backend *)db;
188
210
  return 0;
189
211
  }
212
+
213
+ int git_mempack_object_count(size_t *out, git_odb_backend *_backend)
214
+ {
215
+ struct memory_packer_db *db = (struct memory_packer_db *)_backend;
216
+
217
+ GIT_ASSERT_ARG(_backend);
218
+
219
+ *out = (size_t)git_odb_mempack_oidmap_size(&db->objects);
220
+ return 0;
221
+ }
@@ -743,10 +743,10 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
743
743
 
744
744
  #ifdef GIT_EXPERIMENTAL_SHA256
745
745
  opts.odb = odb;
746
+ opts.oid_type = backend->opts.oid_type;
746
747
 
747
748
  error = git_indexer_new(&writepack->indexer,
748
749
  backend->pack_folder,
749
- backend->opts.oid_type,
750
750
  &opts);
751
751
  #else
752
752
  error = git_indexer_new(&writepack->indexer,
@@ -796,13 +796,21 @@ static int pack_backend__writemidx(git_odb_backend *_backend)
796
796
  size_t i;
797
797
  int error = 0;
798
798
 
799
+ #ifdef GIT_EXPERIMENTAL_SHA256
800
+ git_midx_writer_options midx_opts = GIT_MIDX_WRITER_OPTIONS_INIT;
801
+ #endif
802
+
799
803
  GIT_ASSERT_ARG(_backend);
800
804
 
801
805
  backend = (struct pack_backend *)_backend;
802
806
 
807
+ #ifdef GIT_EXPERIMENTAL_SHA256
808
+ midx_opts.oid_type = backend->opts.oid_type;
809
+ #endif
810
+
803
811
  error = git_midx_writer_new(&w, backend->pack_folder
804
812
  #ifdef GIT_EXPERIMENTAL_SHA256
805
- , backend->opts.oid_type
813
+ , &midx_opts
806
814
  #endif
807
815
  );
808
816
 
@@ -863,8 +871,8 @@ static void pack_backend__free(git_odb_backend *_backend)
863
871
  git_mwindow_put_pack(p);
864
872
 
865
873
  git_midx_free(backend->midx);
866
- git_vector_free(&backend->midx_packs);
867
- git_vector_free(&backend->packs);
874
+ git_vector_dispose(&backend->midx_packs);
875
+ git_vector_dispose(&backend->packs);
868
876
  git__free(backend->pack_folder);
869
877
  git__free(backend);
870
878
  }
@@ -883,7 +891,7 @@ static int pack_backend__alloc(
883
891
  }
884
892
 
885
893
  if (git_vector_init(&backend->packs, initial_size, packfile_sort__cb) < 0) {
886
- git_vector_free(&backend->midx_packs);
894
+ git_vector_dispose(&backend->midx_packs);
887
895
  git__free(backend);
888
896
  return -1;
889
897
  }
@@ -9,7 +9,7 @@
9
9
 
10
10
  #include "git2/oid.h"
11
11
  #include "repository.h"
12
- #include "threadstate.h"
12
+ #include "runtime.h"
13
13
  #include <string.h>
14
14
  #include <limits.h>
15
15
 
@@ -153,15 +153,42 @@ int git_oid_pathfmt(char *str, const git_oid *oid)
153
153
  return 0;
154
154
  }
155
155
 
156
+ static git_tlsdata_key thread_str_key;
157
+
158
+ static void GIT_SYSTEM_CALL thread_str_free(void *s)
159
+ {
160
+ char *str = (char *)s;
161
+ git__free(str);
162
+ }
163
+
164
+ static void thread_str_global_shutdown(void)
165
+ {
166
+ char *str = git_tlsdata_get(thread_str_key);
167
+ git_tlsdata_set(thread_str_key, NULL);
168
+
169
+ git__free(str);
170
+ git_tlsdata_dispose(thread_str_key);
171
+ }
172
+
173
+ int git_oid_global_init(void)
174
+ {
175
+ if (git_tlsdata_init(&thread_str_key, thread_str_free) != 0)
176
+ return -1;
177
+
178
+ return git_runtime_shutdown_register(thread_str_global_shutdown);
179
+ }
180
+
156
181
  char *git_oid_tostr_s(const git_oid *oid)
157
182
  {
158
- git_threadstate *threadstate = git_threadstate_get();
159
183
  char *str;
160
184
 
161
- if (!threadstate)
162
- return NULL;
185
+ if ((str = git_tlsdata_get(thread_str_key)) == NULL) {
186
+ if ((str = git__malloc(GIT_OID_MAX_HEXSIZE + 1)) == NULL)
187
+ return NULL;
188
+
189
+ git_tlsdata_set(thread_str_key, str);
190
+ }
163
191
 
164
- str = threadstate->oid_fmt;
165
192
  git_oid_nfmt(str, git_oid_hexsize(git_oid_type(oid)) + 1, oid);
166
193
  return str;
167
194
  }
@@ -66,6 +66,15 @@ GIT_INLINE(size_t) git_oid_hexsize(git_oid_t type)
66
66
  return 0;
67
67
  }
68
68
 
69
+ GIT_INLINE(bool) git_oid_type_is_valid(git_oid_t type)
70
+ {
71
+ return (type == GIT_OID_SHA1
72
+ #ifdef GIT_EXPERIMENTAL_SHA256
73
+ || type == GIT_OID_SHA256
74
+ #endif
75
+ );
76
+ }
77
+
69
78
  GIT_INLINE(const char *) git_oid_type_name(git_oid_t type)
70
79
  {
71
80
  switch (type) {
@@ -270,4 +279,6 @@ int git_oid__fromstrn(
270
279
 
271
280
  int git_oid__fromraw(git_oid *out, const unsigned char *raw, git_oid_t type);
272
281
 
282
+ int git_oid_global_init(void);
283
+
273
284
  #endif
@@ -64,6 +64,9 @@ struct walk_object {
64
64
  /* Size of the buffer to feed to zlib */
65
65
  #define COMPRESS_BUFLEN (1024 * 1024)
66
66
 
67
+ GIT_HASHMAP_OID_FUNCTIONS(git_packbuilder_pobjectmap, GIT_HASHMAP_INLINE, git_pobject *);
68
+ GIT_HASHMAP_OID_FUNCTIONS(git_packbuilder_walk_objectmap, GIT_HASHMAP_INLINE, struct walk_object *);
69
+
67
70
  static unsigned name_hash(const char *name)
68
71
  {
69
72
  unsigned c, hash = 0;
@@ -139,9 +142,7 @@ int git_packbuilder_new(git_packbuilder **out, git_repository *repo)
139
142
  hash_algorithm = git_oid_algorithm(pb->oid_type);
140
143
  GIT_ASSERT(hash_algorithm);
141
144
 
142
- if (git_oidmap_new(&pb->object_ix) < 0 ||
143
- git_oidmap_new(&pb->walk_objects) < 0 ||
144
- git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
145
+ if (git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
145
146
  goto on_error;
146
147
 
147
148
  pb->repo = repo;
@@ -192,10 +193,10 @@ static int rehash(git_packbuilder *pb)
192
193
  git_pobject *po;
193
194
  size_t i;
194
195
 
195
- git_oidmap_clear(pb->object_ix);
196
+ git_packbuilder_pobjectmap_clear(&pb->object_ix);
196
197
 
197
198
  for (i = 0, po = pb->object_list; i < pb->nr_objects; i++, po++) {
198
- if (git_oidmap_set(pb->object_ix, &po->id, po) < 0)
199
+ if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0)
199
200
  return -1;
200
201
  }
201
202
 
@@ -214,7 +215,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
214
215
 
215
216
  /* If the object already exists in the hash table, then we don't
216
217
  * have any work to do */
217
- if (git_oidmap_exists(pb->object_ix, oid))
218
+ if (git_packbuilder_pobjectmap_contains(&pb->object_ix, oid))
218
219
  return 0;
219
220
 
220
221
  if (pb->nr_objects >= pb->nr_alloc) {
@@ -246,7 +247,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
246
247
  git_oid_cpy(&po->id, oid);
247
248
  po->hash = name_hash(name);
248
249
 
249
- if (git_oidmap_set(pb->object_ix, &po->id, po) < 0) {
250
+ if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0) {
250
251
  git_error_set_oom();
251
252
  return -1;
252
253
  }
@@ -515,7 +516,7 @@ static int cb_tag_foreach(const char *name, git_oid *oid, void *data)
515
516
 
516
517
  GIT_UNUSED(name);
517
518
 
518
- if ((po = git_oidmap_get(pb->object_ix, oid)) == NULL)
519
+ if (git_packbuilder_pobjectmap_get(&po, &pb->object_ix, oid) != 0)
519
520
  return 0;
520
521
 
521
522
  po->tagged = 1;
@@ -932,6 +933,9 @@ static int report_delta_progress(
932
933
  {
933
934
  int ret;
934
935
 
936
+ if (pb->failure)
937
+ return pb->failure;
938
+
935
939
  if (pb->progress_cb) {
936
940
  uint64_t current_time = git_time_monotonic();
937
941
  uint64_t elapsed = current_time - pb->last_progress_report_time;
@@ -943,8 +947,10 @@ static int report_delta_progress(
943
947
  GIT_PACKBUILDER_DELTAFICATION,
944
948
  count, pb->nr_objects, pb->progress_cb_payload);
945
949
 
946
- if (ret)
950
+ if (ret) {
951
+ pb->failure = ret;
947
952
  return git_error_set_after_callback(ret);
953
+ }
948
954
  }
949
955
  }
950
956
 
@@ -976,7 +982,10 @@ static int find_deltas(git_packbuilder *pb, git_pobject **list,
976
982
  }
977
983
 
978
984
  pb->nr_deltified += 1;
979
- report_delta_progress(pb, pb->nr_deltified, false);
985
+ if ((error = report_delta_progress(pb, pb->nr_deltified, false)) < 0) {
986
+ GIT_ASSERT(git_packbuilder__progress_unlock(pb) == 0);
987
+ goto on_error;
988
+ }
980
989
 
981
990
  po = *list++;
982
991
  (*list_size)--;
@@ -1124,6 +1133,10 @@ struct thread_params {
1124
1133
  size_t depth;
1125
1134
  size_t working;
1126
1135
  size_t data_ready;
1136
+
1137
+ /* A pb->progress_cb can stop the packing process by returning an error.
1138
+ When that happens, all threads observe the error and stop voluntarily. */
1139
+ bool stopped;
1127
1140
  };
1128
1141
 
1129
1142
  static void *threaded_find_deltas(void *arg)
@@ -1133,7 +1146,12 @@ static void *threaded_find_deltas(void *arg)
1133
1146
  while (me->remaining) {
1134
1147
  if (find_deltas(me->pb, me->list, &me->remaining,
1135
1148
  me->window, me->depth) < 0) {
1136
- ; /* TODO */
1149
+ me->stopped = true;
1150
+ GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_lock(me->pb) == 0, NULL);
1151
+ me->working = false;
1152
+ git_cond_signal(&me->pb->progress_cond);
1153
+ GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_unlock(me->pb) == 0, NULL);
1154
+ return NULL;
1137
1155
  }
1138
1156
 
1139
1157
  GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_lock(me->pb) == 0, NULL);
@@ -1175,8 +1193,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1175
1193
  pb->nr_threads = git__online_cpus();
1176
1194
 
1177
1195
  if (pb->nr_threads <= 1) {
1178
- find_deltas(pb, list, &list_size, window, depth);
1179
- return 0;
1196
+ return find_deltas(pb, list, &list_size, window, depth);
1180
1197
  }
1181
1198
 
1182
1199
  p = git__mallocarray(pb->nr_threads, sizeof(*p));
@@ -1195,6 +1212,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1195
1212
  p[i].depth = depth;
1196
1213
  p[i].working = 1;
1197
1214
  p[i].data_ready = 0;
1215
+ p[i].stopped = 0;
1198
1216
 
1199
1217
  /* try to split chunks on "path" boundaries */
1200
1218
  while (sub_size && sub_size < list_size &&
@@ -1262,7 +1280,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1262
1280
  (!victim || victim->remaining < p[i].remaining))
1263
1281
  victim = &p[i];
1264
1282
 
1265
- if (victim) {
1283
+ if (victim && !target->stopped) {
1266
1284
  sub_size = victim->remaining / 2;
1267
1285
  list = victim->list + victim->list_size - sub_size;
1268
1286
  while (sub_size && list[0]->hash &&
@@ -1286,7 +1304,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1286
1304
  }
1287
1305
  target->list_size = sub_size;
1288
1306
  target->remaining = sub_size;
1289
- target->working = 1;
1307
+ target->working = 1; /* even when target->stopped, so that we don't process this thread again */
1290
1308
  GIT_ASSERT(git_packbuilder__progress_unlock(pb) == 0);
1291
1309
 
1292
1310
  if (git_mutex_lock(&target->mutex)) {
@@ -1299,7 +1317,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1299
1317
  git_cond_signal(&target->cond);
1300
1318
  git_mutex_unlock(&target->mutex);
1301
1319
 
1302
- if (!sub_size) {
1320
+ if (target->stopped || !sub_size) {
1303
1321
  git_thread_join(&target->thread, NULL);
1304
1322
  git_cond_free(&target->cond);
1305
1323
  git_mutex_free(&target->mutex);
@@ -1308,7 +1326,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1308
1326
  }
1309
1327
 
1310
1328
  git__free(p);
1311
- return 0;
1329
+ return pb->failure;
1312
1330
  }
1313
1331
 
1314
1332
  #else
@@ -1319,6 +1337,7 @@ int git_packbuilder__prepare(git_packbuilder *pb)
1319
1337
  {
1320
1338
  git_pobject **delta_list;
1321
1339
  size_t i, n = 0;
1340
+ int error;
1322
1341
 
1323
1342
  if (pb->nr_objects == 0 || pb->done)
1324
1343
  return 0; /* nothing to do */
@@ -1327,8 +1346,10 @@ int git_packbuilder__prepare(git_packbuilder *pb)
1327
1346
  * Although we do not report progress during deltafication, we
1328
1347
  * at least report that we are in the deltafication stage
1329
1348
  */
1330
- if (pb->progress_cb)
1331
- pb->progress_cb(GIT_PACKBUILDER_DELTAFICATION, 0, pb->nr_objects, pb->progress_cb_payload);
1349
+ if (pb->progress_cb) {
1350
+ if ((error = pb->progress_cb(GIT_PACKBUILDER_DELTAFICATION, 0, pb->nr_objects, pb->progress_cb_payload)) < 0)
1351
+ return git_error_set_after_callback(error);
1352
+ }
1332
1353
 
1333
1354
  delta_list = git__mallocarray(pb->nr_objects, sizeof(*delta_list));
1334
1355
  GIT_ERROR_CHECK_ALLOC(delta_list);
@@ -1345,31 +1366,33 @@ int git_packbuilder__prepare(git_packbuilder *pb)
1345
1366
 
1346
1367
  if (n > 1) {
1347
1368
  git__tsort((void **)delta_list, n, type_size_sort);
1348
- if (ll_find_deltas(pb, delta_list, n,
1369
+ if ((error = ll_find_deltas(pb, delta_list, n,
1349
1370
  GIT_PACK_WINDOW + 1,
1350
- GIT_PACK_DEPTH) < 0) {
1371
+ GIT_PACK_DEPTH)) < 0) {
1351
1372
  git__free(delta_list);
1352
- return -1;
1373
+ return error;
1353
1374
  }
1354
1375
  }
1355
1376
 
1356
- report_delta_progress(pb, pb->nr_objects, true);
1377
+ error = report_delta_progress(pb, pb->nr_objects, true);
1357
1378
 
1358
1379
  pb->done = true;
1359
1380
  git__free(delta_list);
1360
- return 0;
1381
+ return error;
1361
1382
  }
1362
1383
 
1363
- #define PREPARE_PACK if (git_packbuilder__prepare(pb) < 0) { return -1; }
1384
+ #define PREPARE_PACK error = git_packbuilder__prepare(pb); if (error < 0) { return error; }
1364
1385
 
1365
1386
  int git_packbuilder_foreach(git_packbuilder *pb, int (*cb)(void *buf, size_t size, void *payload), void *payload)
1366
1387
  {
1388
+ int error;
1367
1389
  PREPARE_PACK;
1368
1390
  return write_pack(pb, cb, payload);
1369
1391
  }
1370
1392
 
1371
1393
  int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb)
1372
1394
  {
1395
+ int error;
1373
1396
  PREPARE_PACK;
1374
1397
 
1375
1398
  return write_pack(pb, &write_pack_buf, buf);
@@ -1419,8 +1442,9 @@ int git_packbuilder_write(
1419
1442
  #ifdef GIT_EXPERIMENTAL_SHA256
1420
1443
  opts.mode = mode;
1421
1444
  opts.odb = pb->odb;
1445
+ opts.oid_type = GIT_OID_SHA1;
1422
1446
 
1423
- error = git_indexer_new(&indexer, path, GIT_OID_SHA1, &opts);
1447
+ error = git_indexer_new(&indexer, path, &opts);
1424
1448
  #else
1425
1449
  error = git_indexer_new(&indexer, path, mode, pb->odb, &opts);
1426
1450
  #endif
@@ -1584,12 +1608,16 @@ static int retrieve_object(struct walk_object **out, git_packbuilder *pb, const
1584
1608
  struct walk_object *obj;
1585
1609
  int error;
1586
1610
 
1587
- if ((obj = git_oidmap_get(pb->walk_objects, id)) == NULL) {
1611
+ error = git_packbuilder_walk_objectmap_get(&obj, &pb->walk_objects, id);
1612
+
1613
+ if (error == GIT_ENOTFOUND) {
1588
1614
  if ((error = lookup_walk_object(&obj, pb, id)) < 0)
1589
1615
  return error;
1590
1616
 
1591
- if ((error = git_oidmap_set(pb->walk_objects, &obj->id, obj)) < 0)
1617
+ if ((error = git_packbuilder_walk_objectmap_put(&pb->walk_objects, &obj->id, obj)) < 0)
1592
1618
  return error;
1619
+ } else if (error != 0) {
1620
+ return error;
1593
1621
  }
1594
1622
 
1595
1623
  *out = obj;
@@ -1821,13 +1849,12 @@ void git_packbuilder_free(git_packbuilder *pb)
1821
1849
  if (pb->odb)
1822
1850
  git_odb_free(pb->odb);
1823
1851
 
1824
- if (pb->object_ix)
1825
- git_oidmap_free(pb->object_ix);
1852
+ git_packbuilder_pobjectmap_dispose(&pb->object_ix);
1826
1853
 
1827
1854
  if (pb->object_list)
1828
1855
  git__free(pb->object_list);
1829
1856
 
1830
- git_oidmap_free(pb->walk_objects);
1857
+ git_packbuilder_walk_objectmap_dispose(&pb->walk_objects);
1831
1858
  git_pool_clear(&pb->object_pool);
1832
1859
 
1833
1860
  git_hash_ctx_cleanup(&pb->ctx);
@@ -12,10 +12,10 @@
12
12
 
13
13
  #include "str.h"
14
14
  #include "hash.h"
15
- #include "oidmap.h"
16
15
  #include "zstream.h"
17
16
  #include "pool.h"
18
17
  #include "indexer.h"
18
+ #include "hashmap_oid.h"
19
19
 
20
20
  #include "git2/oid.h"
21
21
  #include "git2/pack.h"
@@ -51,6 +51,11 @@ typedef struct git_pobject {
51
51
  filled:1;
52
52
  } git_pobject;
53
53
 
54
+ typedef struct walk_object walk_object;
55
+
56
+ GIT_HASHMAP_OID_STRUCT(git_packbuilder_pobjectmap, git_pobject *);
57
+ GIT_HASHMAP_OID_STRUCT(git_packbuilder_walk_objectmap, walk_object *);
58
+
54
59
  struct git_packbuilder {
55
60
  git_repository *repo; /* associated repository */
56
61
  git_odb *odb; /* associated object database */
@@ -69,9 +74,8 @@ struct git_packbuilder {
69
74
 
70
75
  git_pobject *object_list;
71
76
 
72
- git_oidmap *object_ix;
73
-
74
- git_oidmap *walk_objects;
77
+ git_packbuilder_pobjectmap object_ix;
78
+ git_packbuilder_walk_objectmap walk_objects;
75
79
  git_pool object_pool;
76
80
 
77
81
  #ifndef GIT_DEPRECATE_HARD
@@ -100,6 +104,10 @@ struct git_packbuilder {
100
104
  uint64_t last_progress_report_time;
101
105
 
102
106
  bool done;
107
+
108
+ /* A non-zero error code in failure causes all threads to shut themselves
109
+ down. Some functions will return this error code. */
110
+ volatile int failure;
103
111
  };
104
112
 
105
113
  int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb);