rugged 1.7.2 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
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);