rugged 1.6.3 → 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 (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -309,11 +309,17 @@ static int pack_entry_find_prefix(
309
309
  {
310
310
  int error;
311
311
  size_t i;
312
- git_oid found_full_oid = GIT_OID_SHA1_ZERO;
312
+ git_oid found_full_oid;
313
313
  bool found = false;
314
314
  struct git_pack_file *last_found = backend->last_found, *p;
315
315
  git_midx_entry midx_entry;
316
316
 
317
+ #ifdef GIT_EXPERIMENTAL_SHA256
318
+ git_oid_clear(&found_full_oid, short_oid->type);
319
+ #else
320
+ git_oid_clear(&found_full_oid, GIT_OID_SHA1);
321
+ #endif
322
+
317
323
  if (backend->midx) {
318
324
  error = git_midx_entry_find(&midx_entry, backend->midx, short_oid, len);
319
325
  if (error == GIT_EAMBIGUOUS)
@@ -473,7 +479,9 @@ static int refresh_multi_pack_index(struct pack_backend *backend)
473
479
  }
474
480
  }
475
481
 
476
- error = git_midx_open(&backend->midx, git_str_cstr(&midx_path));
482
+ error = git_midx_open(&backend->midx, git_str_cstr(&midx_path),
483
+ backend->opts.oid_type);
484
+
477
485
  git_str_dispose(&midx_path);
478
486
  if (error < 0)
479
487
  return error;
@@ -735,10 +743,10 @@ static int pack_backend__writepack(struct git_odb_writepack **out,
735
743
 
736
744
  #ifdef GIT_EXPERIMENTAL_SHA256
737
745
  opts.odb = odb;
746
+ opts.oid_type = backend->opts.oid_type;
738
747
 
739
748
  error = git_indexer_new(&writepack->indexer,
740
749
  backend->pack_folder,
741
- backend->opts.oid_type,
742
750
  &opts);
743
751
  #else
744
752
  error = git_indexer_new(&writepack->indexer,
@@ -788,11 +796,24 @@ static int pack_backend__writemidx(git_odb_backend *_backend)
788
796
  size_t i;
789
797
  int error = 0;
790
798
 
799
+ #ifdef GIT_EXPERIMENTAL_SHA256
800
+ git_midx_writer_options midx_opts = GIT_MIDX_WRITER_OPTIONS_INIT;
801
+ #endif
802
+
791
803
  GIT_ASSERT_ARG(_backend);
792
804
 
793
805
  backend = (struct pack_backend *)_backend;
794
806
 
795
- error = git_midx_writer_new(&w, backend->pack_folder);
807
+ #ifdef GIT_EXPERIMENTAL_SHA256
808
+ midx_opts.oid_type = backend->opts.oid_type;
809
+ #endif
810
+
811
+ error = git_midx_writer_new(&w, backend->pack_folder
812
+ #ifdef GIT_EXPERIMENTAL_SHA256
813
+ , &midx_opts
814
+ #endif
815
+ );
816
+
796
817
  if (error < 0)
797
818
  return error;
798
819
 
@@ -850,8 +871,8 @@ static void pack_backend__free(git_odb_backend *_backend)
850
871
  git_mwindow_put_pack(p);
851
872
 
852
873
  git_midx_free(backend->midx);
853
- git_vector_free(&backend->midx_packs);
854
- git_vector_free(&backend->packs);
874
+ git_vector_dispose(&backend->midx_packs);
875
+ git_vector_dispose(&backend->packs);
855
876
  git__free(backend->pack_folder);
856
877
  git__free(backend);
857
878
  }
@@ -870,7 +891,7 @@ static int pack_backend__alloc(
870
891
  }
871
892
 
872
893
  if (git_vector_init(&backend->packs, initial_size, packfile_sort__cb) < 0) {
873
- git_vector_free(&backend->midx_packs);
894
+ git_vector_dispose(&backend->midx_packs);
874
895
  git__free(backend);
875
896
  return -1;
876
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,9 +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
- char *str = GIT_THREADSTATE->oid_fmt;
183
+ char *str;
184
+
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
+ }
191
+
159
192
  git_oid_nfmt(str, git_oid_hexsize(git_oid_type(oid)) + 1, oid);
160
193
  return str;
161
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
@@ -15,10 +15,17 @@ void git_oidarray_dispose(git_oidarray *arr)
15
15
  git__free(arr->ids);
16
16
  }
17
17
 
18
- void git_oidarray__from_array(git_oidarray *arr, git_array_oid_t *array)
18
+ void git_oidarray__from_array(git_oidarray *out, const git_array_oid_t *array)
19
19
  {
20
- arr->count = array->size;
21
- arr->ids = array->ptr;
20
+ out->count = array->size;
21
+ out->ids = array->ptr;
22
+ }
23
+
24
+ void git_oidarray__to_array(git_array_oid_t *out, const git_oidarray *array)
25
+ {
26
+ out->ptr = array->ids;
27
+ out->size = array->count;
28
+ out->asize = array->count;
22
29
  }
23
30
 
24
31
  void git_oidarray__reverse(git_oidarray *arr)
@@ -33,6 +40,45 @@ void git_oidarray__reverse(git_oidarray *arr)
33
40
  }
34
41
  }
