rugged 1.7.2 → 1.9.4

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 (405) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +195 -1
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
  59. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  60. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  61. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  62. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  63. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  64. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  65. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  66. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  67. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  68. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  69. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  70. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  71. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  72. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  73. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  74. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  75. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  76. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  77. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  78. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  79. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  80. data/vendor/libgit2/include/git2/apply.h +27 -6
  81. data/vendor/libgit2/include/git2/attr.h +17 -4
  82. data/vendor/libgit2/include/git2/blame.h +133 -28
  83. data/vendor/libgit2/include/git2/blob.h +71 -28
  84. data/vendor/libgit2/include/git2/branch.h +22 -15
  85. data/vendor/libgit2/include/git2/buffer.h +6 -4
  86. data/vendor/libgit2/include/git2/cert.h +2 -1
  87. data/vendor/libgit2/include/git2/checkout.h +83 -32
  88. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  89. data/vendor/libgit2/include/git2/clone.h +25 -9
  90. data/vendor/libgit2/include/git2/commit.h +132 -3
  91. data/vendor/libgit2/include/git2/common.h +120 -63
  92. data/vendor/libgit2/include/git2/config.h +93 -23
  93. data/vendor/libgit2/include/git2/credential.h +30 -2
  94. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  96. data/vendor/libgit2/include/git2/describe.h +13 -1
  97. data/vendor/libgit2/include/git2/diff.h +38 -8
  98. data/vendor/libgit2/include/git2/email.h +9 -29
  99. data/vendor/libgit2/include/git2/errors.h +46 -73
  100. data/vendor/libgit2/include/git2/filter.h +14 -7
  101. data/vendor/libgit2/include/git2/global.h +8 -1
  102. data/vendor/libgit2/include/git2/graph.h +3 -2
  103. data/vendor/libgit2/include/git2/ignore.h +10 -0
  104. data/vendor/libgit2/include/git2/index.h +100 -15
  105. data/vendor/libgit2/include/git2/indexer.h +21 -4
  106. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  107. data/vendor/libgit2/include/git2/merge.h +50 -3
  108. data/vendor/libgit2/include/git2/message.h +2 -2
  109. data/vendor/libgit2/include/git2/net.h +3 -1
  110. data/vendor/libgit2/include/git2/notes.h +9 -6
  111. data/vendor/libgit2/include/git2/object.h +9 -8
  112. data/vendor/libgit2/include/git2/odb.h +91 -49
  113. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  114. data/vendor/libgit2/include/git2/oid.h +23 -25
  115. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  116. data/vendor/libgit2/include/git2/pack.h +13 -1
  117. data/vendor/libgit2/include/git2/patch.h +2 -3
  118. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  119. data/vendor/libgit2/include/git2/proxy.h +12 -3
  120. data/vendor/libgit2/include/git2/rebase.h +9 -6
  121. data/vendor/libgit2/include/git2/refdb.h +2 -2
  122. data/vendor/libgit2/include/git2/reflog.h +3 -2
  123. data/vendor/libgit2/include/git2/refs.h +9 -6
  124. data/vendor/libgit2/include/git2/refspec.h +14 -4
  125. data/vendor/libgit2/include/git2/remote.h +113 -25
  126. data/vendor/libgit2/include/git2/repository.h +57 -21
  127. data/vendor/libgit2/include/git2/reset.h +16 -3
  128. data/vendor/libgit2/include/git2/revert.h +9 -4
  129. data/vendor/libgit2/include/git2/revparse.h +3 -3
  130. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  131. data/vendor/libgit2/include/git2/signature.h +46 -1
  132. data/vendor/libgit2/include/git2/stash.h +17 -3
  133. data/vendor/libgit2/include/git2/status.h +10 -6
  134. data/vendor/libgit2/include/git2/stdint.h +87 -85
  135. data/vendor/libgit2/include/git2/strarray.h +2 -3
  136. data/vendor/libgit2/include/git2/submodule.h +20 -9
  137. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  138. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  139. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  140. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  141. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  142. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  143. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  144. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  145. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  146. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  147. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  148. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  149. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  150. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  151. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  152. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  153. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  154. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  155. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  156. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  157. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  158. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  159. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  160. data/vendor/libgit2/include/git2/tag.h +3 -1
  161. data/vendor/libgit2/include/git2/trace.h +9 -3
  162. data/vendor/libgit2/include/git2/transaction.h +3 -2
  163. data/vendor/libgit2/include/git2/transport.h +11 -3
  164. data/vendor/libgit2/include/git2/tree.h +16 -5
  165. data/vendor/libgit2/include/git2/types.h +19 -3
  166. data/vendor/libgit2/include/git2/version.h +46 -8
  167. data/vendor/libgit2/include/git2/worktree.h +16 -6
  168. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  169. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  170. data/vendor/libgit2/src/cli/cmd.c +1 -1
  171. data/vendor/libgit2/src/cli/cmd.h +4 -0
  172. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  173. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  174. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  175. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  176. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  177. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  178. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  179. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  180. data/vendor/libgit2/src/cli/common.c +168 -0
  181. data/vendor/libgit2/src/cli/common.h +63 -0
  182. data/vendor/libgit2/src/cli/error.h +1 -1
  183. data/vendor/libgit2/src/cli/main.c +52 -24
  184. data/vendor/libgit2/src/cli/opt.c +31 -5
  185. data/vendor/libgit2/src/cli/opt.h +21 -3
  186. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  187. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  188. data/vendor/libgit2/src/cli/progress.c +51 -2
  189. data/vendor/libgit2/src/cli/progress.h +12 -0
  190. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  191. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  192. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  193. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  194. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  195. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  196. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  197. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  198. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  199. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  200. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  201. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  202. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  203. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  204. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  205. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  206. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  207. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  208. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  209. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  210. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  211. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  212. data/vendor/libgit2/src/libgit2/config.c +390 -299
  213. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  214. data/vendor/libgit2/src/libgit2/config.h +9 -4
  215. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  216. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  217. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  218. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  219. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  220. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  221. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  222. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  223. data/vendor/libgit2/src/libgit2/delta.c +5 -1
  224. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  225. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  226. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  227. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  228. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  229. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  230. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  231. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  232. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  233. data/vendor/libgit2/src/libgit2/email.c +1 -0
  234. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  235. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  236. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  237. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  238. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  239. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  240. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  241. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  242. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  243. data/vendor/libgit2/src/libgit2/index.c +76 -98
  244. data/vendor/libgit2/src/libgit2/index.h +5 -2
  245. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  246. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  247. data/vendor/libgit2/src/libgit2/indexer.c +36 -40
  248. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  249. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  252. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  253. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  254. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  255. data/vendor/libgit2/src/libgit2/message.c +1 -1
  256. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  257. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  258. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  259. data/vendor/libgit2/src/libgit2/object.c +6 -5
  260. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  261. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  264. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  267. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  268. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  269. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  270. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/path.c +1 -1
  272. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  273. data/vendor/libgit2/src/libgit2/push.c +79 -28
  274. data/vendor/libgit2/src/libgit2/push.h +1 -0
  275. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  276. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  277. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  278. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  279. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  280. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  281. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  282. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  283. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  284. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  285. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  286. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  287. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  288. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  289. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  290. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  291. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  292. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  293. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  294. data/vendor/libgit2/src/libgit2/status.c +1 -1
  295. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  296. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  297. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  298. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  299. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  300. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  301. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  302. data/vendor/libgit2/src/libgit2/submodule.c +118 -68
  303. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  304. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  305. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  306. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  307. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  308. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  309. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  310. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  311. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  312. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  313. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  314. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  315. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  316. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  317. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  318. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  319. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  320. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
  321. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  322. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  323. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  324. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  325. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  326. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  327. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  328. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  329. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  330. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  331. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  332. data/vendor/libgit2/src/util/alloc.c +4 -1
  333. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  334. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  335. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  336. data/vendor/libgit2/src/util/array.h +18 -17
  337. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  338. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  339. data/vendor/libgit2/src/util/date.c +22 -14
  340. data/vendor/libgit2/src/util/date.h +12 -0
  341. data/vendor/libgit2/src/util/errors.c +401 -0
  342. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  343. data/vendor/libgit2/src/util/fs_path.c +81 -10
  344. data/vendor/libgit2/src/util/fs_path.h +29 -0
  345. data/vendor/libgit2/src/util/futils.c +6 -5
  346. data/vendor/libgit2/src/util/futils.h +24 -7
  347. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  348. data/vendor/libgit2/src/util/git2_util.h +6 -0
  349. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  350. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  351. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  352. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  353. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  354. data/vendor/libgit2/src/util/hashmap.h +425 -0
  355. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  356. data/vendor/libgit2/src/util/integer.h +3 -1
  357. data/vendor/libgit2/src/util/net.c +17 -11
  358. data/vendor/libgit2/src/util/net.h +2 -0
  359. data/vendor/libgit2/src/util/pool.c +1 -1
  360. data/vendor/libgit2/src/util/pool.h +5 -0
  361. data/vendor/libgit2/src/util/pqueue.h +1 -1
  362. data/vendor/libgit2/src/util/process.h +223 -0
  363. data/vendor/libgit2/src/util/rand.c +1 -7
  364. data/vendor/libgit2/src/util/regexp.c +1 -1
  365. data/vendor/libgit2/src/util/runtime.c +2 -2
  366. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  367. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  368. data/vendor/libgit2/src/util/str.c +20 -8
  369. data/vendor/libgit2/src/util/str.h +5 -3
  370. data/vendor/libgit2/src/util/strlist.c +108 -0
  371. data/vendor/libgit2/src/util/strlist.h +36 -0
  372. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  373. data/vendor/libgit2/src/util/unix/process.c +706 -0
  374. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  375. data/vendor/libgit2/src/util/util.c +18 -5
  376. data/vendor/libgit2/src/util/util.h +5 -38
  377. data/vendor/libgit2/src/util/vector.c +3 -3
  378. data/vendor/libgit2/src/util/vector.h +2 -2
  379. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  380. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  381. data/vendor/libgit2/src/util/win32/process.c +522 -0
  382. metadata +60 -32
  383. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  384. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  385. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  386. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  387. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  388. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  389. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  390. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  391. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  392. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  393. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  394. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  395. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  396. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  397. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  398. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  399. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  400. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  401. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  402. data/vendor/libgit2/src/util/khash.h +0 -615
  403. data/vendor/libgit2/src/util/strmap.c +0 -100
  404. data/vendor/libgit2/src/util/strmap.h +0 -131
  405. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -11,7 +11,6 @@
