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
@@ -17,10 +17,10 @@
17
17
  #include "pathspec.h"
18
18
  #include "ignore.h"
19
19
  #include "blob.h"
20
- #include "idxmap.h"
21
20
  #include "diff.h"
22
21
  #include "varint.h"
23
22
  #include "path.h"
23
+ #include "index_map.h"
24
24
 
25
25
  #include "git2/odb.h"
26
26
  #include "git2/oid.h"
@@ -133,30 +133,6 @@ static int write_index(unsigned char checksum[GIT_HASH_MAX_SIZE], size_t *checks
133
133
  static void index_entry_free(git_index_entry *entry);
134
134
  static void index_entry_reuc_free(git_index_reuc_entry *reuc);
135
135
 
136
- GIT_INLINE(int) index_map_set(git_idxmap *map, git_index_entry *e, bool ignore_case)
137
- {
138
- if (ignore_case)
139
- return git_idxmap_icase_set((git_idxmap_icase *) map, e, e);
140
- else
141
- return git_idxmap_set(map, e, e);
142
- }
143
-
144
- GIT_INLINE(int) index_map_delete(git_idxmap *map, git_index_entry *e, bool ignore_case)
145
- {
146
- if (ignore_case)
147
- return git_idxmap_icase_delete((git_idxmap_icase *) map, e);
148
- else
149
- return git_idxmap_delete(map, e);
150
- }
151
-
152
- GIT_INLINE(int) index_map_resize(git_idxmap *map, size_t count, bool ignore_case)
153
- {
154
- if (ignore_case)
155
- return git_idxmap_icase_resize((git_idxmap_icase *) map, count);
156
- else
157
- return git_idxmap_resize(map, count);
158
- }
159
-
160
136
  int git_index_entry_srch(const void *key, const void *array_member)
161
137
  {
162
138
  const struct entry_srch_key *srch_key = key;
@@ -388,6 +364,7 @@ GIT_INLINE(int) index_find(
388
364
  void git_index__set_ignore_case(git_index *index, bool ignore_case)
389
365
  {
390
366
  index->ignore_case = ignore_case;
367
+ index->entries_map.ignore_case = ignore_case;
391
368
 
392
369
  if (ignore_case) {
393
370
  index->entries_cmp_path = git__strcasecmp_cb;
@@ -422,6 +399,7 @@ int git_index__open(
422
399
  index = git__calloc(1, sizeof(git_index));
423
400
  GIT_ERROR_CHECK_ALLOC(index);
424
401
 
402
+ GIT_ASSERT_ARG(git_oid_type_is_valid(oid_type));
425
403
  index->oid_type = oid_type;
426
404
 
427
405
  if (git_pool_init(&index->tree_pool, 1) < 0)
@@ -438,7 +416,6 @@ int git_index__open(
438
416
  }
439
417
 
440
418
  if (git_vector_init(&index->entries, 32, git_index_entry_cmp) < 0 ||
441
- git_idxmap_new(&index->entries_map) < 0 ||
442
419
  git_vector_init(&index->names, 8, conflict_name_cmp) < 0 ||
443
420
  git_vector_init(&index->reuc, 8, reuc_cmp) < 0 ||
444
421
  git_vector_init(&index->deleted, 8, git_index_entry_cmp) < 0)
@@ -465,9 +442,13 @@ fail:
465
442
  }
466
443
 
467
444
  #ifdef GIT_EXPERIMENTAL_SHA256
468
- int git_index_open(git_index **index_out, const char *index_path, git_oid_t oid_type)
445
+ int git_index_open(
446
+ git_index **index_out,
447
+ const char *index_path,
448
+ const git_index_options *opts)
469
449
  {
470
- return git_index__open(index_out, index_path, oid_type);
450
+ return git_index__open(index_out, index_path,
451
+ opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT);
471
452
  }
472
453
  #else
473
454
  int git_index_open(git_index **index_out, const char *index_path)
@@ -482,9 +463,10 @@ int git_index__new(git_index **out, git_oid_t oid_type)
482
463
  }
483
464
 
484
465
  #ifdef GIT_EXPERIMENTAL_SHA256
485
- int git_index_new(git_index **out, git_oid_t oid_type)
466
+ int git_index_new(git_index **out, const git_index_options *opts)
486
467
  {
487
- return git_index__new(out, oid_type);
468
+ return git_index__new(out,
469
+ opts && opts->oid_type ? opts->oid_type : GIT_OID_DEFAULT);
488
470
  }
489
471
  #else
490
472
  int git_index_new(git_index **out)
@@ -502,11 +484,11 @@ static void index_free(git_index *index)
502
484
  return;
503
485
 
504
486
  git_index_clear(index);
505
- git_idxmap_free(index->entries_map);
506
- git_vector_free(&index->entries);
507
- git_vector_free(&index->names);
508
- git_vector_free(&index->reuc);
509
- git_vector_free(&index->deleted);
487
+ git_index_entrymap_dispose(&index->entries_map);
488
+ git_vector_dispose(&index->entries);
489
+ git_vector_dispose(&index->names);
490
+ git_vector_dispose(&index->reuc);
491
+ git_vector_dispose(&index->deleted);
510
492
 
511
493
  git__free(index->index_file_path);
512
494
 
@@ -547,7 +529,7 @@ static int index_remove_entry(git_index *index, size_t pos)
547
529
 
548
530
  if (entry != NULL) {
549
531
  git_tree_cache_invalidate_path(index->tree, entry->path);
550
- index_map_delete(index->entries_map, entry, index->ignore_case);
532
+ git_index_entrymap_remove(&index->entries_map, entry);
551
533
  }
552
534
 
553
535
  error = git_vector_remove(&index->entries, pos);
@@ -575,7 +557,8 @@ int git_index_clear(git_index *index)
575
557
  index->tree = NULL;
576
558
  git_pool_clear(&index->tree_pool);
577
559
 
578
- git_idxmap_clear(index->entries_map);
560
+ git_index_entrymap_clear(&index->entries_map);
561
+
579
562
  while (!error && index->entries.length > 0)
580
563
  error = index_remove_entry(index, index->entries.length - 1);
581
564
 
@@ -786,8 +769,10 @@ static int truncate_racily_clean(git_index *index)
786
769
  diff_opts.pathspec.count = paths.length;
787
770
  diff_opts.pathspec.strings = (char **)paths.contents;
788
771
 
789
- if ((error = git_diff_index_to_workdir(&diff, INDEX_OWNER(index), index, &diff_opts)) < 0)
772
+ if ((error = git_diff_index_to_workdir(&diff, INDEX_OWNER(index), index, &diff_opts)) < 0) {
773
+ git_vector_dispose(&paths);
790
774
  return error;
775
+ }
791
776
 
792
777
  git_vector_foreach(&diff->deltas, i, delta) {
793
778
  entry = (git_index_entry *)git_index_get_bypath(index, delta->old_file.path, 0);
@@ -803,7 +788,7 @@ static int truncate_racily_clean(git_index *index)
803
788
 
804
789
  done:
805
790
  git_diff_free(diff);
806
- git_vector_free(&paths);
791
+ git_vector_dispose(&paths);
807
792
  return 0;
808
793
  }
809
794
 
@@ -904,14 +889,9 @@ const git_index_entry *git_index_get_bypath(
904
889
  key.path = path;
905
890
  GIT_INDEX_ENTRY_STAGE_SET(&key, stage);
906
891
 
907
- if (index->ignore_case)
908
- value = git_idxmap_icase_get((git_idxmap_icase *) index->entries_map, &key);
909
- else
910
- value = git_idxmap_get(index->entries_map, &key);
911
-
912
- if (!value) {
913
- git_error_set(GIT_ERROR_INDEX, "index does not contain '%s'", path);
914
- return NULL;
892
+ if (git_index_entrymap_get(&value, &index->entries_map, &key) != 0) {
893
+ git_error_set(GIT_ERROR_INDEX, "index does not contain '%s'", path);
894
+ return NULL;
915
895
  }
916
896
 
917
897
  return value;
@@ -1245,7 +1225,7 @@ static int canonicalize_directory_path(
1245
1225
  {
1246
1226
  const git_index_entry *match, *best = NULL;
1247
1227
  char *search, *sep;
1248
- size_t pos, search_len, best_len;
1228
+ size_t pos, search_len, best_len = 0;
1249
1229
 
1250
1230
  if (!index->ignore_case)
1251
1231
  return 0;
@@ -1453,7 +1433,7 @@ static int index_insert(
1453
1433
  * check for dups, this is actually cheaper in the long run.)
1454
1434
  */
1455
1435
  if ((error = git_vector_insert_sorted(&index->entries, entry, index_no_dups)) < 0 ||
1456
- (error = index_map_set(index->entries_map, entry, index->ignore_case)) < 0)
1436
+ (error = git_index_entrymap_put(&index->entries_map, entry)) < 0)
1457
1437
  goto out;
1458
1438
  }
1459
1439
 
@@ -1468,7 +1448,7 @@ out:
1468
1448
  return error;
1469
1449
  }
1470
1450
 
1471
- static int index_conflict_to_reuc(git_index *index, const char *path)
1451
+ int git_index__conflict_to_reuc(git_index *index, const char *path)
1472
1452
  {
1473
1453
  const git_index_entry *conflict_entries[3];
1474
1454
  int ancestor_mode, our_mode, their_mode;
@@ -1548,7 +1528,7 @@ int git_index_add_from_buffer(
1548
1528
  return error;
1549
1529
 
1550
1530
  /* Adding implies conflict was resolved, move conflict entries to REUC */
1551
- if ((error = index_conflict_to_reuc(index, entry->path)) < 0 && error != GIT_ENOTFOUND)
1531
+ if ((error = git_index__conflict_to_reuc(index, entry->path)) < 0 && error != GIT_ENOTFOUND)
1552
1532
  return error;
1553
1533
 
1554
1534
  git_tree_cache_invalidate_path(index->tree, entry->path);
@@ -1612,15 +1592,17 @@ int git_index_add_bypath(git_index *index, const char *path)
1612
1592
 
1613
1593
  if (ret == GIT_EDIRECTORY) {
1614
1594
  git_submodule *sm;
1615
- git_error_state err;
1595
+ git_error *last_error;
1616
1596
 
1617
- git_error_state_capture(&err, ret);
1597
+ git_error_save(&last_error);
1618
1598
 
1619
1599
  ret = git_submodule_lookup(&sm, INDEX_OWNER(index), path);
1620
- if (ret == GIT_ENOTFOUND)
1621
- return git_error_state_restore(&err);
1600
+ if (ret == GIT_ENOTFOUND) {
1601
+ git_error_restore(last_error);
1602
+ return GIT_EDIRECTORY;
1603
+ }
1622
1604
 
1623
- git_error_state_free(&err);
1605
+ git_error_free(last_error);
1624
1606
 
1625
1607
  /*
1626
1608
  * EEXISTS means that there is a repository at that path, but it's not known
@@ -1642,7 +1624,7 @@ int git_index_add_bypath(git_index *index, const char *path)
1642
1624
  }
1643
1625
 
1644
1626
  /* Adding implies conflict was resolved, move conflict entries to REUC */
1645
- if ((ret = index_conflict_to_reuc(index, path)) < 0 && ret != GIT_ENOTFOUND)
1627
+ if ((ret = git_index__conflict_to_reuc(index, path)) < 0 && ret != GIT_ENOTFOUND)
1646
1628
  return ret;
1647
1629
 
1648
1630
  git_tree_cache_invalidate_path(index->tree, entry->path);
@@ -1658,7 +1640,7 @@ int git_index_remove_bypath(git_index *index, const char *path)
1658
1640
 
1659
1641
  if (((ret = git_index_remove(index, path, 0)) < 0 &&
1660
1642
  ret != GIT_ENOTFOUND) ||
1661
- ((ret = index_conflict_to_reuc(index, path)) < 0 &&
1643
+ ((ret = git_index__conflict_to_reuc(index, path)) < 0 &&
1662
1644
  ret != GIT_ENOTFOUND))
1663
1645
  return ret;
1664
1646
 
@@ -1680,8 +1662,7 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
1680
1662
  return 0;
1681
1663
 
1682
1664
  if (git_vector_size_hint(&index->entries, source_entries->length) < 0 ||
1683
- index_map_resize(index->entries_map, (size_t)(source_entries->length * 1.3),
1684
- index->ignore_case) < 0)
1665
+ git_index_entrymap_resize(&index->entries_map, (size_t)(source_entries->length * 1.3)) < 0)
1685
1666
  return -1;
1686
1667
 
1687
1668
  git_vector_foreach(source_entries, i, source_entry) {
@@ -1694,10 +1675,8 @@ int git_index__fill(git_index *index, const git_vector *source_entries)
1694
1675
  entry->flags_extended |= GIT_INDEX_ENTRY_UPTODATE;
1695
1676
  entry->mode = git_index__create_mode(entry->mode);
1696
1677
 
1697
- if ((error = git_vector_insert(&index->entries, entry)) < 0)
1698
- break;
1699
-
1700
- if ((error = index_map_set(index->entries_map, entry, index->ignore_case)) < 0)
1678
+ if ((error = git_vector_insert(&index->entries, entry)) < 0 ||
1679
+ (error = git_index_entrymap_put(&index->entries_map, entry)) < 0)
1701
1680
  break;
1702
1681
 
1703
1682
  index->dirty = 1;
@@ -1740,7 +1719,7 @@ int git_index_remove(git_index *index, const char *path, int stage)
1740
1719
  remove_key.path = path;
1741
1720
  GIT_INDEX_ENTRY_STAGE_SET(&remove_key, stage);
1742
1721
 
1743
- index_map_delete(index->entries_map, &remove_key, index->ignore_case);
1722
+ git_index_entrymap_remove(&index->entries_map, &remove_key);
1744
1723
 
1745
1724
  if (index_find(&position, index, path, 0, stage) < 0) {
1746
1725
  git_error_set(
@@ -2546,7 +2525,7 @@ static int read_entry(
2546
2525
  {
2547
2526
  size_t path_length, path_offset, entry_size;
2548
2527
  const char *path_ptr;
2549
- struct entry_common *source_common;
2528
+ struct entry_common *source_common = NULL;
2550
2529
  index_entry_short_sha1 source_sha1;
2551
2530
  #ifdef GIT_EXPERIMENTAL_SHA256
2552
2531
  index_entry_short_sha256 source_sha256;
@@ -2758,6 +2737,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
2758
2737
  unsigned int i;
2759
2738
  struct index_header header = { 0 };
2760
2739
  unsigned char checksum[GIT_HASH_MAX_SIZE];
2740
+ unsigned char zero_checksum[GIT_HASH_MAX_SIZE] = { 0 };
2761
2741
  size_t checksum_size = git_hash_size(git_oid_algorithm(index->oid_type));
2762
2742
  const char *last = NULL;
2763
2743
  const char *empty = "";
@@ -2792,7 +2772,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
2792
2772
 
2793
2773
  GIT_ASSERT(!index->entries.length);
2794
2774
 
2795
- if ((error = index_map_resize(index->entries_map, header.entry_count, index->ignore_case)) < 0)
2775
+ if ((error = git_index_entrymap_resize(&index->entries_map, header.entry_count)) < 0)
2796
2776
  return error;
2797
2777
 
2798
2778
  /* Parse all the entries */
@@ -2810,7 +2790,7 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
2810
2790
  goto done;
2811
2791
  }
2812
2792
 
2813
- if ((error = index_map_set(index->entries_map, entry, index->ignore_case)) < 0) {
2793
+ if ((error = git_index_entrymap_put(&index->entries_map, entry)) < 0) {
2814
2794
  index_entry_free(entry);
2815
2795
  goto done;
2816
2796
  }
@@ -2847,8 +2827,11 @@ static int parse_index(git_index *index, const char *buffer, size_t buffer_size)
2847
2827
  /*
2848
2828
  * SHA-1 or SHA-256 (depending on the repository's object format)
2849
2829
  * over the content of the index file before this checksum.
2830
+ * Note: checksum may be 0 if the index was written by a client
2831
+ * where index.skipHash was set to true.
2850
2832
  */
2851
- if (memcmp(checksum, buffer, checksum_size) != 0) {
2833
+ if (memcmp(zero_checksum, buffer, checksum_size) != 0 &&
2834
+ memcmp(checksum, buffer, checksum_size) != 0) {
2852
2835
  error = index_error_invalid(
2853
2836
  "calculated checksum does not match expected");
2854
2837
  goto done;
@@ -2894,7 +2877,7 @@ static int write_disk_entry(
2894
2877
  const char *last)
2895
2878
  {
2896
2879
  void *mem = NULL;
2897
- struct entry_common *ondisk_common;
2880
+ struct entry_common *ondisk_common = NULL;
2898
2881
  size_t path_len, path_offset, disk_size;
2899
2882
  int varint_len = 0;
2900
2883
  char *path;
@@ -2983,7 +2966,7 @@ static int write_disk_entry(
2983
2966
  path_offset = index_entry_path_offset(index->oid_type, entry->flags);
2984
2967
 
2985
2968
  if (entry->flags & GIT_INDEX_ENTRY_EXTENDED) {
2986
- struct entry_common *ondisk_ext;
2969
+ struct entry_common *ondisk_ext = NULL;
2987
2970
  uint16_t flags_extended = htons(entry->flags_extended &
2988
2971
  GIT_INDEX_ENTRY_EXTENDED_FLAGS);
2989
2972
 
@@ -3083,7 +3066,7 @@ static int write_entries(git_index *index, git_filebuf *file)
3083
3066
  }
3084
3067
 
3085
3068
  done:
3086
- git_vector_free(&case_sorted);
3069
+ git_vector_dispose(&case_sorted);
3087
3070
  return error;
3088
3071
  }
3089
3072
 
@@ -3359,14 +3342,11 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
3359
3342
  {
3360
3343
  int error = 0;
3361
3344
  git_vector entries = GIT_VECTOR_INIT;
3362
- git_idxmap *entries_map;
3345
+ git_index_entrymap entries_map = GIT_INDEX_ENTRYMAP_INIT;
3363
3346
  read_tree_data data;
3364
3347
  size_t i;
3365
3348
  git_index_entry *e;
3366
3349
 
3367
- if (git_idxmap_new(&entries_map) < 0)
3368
- return -1;
3369
-
3370
3350
  git_vector_set_cmp(&entries, index->entries._cmp); /* match sort */
3371
3351
 
3372
3352
  data.index = index;
@@ -3382,11 +3362,11 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
3382
3362
  if ((error = git_tree_walk(tree, GIT_TREEWALK_POST, read_tree_cb, &data)) < 0)
3383
3363
  goto cleanup;
3384
3364
 
3385
- if ((error = index_map_resize(entries_map, entries.length, index->ignore_case)) < 0)
3365
+ if ((error = git_index_entrymap_resize(&entries_map, entries.length)) < 0)
3386
3366
  goto cleanup;
3387
3367
 
3388
3368
  git_vector_foreach(&entries, i, e) {
3389
- if ((error = index_map_set(entries_map, e, index->ignore_case)) < 0) {
3369
+ if ((error = git_index_entrymap_put(&entries_map, e)) < 0) {
3390
3370
  git_error_set(GIT_ERROR_INDEX, "failed to insert entry into map");
3391
3371
  return error;
3392
3372
  }
@@ -3396,18 +3376,18 @@ int git_index_read_tree(git_index *index, const git_tree *tree)
3396
3376
 
3397
3377
  git_vector_sort(&entries);
3398
3378
 
3399
- if ((error = git_index_clear(index)) < 0) {
3400
- /* well, this isn't good */;
3401
- } else {
3402
- git_vector_swap(&entries, &index->entries);
3403
- entries_map = git_atomic_swap(index->entries_map, entries_map);
3404
- }
3379
+ if ((error = git_index_clear(index)) < 0)
3380
+ goto cleanup;
3381
+
3382
+ git_vector_swap(&entries, &index->entries);
3383
+ git_index_entrymap_swap(&entries_map, &index->entries_map);
3405
3384
 
3406
3385
  index->dirty = 1;
3407
3386
 
3408
3387
  cleanup:
3409
- git_vector_free(&entries);
3410
- git_idxmap_free(entries_map);
3388
+ git_vector_dispose(&entries);
3389
+ git_index_entrymap_dispose(&entries_map);
3390
+
3411
3391
  if (error < 0)
3412
3392
  return error;
3413
3393
 
@@ -3423,7 +3403,7 @@ static int git_index_read_iterator(
3423
3403
  {
3424
3404
  git_vector new_entries = GIT_VECTOR_INIT,
3425
3405
  remove_entries = GIT_VECTOR_INIT;
3426
- git_idxmap *new_entries_map = NULL;
3406
+ git_index_entrymap new_entries_map = GIT_INDEX_ENTRYMAP_INIT;
3427
3407
  git_iterator *index_iterator = NULL;
3428
3408
  git_iterator_options opts = GIT_ITERATOR_OPTIONS_INIT;
3429
3409
  const git_index_entry *old_entry, *new_entry;
@@ -3434,12 +3414,11 @@ static int git_index_read_iterator(
3434
3414
  GIT_ASSERT((new_iterator->flags & GIT_ITERATOR_DONT_IGNORE_CASE));
3435
3415
 
3436
3416
  if ((error = git_vector_init(&new_entries, new_length_hint, index->entries._cmp)) < 0 ||
3437
- (error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0 ||
3438
- (error = git_idxmap_new(&new_entries_map)) < 0)
3417
+ (error = git_vector_init(&remove_entries, index->entries.length, NULL)) < 0)
3439
3418
  goto done;
3440
3419
 
3441
- if (new_length_hint && (error = index_map_resize(new_entries_map, new_length_hint,
3442
- index->ignore_case)) < 0)
3420
+ if (new_length_hint &&
3421
+ (error = git_index_entrymap_resize(&new_entries_map, new_length_hint)) < 0)
3443
3422
  goto done;
3444
3423
 
3445
3424
  opts.flags = GIT_ITERATOR_DONT_IGNORE_CASE |
@@ -3504,8 +3483,7 @@ static int git_index_read_iterator(
3504
3483
 
3505
3484
  if (add_entry) {
3506
3485
  if ((error = git_vector_insert(&new_entries, add_entry)) == 0)
3507
- error = index_map_set(new_entries_map, add_entry,
3508
- index->ignore_case);
3486
+ error = git_index_entrymap_put(&new_entries_map, add_entry);
3509
3487
  }
3510
3488
 
3511
3489
  if (remove_entry && error >= 0)
@@ -3534,7 +3512,7 @@ static int git_index_read_iterator(
3534
3512
  goto done;
3535
3513
 
3536
3514
  git_vector_swap(&new_entries, &index->entries);
3537
- new_entries_map = git_atomic_swap(index->entries_map, new_entries_map);
3515
+ git_index_entrymap_swap(&index->entries_map, &new_entries_map);
3538
3516
 
3539
3517
  git_vector_foreach(&remove_entries, i, entry) {
3540
3518
  if (index->tree)
@@ -3549,9 +3527,9 @@ static int git_index_read_iterator(
3549
3527
  error = 0;
3550
3528
 
3551
3529
  done:
3552
- git_idxmap_free(new_entries_map);
3553
- git_vector_free(&new_entries);
3554
- git_vector_free(&remove_entries);
3530
+ git_index_entrymap_dispose(&new_entries_map);
3531
+ git_vector_dispose(&new_entries);
3532
+ git_vector_dispose(&remove_entries);
3555
3533
  git_iterator_free(index_iterator);
3556
3534
  return error;
3557
3535
  }
@@ -3852,7 +3830,7 @@ int git_index_snapshot_new(git_vector *snap, git_index *index)
3852
3830
 
3853
3831
  void git_index_snapshot_release(git_vector *snap, git_index *index)
3854
3832
  {
3855
- git_vector_free(snap);
3833
+ git_vector_dispose(snap);
3856
3834
 
3857
3835
  git_atomic32_dec(&index->readers);
3858
3836
 
@@ -12,8 +12,8 @@
12
12
  #include "futils.h"
13
13
  #include "filebuf.h"
14
14
  #include "vector.h"
15
- #include "idxmap.h"
16
15
  #include "tree-cache.h"
16
+ #include "index_map.h"
17
17
  #include "git2/odb.h"
18
18
  #include "git2/index.h"
19
19
 
@@ -30,7 +30,7 @@ struct git_index {
30
30
  unsigned char checksum[GIT_HASH_MAX_SIZE];
31
31
 
32
32
  git_vector entries;
33
- git_idxmap *entries_map;
33
+ git_index_entrymap entries_map;
34
34
 
35
35
  git_vector deleted; /* deleted entries if readers > 0 */
36
36
  git_atomic32 readers; /* number of active iterators */
@@ -154,6 +154,9 @@ extern int git_index__open(
154
154
  const char *index_path,
155
155
  git_oid_t oid_type);
156
156
 
157
+ /* If the path is conflicted, move it from the index to reuc. */
158
+ int git_index__conflict_to_reuc(git_index *index, const char *path);
159
+
157
160
  /* Copy the current entries vector *and* increment the index refcount.
158
161
  * Call `git_index__release_snapshot` when done.
159
162
  */
@@ -0,0 +1,95 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "common.h"
9
+ #include "hashmap.h"
10
+ #include "index_map.h"
11
+
12
+ typedef git_index_entrymap git_index_entrymap_default;
13
+ typedef git_index_entrymap git_index_entrymap_icase;
14
+
15
+ /* This is __ac_X31_hash_string but with tolower and it takes the entry's stage into account */
16
+ GIT_INLINE(uint32_t) git_index_entrymap_hash(const git_index_entry *e)
17
+ {
18
+ const char *s = e->path;
19
+ uint32_t h = (uint32_t)git__tolower(*s);
20
+ if (h) {
21
+ for (++s ; *s; ++s)
22
+ h = (h << 5) - h + (uint32_t)git__tolower(*s);
23
+ }
24
+ return h + GIT_INDEX_ENTRY_STAGE(e);
25
+ }
26
+
27
+ #define git_index_entrymap_equal_default(a, b) (GIT_INDEX_ENTRY_STAGE(a) == GIT_INDEX_ENTRY_STAGE(b) && strcmp(a->path, b->path) == 0)
28
+ #define git_index_entrymap_equal_icase(a, b) (GIT_INDEX_ENTRY_STAGE(a) == GIT_INDEX_ENTRY_STAGE(b) && strcasecmp(a->path, b->path) == 0)
29
+
30
+ GIT_HASHMAP_FUNCTIONS(git_index_entrymap_default, GIT_HASHMAP_INLINE, git_index_entry *, git_index_entry *, git_index_entrymap_hash, git_index_entrymap_equal_default)
31
+ GIT_HASHMAP_FUNCTIONS(git_index_entrymap_icase, GIT_HASHMAP_INLINE, git_index_entry *, git_index_entry *, git_index_entrymap_hash, git_index_entrymap_equal_icase)
32
+
33
+ int git_index_entrymap_put(git_index_entrymap *map, git_index_entry *e)
34
+ {
35
+ if (map->ignore_case)
36
+ return git_index_entrymap_icase_put((git_index_entrymap_icase *)map, e, e);
37
+ else
38
+ return git_index_entrymap_default_put((git_index_entrymap_default *)map, e, e);
39
+ }
40
+
41
+ int git_index_entrymap_get(git_index_entry **out, git_index_entrymap *map, git_index_entry *e)
42
+ {
43
+ if (map->ignore_case)
44
+ return git_index_entrymap_icase_get(out, (git_index_entrymap_icase *)map, e);
45
+ else
46
+ return git_index_entrymap_default_get(out, (git_index_entrymap_default *)map, e);
47
+ }
48
+
49
+ int git_index_entrymap_remove(git_index_entrymap *map, git_index_entry *e)
50
+ {
51
+ if (map->ignore_case)
52
+ return git_index_entrymap_icase_remove((git_index_entrymap_icase *)map, e);
53
+ else
54
+ return git_index_entrymap_default_remove((git_index_entrymap_default *)map, e);
55
+ }
56
+
57
+ int git_index_entrymap_resize(git_index_entrymap *map, size_t count)
58
+ {
59
+ if (count > UINT32_MAX) {
60
+ git_error_set(GIT_ERROR_INDEX, "index map is out of bounds");
61
+ return -1;
62
+ }
63
+
64
+ if (map->ignore_case)
65
+ return git_index_entrymap_icase__resize((git_index_entrymap_icase *)map, (uint32_t)count);
66
+ else
67
+ return git_index_entrymap_default__resize((git_index_entrymap_default *)map, (uint32_t)count);
68
+ }
69
+
70
+ void git_index_entrymap_swap(git_index_entrymap *a, git_index_entrymap *b)
71
+ {
72
+ git_index_entrymap t;
73
+
74
+ if (a != b) {
75
+ memcpy(&t, a, sizeof(t));
76
+ memcpy(a, b, sizeof(t));
77
+ memcpy(b, &t, sizeof(t));
78
+ }
79
+ }
80
+
81
+ void git_index_entrymap_clear(git_index_entrymap *map)
82
+ {
83
+ if (map->ignore_case)
84
+ git_index_entrymap_icase_clear((git_index_entrymap_icase *)map);
85
+ else
86
+ git_index_entrymap_default_clear((git_index_entrymap_default *)map);
87
+ }
88
+
89
+ void git_index_entrymap_dispose(git_index_entrymap *map)
90
+ {
91
+ if (map->ignore_case)
92
+ git_index_entrymap_icase_dispose((git_index_entrymap_icase *)map);
93
+ else
94
+ git_index_entrymap_default_dispose((git_index_entrymap_default *)map);
95
+ }
@@ -0,0 +1,28 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_index_map_h__
8
+ #define INCLUDE_index_map_h__
9
+
10
+ #include "common.h"
11
+ #include "hashmap.h"
12
+
13
+ typedef struct {
14
+ unsigned int ignore_case;
15
+ GIT_HASHMAP_STRUCT_MEMBERS(git_index_entry *, git_index_entry *)
16
+ } git_index_entrymap;
17
+
18
+ #define GIT_INDEX_ENTRYMAP_INIT { 0 }
19
+
20
+ extern int git_index_entrymap_get(git_index_entry **out, git_index_entrymap *map, git_index_entry *e);
21
+ extern int git_index_entrymap_put(git_index_entrymap *map, git_index_entry *e);
22
+ extern int git_index_entrymap_remove(git_index_entrymap *map, git_index_entry *e);
23
+ extern int git_index_entrymap_resize(git_index_entrymap *map, size_t count);
24
+ extern void git_index_entrymap_swap(git_index_entrymap *a, git_index_entrymap *b);
25
+ extern void git_index_entrymap_clear(git_index_entrymap *map);
26
+ extern void git_index_entrymap_dispose(git_index_entrymap *map);
27
+
28
+ #endif