35
42
 
43
+ int git_oidarray__add(git_array_oid_t *arr, git_oid *id)
44
+ {
45
+ git_oid *add, *iter;
46
+ size_t i;
47
+
48
+ git_array_foreach(*arr, i, iter) {
49
+ if (git_oid_cmp(iter, id) == 0)
50
+ return 0;
51
+ }
52
+
53
+ if ((add = git_array_alloc(*arr)) == NULL)
54
+ return -1;
55
+
56
+ git_oid_cpy(add, id);
57
+ return 0;
58
+ }
59
+
60
+ bool git_oidarray__remove(git_array_oid_t *arr, git_oid *id)
61
+ {
62
+ bool found = false;
63
+ size_t remain, i;
64
+ git_oid *iter;
65
+
66
+ git_array_foreach(*arr, i, iter) {
67
+ if (git_oid_cmp(iter, id) == 0) {
68
+ arr->size--;
69
+ remain = arr->size - i;
70
+
71
+ if (remain > 0)
72
+ memmove(&arr->ptr[i], &arr->ptr[i+1], remain * sizeof(git_oid));
73
+
74
+ found = true;
75
+ break;
76
+ }
77
+ }
78
+
79
+ return found;
80
+ }
81
+
36
82
  #ifndef GIT_DEPRECATE_HARD
37
83
 
38
84
  void git_oidarray_free(git_oidarray *arr)
@@ -15,6 +15,10 @@
15
15
  typedef git_array_t(git_oid) git_array_oid_t;
16
16
 
17
17
  extern void git_oidarray__reverse(git_oidarray *arr);
18
- extern void git_oidarray__from_array(git_oidarray *arr, git_array_oid_t *array);
18
+ extern void git_oidarray__from_array(git_oidarray *out, const git_array_oid_t *array);
19
+ extern void git_oidarray__to_array(git_array_oid_t *out, const git_oidarray *array);
20
+
21
+ int git_oidarray__add(git_array_oid_t *arr, git_oid *id);
22
+ bool git_oidarray__remove(git_array_oid_t *arr, git_oid *id);
19
23
 
20
24
  #endif
@@ -11,7 +11,6 @@
11
11
  #include "zstream.h"
12
12
  #include "delta.h"
13
13
  #include "iterator.h"
14
- #include "netops.h"
15
14
  #include "pack.h"
16
15
  #include "thread.h"
17
16
  #include "tree.h"