11
11
  #include "futils.h"
12
12
  #include "map.h"
13
13
  #include "runtime.h"
14
- #include "strmap.h"
15
14
  #include "pack.h"
16
15
 
17
16
  #define DEFAULT_WINDOW_SIZE \
@@ -29,33 +28,27 @@ size_t git_mwindow__window_size = DEFAULT_WINDOW_SIZE;
29
28
  size_t git_mwindow__mapped_limit = DEFAULT_MAPPED_LIMIT;
30
29
  size_t git_mwindow__file_limit = DEFAULT_FILE_LIMIT;
31
30
 
32
- /* Mutex to control access to `git_mwindow__mem_ctl` and `git__pack_cache`. */
33
- git_mutex git__mwindow_mutex;
31
+ /* Mutex to control access to `git_mwindow__mem_ctl` and `git_mwindow__pack_cache`. */
32
+ git_mutex git_mwindow__mutex;
34
33
 
35
- /* Whenever you want to read or modify this, grab `git__mwindow_mutex` */
34
+ /* Whenever you want to read or modify this, grab `git_mwindow__mutex` */
36
35
  git_mwindow_ctl git_mwindow__mem_ctl;
37
36
 
38
37
  /* Global list of mwindow files, to open packs once across repos */
39
- git_strmap *git__pack_cache = NULL;
38
+ GIT_HASHMAP_STR_FUNCTIONS(git_mwindow_packmap, , struct git_pack_file *);
39
+ git_mwindow_packmap git_mwindow__pack_cache;
40
40
 
41
41
  static void git_mwindow_global_shutdown(void)
42
42
  {
43
- git_strmap *tmp = git__pack_cache;
44
-
45
- git_mutex_free(&git__mwindow_mutex);
46
-
47
- git__pack_cache = NULL;
48
- git_strmap_free(tmp);
43
+ git_mutex_free(&git_mwindow__mutex);
44
+ git_mwindow_packmap_dispose(&git_mwindow__pack_cache);
49
45
  }
50
46
 
51
47
  int git_mwindow_global_init(void)
52
48
  {
53
49
  int error;
54
50
 
55
- GIT_ASSERT(!git__pack_cache);
56
-
57
- if ((error = git_mutex_init(&git__mwindow_mutex)) < 0 ||
58
- (error = git_strmap_new(&git__pack_cache)) < 0)
51
+ if ((error = git_mutex_init(&git_mwindow__mutex)) < 0)
59
52
  return error;
60
53
 
61
54
  return git_runtime_shutdown_register(git_mwindow_global_shutdown);
@@ -73,31 +66,34 @@ int git_mwindow_get_pack(
73
66
  if ((error = git_packfile__name(&packname, path)) < 0)
74
67
  return error;
75
68
 
76
- if (git_mutex_lock(&git__mwindow_mutex) < 0) {
69
+ if (git_mutex_lock(&git_mwindow__mutex) < 0) {
77
70
  git_error_set(GIT_ERROR_OS, "failed to lock mwindow mutex");
78
71
  return -1;
79
72
  }
80
73
 
81
- pack = git_strmap_get(git__pack_cache, packname);
74
+ error = git_mwindow_packmap_get(&pack, &git_mwindow__pack_cache, packname);
82
75
  git__free(packname);
83
76
 
84
- if (pack != NULL) {
77
+ if (error == 0) {
85
78
  git_atomic32_inc(&pack->refcount);
86
- git_mutex_unlock(&git__mwindow_mutex);
79
+ git_mutex_unlock(&git_mwindow__mutex);
87
80
  *out = pack;
88
81
  return 0;
82
+ } else if (error != GIT_ENOTFOUND) {
83
+ return error;
89
84
  }
90
85
 
91
86
  /* If we didn't find it, we need to create it */
92
87
  if ((error = git_packfile_alloc(&pack, path, oid_type)) < 0) {
93
- git_mutex_unlock(&git__mwindow_mutex);
88
+ git_mutex_unlock(&git_mwindow__mutex);
94
89
  return error;
95
90
  }
96
91
 
97
92
  git_atomic32_inc(&pack->refcount);
98
93
 
99
- error = git_strmap_set(git__pack_cache, pack->pack_name, pack);
100
- git_mutex_unlock(&git__mwindow_mutex);
94
+ error = git_mwindow_packmap_put(&git_mwindow__pack_cache, pack->pack_name, pack);
95
+ git_mutex_unlock(&git_mwindow__mutex);
96
+
101
97
  if (error < 0) {
102
98
  git_packfile_free(pack, false);
103
99
  return error;
@@ -112,21 +108,18 @@ int git_mwindow_put_pack(struct git_pack_file *pack)
112
108
  int count, error;
113
109
  struct git_pack_file *pack_to_delete = NULL;
114
110
 
115
- if ((error = git_mutex_lock(&git__mwindow_mutex)) < 0)
111
+ if ((error = git_mutex_lock(&git_mwindow__mutex)) < 0)
116
112
  return error;
117
113
 
118
- /* put before get would be a corrupted state */
119
- GIT_ASSERT(git__pack_cache);
120
-
121
114
  /* if we cannot find it, the state is corrupted */
122
- GIT_ASSERT(git_strmap_exists(git__pack_cache, pack->pack_name));
115
+ GIT_ASSERT(git_mwindow_packmap_contains(&git_mwindow__pack_cache, pack->pack_name));
123
116
 
124
117
  count = git_atomic32_dec(&pack->refcount);
125
118
  if (count == 0) {
126
- git_strmap_delete(git__pack_cache, pack->pack_name);
119
+ git_mwindow_packmap_remove(&git_mwindow__pack_cache, pack->pack_name);
127
120
  pack_to_delete = pack;
128
121
  }
129
- git_mutex_unlock(&git__mwindow_mutex);
122
+ git_mutex_unlock(&git_mwindow__mutex);
130
123
  git_packfile_free(pack_to_delete, false);
131
124
 
132
125
  return 0;
@@ -134,7 +127,7 @@ int git_mwindow_put_pack(struct git_pack_file *pack)
134
127
 
135
128
  /*
136
129
  * Free all the windows in a sequence, typically because we're done
137
- * with the file. Needs to hold the git__mwindow_mutex.
130
+ * with the file. Needs to hold the git_mwindow__mutex.
138
131
  */
139
132
  static int git_mwindow_free_all_locked(git_mwindow_file *mwf)
140
133
  {
@@ -152,7 +145,7 @@ static int git_mwindow_free_all_locked(git_mwindow_file *mwf)
152
145
  }
153
146
 
154
147
  if (ctl->windowfiles.length == 0) {
155
- git_vector_free(&ctl->windowfiles);
148
+ git_vector_dispose(&ctl->windowfiles);
156
149
  ctl->windowfiles.contents = NULL;
157
150
  }
158
151
 
@@ -176,14 +169,14 @@ int git_mwindow_free_all(git_mwindow_file *mwf)
176
169
  {
177
170
  int error;
178
171
 
179
- if (git_mutex_lock(&git__mwindow_mutex)) {
172
+ if (git_mutex_lock(&git_mwindow__mutex)) {
180
173
  git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
181
174
  return -1;
182
175
  }
183
176
 
184
177
  error = git_mwindow_free_all_locked(mwf);
185
178
 
186
- git_mutex_unlock(&git__mwindow_mutex);
179
+ git_mutex_unlock(&git_mwindow__mutex);
187
180
 
188
181
  return error;
189
182
  }
@@ -405,7 +398,7 @@ unsigned char *git_mwindow_open(
405
398
  git_mwindow_ctl *ctl = &git_mwindow__mem_ctl;
406
399
  git_mwindow *w = *cursor;
407
400
 
408
- if (git_mutex_lock(&git__mwindow_mutex)) {
401
+ if (git_mutex_lock(&git_mwindow__mutex)) {
409
402
  git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
410
403
  return NULL;
411
404
  }
@@ -427,7 +420,7 @@ unsigned char *git_mwindow_open(
427
420
  if (!w) {
428
421
  w = new_window_locked(mwf->fd, mwf->size, offset);
429
422
  if (w == NULL) {
430
- git_mutex_unlock(&git__mwindow_mutex);
423
+ git_mutex_unlock(&git_mwindow__mutex);
431
424
  return NULL;
432
425
  }
433
426
  w->next = mwf->windows;
@@ -447,7 +440,7 @@ unsigned char *git_mwindow_open(
447
440
  if (left)
448
441
  *left = (unsigned int)(w->window_map.len - offset);
449
442
 
450
- git_mutex_unlock(&git__mwindow_mutex);
443
+ git_mutex_unlock(&git_mwindow__mutex);
451
444
  return (unsigned char *) w->window_map.data + offset;
452
445
  }
453
446
 
@@ -459,14 +452,14 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
459
452
  size_t i;
460
453
  git_mwindow_file *closed_file = NULL;
461
454
 
462
- if (git_mutex_lock(&git__mwindow_mutex)) {
455
+ if (git_mutex_lock(&git_mwindow__mutex)) {
463
456
  git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
464
457
  return -1;
465
458
  }
466
459
 
467
460
  if (ctl->windowfiles.length == 0 &&
468
461
  (error = git_vector_init(&ctl->windowfiles, 8, NULL)) < 0) {
469
- git_mutex_unlock(&git__mwindow_mutex);
462
+ git_mutex_unlock(&git_mwindow__mutex);
470
463
  goto cleanup;
471
464
  }
472
465
 
@@ -486,7 +479,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
486
479
  }
487
480
 
488
481
  error = git_vector_insert(&ctl->windowfiles, mwf);
489
- git_mutex_unlock(&git__mwindow_mutex);
482
+ git_mutex_unlock(&git_mwindow__mutex);
490
483
  if (error < 0)
491
484
  goto cleanup;
492
485
 
@@ -505,7 +498,7 @@ int git_mwindow_file_register(git_mwindow_file *mwf)
505
498
  }
506
499
 
507
500
  cleanup:
508
- git_vector_free(&closed_files);
501
+ git_vector_dispose(&closed_files);
509
502
  return error;
510
503
  }
511
504
 
@@ -515,30 +508,30 @@ void git_mwindow_file_deregister(git_mwindow_file *mwf)
515
508
  git_mwindow_file *cur;
516
509
  size_t i;
517
510
 
518
- if (git_mutex_lock(&git__mwindow_mutex))
511
+ if (git_mutex_lock(&git_mwindow__mutex))
519
512
  return;
520
513
 
521
514
  git_vector_foreach(&ctl->windowfiles, i, cur) {
522
515
  if (cur == mwf) {
523
516
  git_vector_remove(&ctl->windowfiles, i);
524
- git_mutex_unlock(&git__mwindow_mutex);
517
+ git_mutex_unlock(&git_mwindow__mutex);
525
518
  return;
526
519
  }
527
520
  }
528
- git_mutex_unlock(&git__mwindow_mutex);
521
+ git_mutex_unlock(&git_mwindow__mutex);
529
522
  }
530
523
 
531
524
  void git_mwindow_close(git_mwindow **window)
532
525
  {
533
526
  git_mwindow *w = *window;
534
527
  if (w) {
535
- if (git_mutex_lock(&git__mwindow_mutex)) {
528
+ if (git_mutex_lock(&git_mwindow__mutex)) {
536
529
  git_error_set(GIT_ERROR_THREAD, "unable to lock mwindow mutex");
537
530
  return;
538
531
  }
539
532
 
540
533
  w->inuse_cnt--;
541
- git_mutex_unlock(&git__mwindow_mutex);
534
+ git_mutex_unlock(&git_mwindow__mutex);
542
535
  *window = NULL;
543
536
  }
544
537
  }
@@ -12,6 +12,10 @@
12
12
 
13
13
  #include "map.h"
14
14
  #include "vector.h"
15
+ #include "hashmap_str.h"
16
+
17
+ GIT_HASHMAP_STR_STRUCT(git_mwindow_packmap, struct git_pack_file *);
18
+ GIT_HASHMAP_STR_PROTOTYPES(git_mwindow_packmap, struct git_pack_file *);
15
19
 
16
20
  typedef struct git_mwindow {
17
21
  struct git_mwindow *next;
@@ -526,7 +526,7 @@ static int git_object__short_id(git_str *out, const git_object *obj)
526
526
  git_oid id;
527
527
  git_odb *odb;
528
528
  size_t oid_hexsize;
529
- int len = GIT_ABBREV_DEFAULT, error;
529
+ int len, error;
530
530
 
531
531
  GIT_ASSERT_ARG(out);
532
532
  GIT_ASSERT_ARG(obj);
@@ -536,12 +536,13 @@ static int git_object__short_id(git_str *out, const git_object *obj)
536
536
  git_oid_clear(&id, repo->oid_type);
537
537
  oid_hexsize = git_oid_hexsize(repo->oid_type);
538
538
 
539
- if ((error = git_repository__configmap_lookup(&len, repo, GIT_CONFIGMAP_ABBREV)) < 0)
539
+ if ((error = git_repository__abbrev_length(&len, repo)) < 0)
540
540
  return error;
541
541
 
542
- if (len < 0 || (size_t)len > oid_hexsize) {
543
- git_error_set(GIT_ERROR_CONFIG, "invalid oid abbreviation setting: '%d'", len);
544
- return -1;
542
+ if ((size_t)len == oid_hexsize) {
543
+ if ((error = git_oid_cpy(&id, &obj->cached.oid)) < 0) {
544
+ return error;
545
+ }
545
546
  }
546
547
 
547
548
  if ((error = git_repository_odb(&odb, repo)) < 0)
@@ -790,12 +790,8 @@ static int load_alternates(git_odb *odb, const char *objects_dir, int alternate_
790
790
  if (*alternate == '\0' || *alternate == '#')
791
791
  continue;
792
792
 
793
- /*
794
- * Relative path: build based on the current `objects`
795
- * folder. However, relative paths are only allowed in
796
- * the current repository.
797
- */
798
- if (*alternate == '.' && !alternate_depth) {
793
+ /* Relative path: build based on the current `objects` folder. */
794
+ if (*alternate == '.') {
799
795
  if ((result = git_str_joinpath(&alternates_path, objects_dir, alternate)) < 0)
800
796
  break;
801
797
  alternate = git_str_cstr(&alternates_path);
@@ -915,7 +911,7 @@ static void odb_free(git_odb *db)
915
911
  git_mutex_unlock(&db->lock);
916
912
 
917
913
  git_commit_graph_free(db->cgraph);
918
- git_vector_free(&db->backends);
914
+ git_vector_dispose(&db->backends);
919
915
  git_cache_dispose(&db->own_cache);
920
916
  git_mutex_free(&db->lock);
921
917
 
@@ -1609,7 +1605,7 @@ int git_odb_foreach(git_odb *db, git_odb_foreach_cb cb, void *payload)
1609
1605
  }
1610
1606
 
1611
1607
  cleanup:
1612
- git_vector_free(&backends);
1608
+ git_vector_dispose(&backends);
1613
1609
 
1614
1610
  return error;
1615
1611
  }
@@ -1796,7 +1792,8 @@ void git_odb_stream_free(git_odb_stream *stream)
1796
1792
  if (stream == NULL)
1797
1793
  return;
1798
1794
 
1799
- git_hash_ctx_cleanup(stream->hash_ctx);
1795
+ if (stream->hash_ctx)
1796
+ git_hash_ctx_cleanup(stream->hash_ctx);
1800
1797
  git__free(stream->hash_ctx);
1801
1798
  stream->free(stream);
1802
1799
  }
@@ -1922,7 +1919,7 @@ void git_odb_backend_data_free(git_odb_backend *backend, void *data)
1922
1919
  git__free(data);
1923
1920
  }
1924
1921
 
1925
- int git_odb_refresh(struct git_odb *db)
1922
+ int git_odb_refresh(git_odb *db)
1926
1923
  {
1927
1924
  size_t i;
1928
1925
  int error;
@@ -276,8 +276,8 @@ done:
276
276
  static int read_loose_standard(git_rawobj *out, git_str *obj)
277
277
  {
278
278
  git_zstream zstream = GIT_ZSTREAM_INIT;
279
- unsigned char head[MAX_HEADER_LEN], *body = NULL;
280
- size_t decompressed, head_len, body_len, alloc_size;
279
+ unsigned char head[MAX_HEADER_LEN], *body = NULL, *body_out;
280
+ size_t decompressed, head_len, body_remain, alloc_size;
281
281
  obj_hdr hdr;
282
282
  int error;
283
283
 
@@ -285,16 +285,16 @@ static int read_loose_standard(git_rawobj *out, git_str *obj)
285
285
  (error = git_zstream_set_input(&zstream, git_str_cstr(obj), git_str_len(obj))) < 0)
286
286
  goto done;
287
287
 
288
- decompressed = sizeof(head);
289
-
290
288
  /*
291
289
  * inflate the initial part of the compressed buffer in order to
292
- * parse the header; read the largest header possible, then push the
293
- * remainder into the body buffer.
290
+ * parse the header and read the largest header possible. later, we'll
291
+ * push the remainder into the body buffer.
294
292
  */
293
+ decompressed = sizeof(head);
295
294
  if ((error = git_zstream_get_output(head, &decompressed, &zstream)) < 0 ||
296
295
  (error = parse_header(&hdr, &head_len, head, decompressed)) < 0)
297
296
  goto done;
297
+ GIT_ASSERT(head_len <= decompressed);
298
298
 
299
299
  if (!git_object_typeisloose(hdr.type)) {
300
300
  git_error_set(GIT_ERROR_ODB, "failed to inflate disk object");
@@ -311,16 +311,24 @@ static int read_loose_standard(git_rawobj *out, git_str *obj)
311
311
  error = -1;
312
312
  goto done;
313
313
  }
314
+ body_out = body;
315
+ body_remain = hdr.size;
314
316
 
315
- GIT_ASSERT(decompressed >= head_len);
316
- body_len = decompressed - head_len;
317
-
318
- if (body_len)
319
- memcpy(body, head + head_len, body_len);
317
+ decompressed -= head_len;
318
+ if (decompressed > body_remain) {
319
+ git_error_set(GIT_ERROR_ODB, "malformed object: body was longer than specified in header");
320
+ error = -1;
321
+ goto done;
322
+ }
323
+ if (decompressed)
324
+ memcpy(body_out, head + head_len, decompressed);
325
+ body_out += decompressed;
326
+ body_remain -= decompressed;
320
327
 
321
- decompressed = hdr.size - body_len;
322
- if ((error = git_zstream_get_output(body + body_len, &decompressed, &zstream)) < 0)
328
+ decompressed = body_remain;
329
+ if ((error = git_zstream_get_output(body_out, &decompressed, &zstream)) < 0)
323
330
  goto done;
331
+ body_out += decompressed;
324
332
 
325
333
  if (!git_zstream_done(&zstream)) {
326
334
  git_error_set(GIT_ERROR_ZLIB, "failed to finish zlib inflation: stream aborted prematurely");
@@ -328,7 +336,9 @@ static int read_loose_standard(git_rawobj *out, git_str *obj)
328
336
  goto done;
329
337
  }
330
338
 
331
- body[hdr.size] = '\0';
339
+ /* object bodies that are too short are silently zero-padded */
340
+ GIT_ASSERT(body_out <= body + hdr.size);
341
+ *body_out = '\0';
332
342
 
333
343
  out->data = body;
334
344
  out->len = hdr.size;
@@ -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
  }