@@ -65,6 +64,9 @@ struct walk_object {
65
64
  /* Size of the buffer to feed to zlib */
66
65
  #define COMPRESS_BUFLEN (1024 * 1024)
67
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
+
68
70
  static unsigned name_hash(const char *name)
69
71
  {
70
72
  unsigned c, hash = 0;
@@ -127,6 +129,7 @@ out:
127
129
 
128
130
  int git_packbuilder_new(git_packbuilder **out, git_repository *repo)
129
131
  {
132
+ git_hash_algorithm_t hash_algorithm;
130
133
  git_packbuilder *pb;
131
134
 
132
135
  *out = NULL;
@@ -134,15 +137,18 @@ int git_packbuilder_new(git_packbuilder **out, git_repository *repo)
134
137
  pb = git__calloc(1, sizeof(*pb));
135
138
  GIT_ERROR_CHECK_ALLOC(pb);
136
139
 
137
- if (git_oidmap_new(&pb->object_ix) < 0 ||
138
- git_oidmap_new(&pb->walk_objects) < 0 ||
139
- git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
140
+ pb->oid_type = repo->oid_type;
141
+
142
+ hash_algorithm = git_oid_algorithm(pb->oid_type);
143
+ GIT_ASSERT(hash_algorithm);
144
+
145
+ if (git_pool_init(&pb->object_pool, sizeof(struct walk_object)) < 0)
140
146
  goto on_error;
141
147
 
142
148
  pb->repo = repo;
143
149
  pb->nr_threads = 1; /* do not spawn any thread by default */
144
150
 
145
- if (git_hash_ctx_init(&pb->ctx, GIT_HASH_ALGORITHM_SHA1) < 0 ||
151
+ if (git_hash_ctx_init(&pb->ctx, hash_algorithm) < 0 ||
146
152
  git_zstream_init(&pb->zstream, GIT_ZSTREAM_DEFLATE) < 0 ||
147
153
  git_repository_odb(&pb->odb, repo) < 0 ||
148
154
  packbuilder_config(pb) < 0)
@@ -187,10 +193,10 @@ static int rehash(git_packbuilder *pb)
187
193
  git_pobject *po;
188
194
  size_t i;
189
195
 
190
- git_oidmap_clear(pb->object_ix);
196
+ git_packbuilder_pobjectmap_clear(&pb->object_ix);
191
197
 
192
198
  for (i = 0, po = pb->object_list; i < pb->nr_objects; i++, po++) {
193
- if (git_oidmap_set(pb->object_ix, &po->id, po) < 0)
199
+ if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0)
194
200
  return -1;
195
201
  }
196
202
 
@@ -209,7 +215,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
209
215
 
210
216
  /* If the object already exists in the hash table, then we don't
211
217
  * have any work to do */
212
- if (git_oidmap_exists(pb->object_ix, oid))
218
+ if (git_packbuilder_pobjectmap_contains(&pb->object_ix, oid))
213
219
  return 0;
214
220
 
215
221
  if (pb->nr_objects >= pb->nr_alloc) {
@@ -241,7 +247,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
241
247
  git_oid_cpy(&po->id, oid);
242
248
  po->hash = name_hash(name);
243
249
 
244
- if (git_oidmap_set(pb->object_ix, &po->id, po) < 0) {
250
+ if (git_packbuilder_pobjectmap_put(&pb->object_ix, &po->id, po) < 0) {
245
251
  git_error_set_oom();
246
252
  return -1;
247
253
  }
@@ -249,10 +255,10 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
249
255
  pb->done = false;
250
256
 
251
257
  if (pb->progress_cb) {
252
- double current_time = git__timer();
253
- double elapsed = current_time - pb->last_progress_report_time;
258
+ uint64_t current_time = git_time_monotonic();
259
+ uint64_t elapsed = current_time - pb->last_progress_report_time;
254
260
 
255
- if (elapsed < 0 || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
261
+ if (elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
256
262
  pb->last_progress_report_time = current_time;
257
263
 
258
264
  ret = pb->progress_cb(
@@ -315,9 +321,11 @@ static int write_object(
315
321
  git_object_t type;
316
322
  unsigned char hdr[10], *zbuf = NULL;
317
323
  void *data = NULL;
318
- size_t hdr_len, zbuf_len = COMPRESS_BUFLEN, data_len;
324
+ size_t hdr_len, zbuf_len = COMPRESS_BUFLEN, data_len, oid_size;
319
325
  int error;
320
326
 
327
+ oid_size = git_oid_size(pb->oid_type);
328
+
321
329
  /*
322
330
  * If we have a delta base, let's use the delta to save space.
323
331
  * Otherwise load the whole object. 'data' ends up pointing to
@@ -347,8 +355,8 @@ static int write_object(
347
355
  goto done;
348
356
 
349
357
  if (type == GIT_OBJECT_REF_DELTA) {
350
- if ((error = write_cb(po->delta->id.id, GIT_OID_SHA1_SIZE, cb_data)) < 0 ||
351
- (error = git_hash_update(&pb->ctx, po->delta->id.id, GIT_OID_SHA1_SIZE)) < 0)
358
+ if ((error = write_cb(po->delta->id.id, oid_size, cb_data)) < 0 ||
359
+ (error = git_hash_update(&pb->ctx, po->delta->id.id, oid_size)) < 0)
352
360
  goto done;
353
361
  }
354
362
 
@@ -508,7 +516,7 @@ static int cb_tag_foreach(const char *name, git_oid *oid, void *data)
508
516
 
509
517
  GIT_UNUSED(name);
510
518
 
511
- if ((po = git_oidmap_get(pb->object_ix, oid)) == NULL)
519
+ if (git_packbuilder_pobjectmap_get(&po, &pb->object_ix, oid) != 0)
512
520
  return 0;
513
521
 
514
522
  po->tagged = 1;
@@ -668,7 +676,7 @@ static int write_pack(git_packbuilder *pb,
668
676
  if ((error = git_hash_final(entry_oid.id, &pb->ctx)) < 0)
669
677
  goto done;
670
678
 
671
- error = write_cb(entry_oid.id, GIT_OID_SHA1_SIZE, cb_data);
679
+ error = write_cb(entry_oid.id, git_oid_size(pb->oid_type), cb_data);
672
680
 
673
681
  done:
674
682
  /* if callback cancelled writing, we must still free delta_data */
@@ -925,19 +933,24 @@ static int report_delta_progress(
925
933
  {
926
934
  int ret;
927
935
 
936
+ if (pb->failure)
937
+ return pb->failure;
938
+
928
939
  if (pb->progress_cb) {
929
- double current_time = git__timer();
930
- double elapsed = current_time - pb->last_progress_report_time;
940
+ uint64_t current_time = git_time_monotonic();
941
+ uint64_t elapsed = current_time - pb->last_progress_report_time;
931
942
 
932
- if (force || elapsed < 0 || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
943
+ if (force || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
933
944
  pb->last_progress_report_time = current_time;
934
945
 
935
946
  ret = pb->progress_cb(
936
947
  GIT_PACKBUILDER_DELTAFICATION,
937
948
  count, pb->nr_objects, pb->progress_cb_payload);
938
949
 
939
- if (ret)
950
+ if (ret) {
951
+ pb->failure = ret;
940
952
  return git_error_set_after_callback(ret);
953
+ }
941
954
  }
942
955
  }
943
956
 
@@ -969,7 +982,10 @@ static int find_deltas(git_packbuilder *pb, git_pobject **list,
969
982
  }
970
983
 
971
984
  pb->nr_deltified += 1;
972
- 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
+ }
973
989
 
974
990
  po = *list++;
975
991
  (*list_size)--;
@@ -1117,6 +1133,10 @@ struct thread_params {
1117
1133
  size_t depth;
1118
1134
  size_t working;
1119
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;
1120
1140
  };
1121
1141
 
1122
1142
  static void *threaded_find_deltas(void *arg)
@@ -1126,7 +1146,12 @@ static void *threaded_find_deltas(void *arg)
1126
1146
  while (me->remaining) {
1127
1147
  if (find_deltas(me->pb, me->list, &me->remaining,
1128
1148
  me->window, me->depth) < 0) {
1129
- ; /* 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;
1130
1155
  }
1131
1156
 
1132
1157
  GIT_ASSERT_WITH_RETVAL(git_packbuilder__progress_lock(me->pb) == 0, NULL);
@@ -1168,8 +1193,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1168
1193
  pb->nr_threads = git__online_cpus();
1169
1194
 
1170
1195
  if (pb->nr_threads <= 1) {
1171
- find_deltas(pb, list, &list_size, window, depth);
1172
- return 0;
1196
+ return find_deltas(pb, list, &list_size, window, depth);
1173
1197
  }
1174
1198
 
1175
1199
  p = git__mallocarray(pb->nr_threads, sizeof(*p));
@@ -1188,6 +1212,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1188
1212
  p[i].depth = depth;
1189
1213
  p[i].working = 1;
1190
1214
  p[i].data_ready = 0;
1215
+ p[i].stopped = 0;
1191
1216
 
1192
1217
  /* try to split chunks on "path" boundaries */
1193
1218
  while (sub_size && sub_size < list_size &&
@@ -1255,7 +1280,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1255
1280
  (!victim || victim->remaining < p[i].remaining))
1256
1281
  victim = &p[i];
1257
1282
 
1258
- if (victim) {
1283
+ if (victim && !target->stopped) {
1259
1284
  sub_size = victim->remaining / 2;
1260
1285
  list = victim->list + victim->list_size - sub_size;
1261
1286
  while (sub_size && list[0]->hash &&
@@ -1279,7 +1304,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1279
1304
  }
1280
1305
  target->list_size = sub_size;
1281
1306
  target->remaining = sub_size;
1282
- target->working = 1;
1307
+ target->working = 1; /* even when target->stopped, so that we don't process this thread again */
1283
1308
  GIT_ASSERT(git_packbuilder__progress_unlock(pb) == 0);
1284
1309
 
1285
1310
  if (git_mutex_lock(&target->mutex)) {
@@ -1292,7 +1317,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1292
1317
  git_cond_signal(&target->cond);
1293
1318
  git_mutex_unlock(&target->mutex);
1294
1319
 
1295
- if (!sub_size) {
1320
+ if (target->stopped || !sub_size) {
1296
1321
  git_thread_join(&target->thread, NULL);
1297
1322
  git_cond_free(&target->cond);
1298
1323
  git_mutex_free(&target->mutex);
@@ -1301,7 +1326,7 @@ static int ll_find_deltas(git_packbuilder *pb, git_pobject **list,
1301
1326
  }
1302
1327
 
1303
1328
  git__free(p);
1304
- return 0;
1329
+ return pb->failure;
1305
1330
  }
1306
1331
 
1307
1332
  #else
@@ -1312,6 +1337,7 @@ int git_packbuilder__prepare(git_packbuilder *pb)
1312
1337
  {
1313
1338
  git_pobject **delta_list;
1314
1339
  size_t i, n = 0;
1340
+ int error;
1315
1341
 
1316
1342
  if (pb->nr_objects == 0 || pb->done)
1317
1343
  return 0; /* nothing to do */
@@ -1320,8 +1346,10 @@ int git_packbuilder__prepare(git_packbuilder *pb)
1320
1346
  * Although we do not report progress during deltafication, we
1321
1347
  * at least report that we are in the deltafication stage
1322
1348
  */
1323
- if (pb->progress_cb)
1324
- 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
+ }
1325
1353
 
1326
1354
  delta_list = git__mallocarray(pb->nr_objects, sizeof(*delta_list));
1327
1355
  GIT_ERROR_CHECK_ALLOC(delta_list);
@@ -1338,31 +1366,33 @@ int git_packbuilder__prepare(git_packbuilder *pb)
1338
1366
 
1339
1367
  if (n > 1) {
1340
1368
  git__tsort((void **)delta_list, n, type_size_sort);
1341
- if (ll_find_deltas(pb, delta_list, n,
1369
+ if ((error = ll_find_deltas(pb, delta_list, n,
1342
1370
  GIT_PACK_WINDOW + 1,
1343
- GIT_PACK_DEPTH) < 0) {
1371
+ GIT_PACK_DEPTH)) < 0) {
1344
1372
  git__free(delta_list);
1345
- return -1;
1373
+ return error;
1346
1374
  }
1347
1375
  }
1348
1376
 
1349
- report_delta_progress(pb, pb->nr_objects, true);
1377
+ error = report_delta_progress(pb, pb->nr_objects, true);
1350
1378
 
1351
1379
  pb->done = true;
1352
1380
  git__free(delta_list);
1353
- return 0;
1381
+ return error;
1354
1382
  }
1355
1383
 
1356
- #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; }
1357
1385
 
1358
1386
  int git_packbuilder_foreach(git_packbuilder *pb, int (*cb)(void *buf, size_t size, void *payload), void *payload)
1359
1387
  {
1388
+ int error;
1360
1389
  PREPARE_PACK;
1361
1390
  return write_pack(pb, cb, payload);
1362
1391
  }
1363
1392
 
1364
1393
  int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb)
1365
1394
  {
1395
+ int error;
1366
1396
  PREPARE_PACK;
1367
1397
 
1368
1398
  return write_pack(pb, &write_pack_buf, buf);
@@ -1412,8 +1442,9 @@ int git_packbuilder_write(
1412
1442
  #ifdef GIT_EXPERIMENTAL_SHA256
1413
1443
  opts.mode = mode;
1414
1444
  opts.odb = pb->odb;
1445
+ opts.oid_type = GIT_OID_SHA1;
1415
1446
 
1416
- error = git_indexer_new(&indexer, path, GIT_OID_SHA1, &opts);
1447
+ error = git_indexer_new(&indexer, path, &opts);
1417
1448
  #else
1418
1449
  error = git_indexer_new(&indexer, path, mode, pb->odb, &opts);
1419
1450
  #endif
@@ -1577,12 +1608,16 @@ static int retrieve_object(struct walk_object **out, git_packbuilder *pb, const
1577
1608
  struct walk_object *obj;
1578
1609
  int error;
1579
1610
 
1580
- 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) {
1581
1614
  if ((error = lookup_walk_object(&obj, pb, id)) < 0)
1582
1615
  return error;
1583
1616
 
1584
- 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)
1585
1618
  return error;
1619
+ } else if (error != 0) {
1620
+ return error;
1586
1621
  }
1587
1622
 
1588
1623
  *out = obj;
@@ -1814,13 +1849,12 @@ void git_packbuilder_free(git_packbuilder *pb)
1814
1849
  if (pb->odb)
1815
1850
  git_odb_free(pb->odb);
1816
1851
 
1817
- if (pb->object_ix)
1818
- git_oidmap_free(pb->object_ix);
1852
+ git_packbuilder_pobjectmap_dispose(&pb->object_ix);
1819
1853
 
1820
1854
  if (pb->object_list)
1821
1855
  git__free(pb->object_list);
1822
1856
 
1823
- git_oidmap_free(pb->walk_objects);
1857
+ git_packbuilder_walk_objectmap_dispose(&pb->walk_objects);
1824
1858
  git_pool_clear(&pb->object_pool);
1825
1859
 
1826
1860
  git_hash_ctx_cleanup(&pb->ctx);
@@ -12,11 +12,10 @@
12
12
 
13
13
  #include "str.h"
14
14
  #include "hash.h"
15
- #include "oidmap.h"
16
- #include "netops.h"
17
15
  #include "zstream.h"
18
16
  #include "pool.h"
19
17
  #include "indexer.h"
18
+ #include "hashmap_oid.h"
20
19
 
21
20
  #include "git2/oid.h"
22
21
  #include "git2/pack.h"
@@ -52,10 +51,17 @@ typedef struct git_pobject {
52
51
  filled:1;
53
52
  } git_pobject;
54
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
+
55
59
  struct git_packbuilder {
56
60
  git_repository *repo; /* associated repository */
57
61
  git_odb *odb; /* associated object database */
58
62
 
63
+ git_oid_t oid_type;
64
+
59
65
  git_hash_ctx ctx;
60
66
  git_zstream zstream;
61
67
 
@@ -68,9 +74,8 @@ struct git_packbuilder {
68
74
 
69
75
  git_pobject *object_list;
70
76
 
71
- git_oidmap *object_ix;
72
-
73
- git_oidmap *walk_objects;
77
+ git_packbuilder_pobjectmap object_ix;
78
+ git_packbuilder_walk_objectmap walk_objects;
74
79
  git_pool object_pool;
75
80
 
76
81
  #ifndef GIT_DEPRECATE_HARD
@@ -94,9 +99,15 @@ struct git_packbuilder {
94
99
 
95
100
  git_packbuilder_progress progress_cb;
96
101
  void *progress_cb_payload;
97
- double last_progress_report_time; /* the time progress was last reported */
102
+
103
+ /* the time progress was last reported, in millisecond ticks */
104
+ uint64_t last_progress_report_time;
98
105
 
99
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;
100
111
  };
101
112
 
102
113
  int git_packbuilder__write_buf(git_str *buf, git_packbuilder *pb);