rugged 1.6.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/rugged_allocator.c +0 -54
  3. data/lib/rugged/version.rb +1 -1
  4. data/vendor/libgit2/AUTHORS +1 -0
  5. data/vendor/libgit2/CMakeLists.txt +25 -17
  6. data/vendor/libgit2/COPYING +195 -1
  7. data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
  8. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  9. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  10. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
  11. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
  14. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  15. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  16. data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
  17. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  18. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  19. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  20. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  21. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  22. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  23. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  24. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  25. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  27. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  28. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  29. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  30. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  31. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  32. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  33. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  34. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  35. data/vendor/libgit2/deps/pcre/LICENCE +5 -5
  36. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  37. data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
  38. data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
  39. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
  40. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
  41. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
  42. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
  43. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
  44. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
  45. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
  46. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
  47. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
  48. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
  49. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
  50. data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
  51. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  52. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  53. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  54. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  55. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  56. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  57. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  58. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  59. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  60. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  61. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  62. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  63. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  64. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  65. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  66. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  67. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  68. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  69. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  70. data/vendor/libgit2/include/git2/apply.h +27 -6
  71. data/vendor/libgit2/include/git2/attr.h +17 -4
  72. data/vendor/libgit2/include/git2/blame.h +133 -28
  73. data/vendor/libgit2/include/git2/blob.h +71 -28
  74. data/vendor/libgit2/include/git2/branch.h +22 -15
  75. data/vendor/libgit2/include/git2/buffer.h +6 -4
  76. data/vendor/libgit2/include/git2/cert.h +2 -1
  77. data/vendor/libgit2/include/git2/checkout.h +83 -32
  78. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  79. data/vendor/libgit2/include/git2/clone.h +25 -9
  80. data/vendor/libgit2/include/git2/commit.h +132 -3
  81. data/vendor/libgit2/include/git2/common.h +138 -56
  82. data/vendor/libgit2/include/git2/config.h +93 -23
  83. data/vendor/libgit2/include/git2/credential.h +30 -2
  84. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  85. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  86. data/vendor/libgit2/include/git2/describe.h +13 -1
  87. data/vendor/libgit2/include/git2/diff.h +77 -9
  88. data/vendor/libgit2/include/git2/email.h +9 -29
  89. data/vendor/libgit2/include/git2/errors.h +49 -74
  90. data/vendor/libgit2/include/git2/filter.h +14 -7
  91. data/vendor/libgit2/include/git2/global.h +8 -1
  92. data/vendor/libgit2/include/git2/graph.h +3 -2
  93. data/vendor/libgit2/include/git2/ignore.h +10 -0
  94. data/vendor/libgit2/include/git2/index.h +100 -6
  95. data/vendor/libgit2/include/git2/indexer.h +21 -4
  96. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  97. data/vendor/libgit2/include/git2/merge.h +46 -1
  98. data/vendor/libgit2/include/git2/message.h +2 -2
  99. data/vendor/libgit2/include/git2/net.h +3 -1
  100. data/vendor/libgit2/include/git2/notes.h +9 -6
  101. data/vendor/libgit2/include/git2/object.h +9 -8
  102. data/vendor/libgit2/include/git2/odb.h +91 -49
  103. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  104. data/vendor/libgit2/include/git2/oid.h +24 -25
  105. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  106. data/vendor/libgit2/include/git2/pack.h +13 -1
  107. data/vendor/libgit2/include/git2/patch.h +2 -3
  108. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  109. data/vendor/libgit2/include/git2/proxy.h +10 -0
  110. data/vendor/libgit2/include/git2/rebase.h +9 -6
  111. data/vendor/libgit2/include/git2/refdb.h +2 -2
  112. data/vendor/libgit2/include/git2/reflog.h +3 -2
  113. data/vendor/libgit2/include/git2/refs.h +9 -6
  114. data/vendor/libgit2/include/git2/refspec.h +14 -4
  115. data/vendor/libgit2/include/git2/remote.h +112 -18
  116. data/vendor/libgit2/include/git2/repository.h +61 -15
  117. data/vendor/libgit2/include/git2/reset.h +16 -3
  118. data/vendor/libgit2/include/git2/revert.h +9 -4
  119. data/vendor/libgit2/include/git2/revparse.h +3 -3
  120. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  121. data/vendor/libgit2/include/git2/signature.h +46 -1
  122. data/vendor/libgit2/include/git2/stash.h +17 -3
  123. data/vendor/libgit2/include/git2/status.h +10 -6
  124. data/vendor/libgit2/include/git2/stdint.h +87 -85
  125. data/vendor/libgit2/include/git2/strarray.h +2 -3
  126. data/vendor/libgit2/include/git2/submodule.h +20 -9
  127. data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
  128. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  129. data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
  130. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  131. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  132. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  133. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  134. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  135. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  136. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  139. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  140. data/vendor/libgit2/include/git2/sys/midx.h +47 -4
  141. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  142. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  143. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  144. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  145. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  146. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  147. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  148. data/vendor/libgit2/include/git2/sys/stream.h +25 -2
  149. data/vendor/libgit2/include/git2/sys/transport.h +44 -5
  150. data/vendor/libgit2/include/git2/tag.h +3 -1
  151. data/vendor/libgit2/include/git2/trace.h +9 -3
  152. data/vendor/libgit2/include/git2/transaction.h +3 -2
  153. data/vendor/libgit2/include/git2/transport.h +11 -3
  154. data/vendor/libgit2/include/git2/tree.h +16 -5
  155. data/vendor/libgit2/include/git2/types.h +19 -3
  156. data/vendor/libgit2/include/git2/version.h +44 -8
  157. data/vendor/libgit2/include/git2/worktree.h +19 -7
  158. data/vendor/libgit2/src/CMakeLists.txt +40 -15
  159. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  160. data/vendor/libgit2/src/cli/cmd.c +1 -1
  161. data/vendor/libgit2/src/cli/cmd.h +4 -0
  162. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  163. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  164. data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
  165. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  166. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  167. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  168. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  169. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  170. data/vendor/libgit2/src/cli/common.c +168 -0
  171. data/vendor/libgit2/src/cli/common.h +63 -0
  172. data/vendor/libgit2/src/cli/error.h +1 -1
  173. data/vendor/libgit2/src/cli/main.c +52 -24
  174. data/vendor/libgit2/src/cli/opt.c +29 -3
  175. data/vendor/libgit2/src/cli/opt.h +21 -3
  176. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  177. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  178. data/vendor/libgit2/src/cli/progress.c +60 -10
  179. data/vendor/libgit2/src/cli/progress.h +16 -4
  180. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  181. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  182. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  183. data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
  184. data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
  185. data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
  186. data/vendor/libgit2/src/libgit2/apply.c +14 -16
  187. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  188. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  189. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  190. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  191. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  192. data/vendor/libgit2/src/libgit2/blame.c +152 -59
  193. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  194. data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
  195. data/vendor/libgit2/src/libgit2/branch.c +2 -2
  196. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  197. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  198. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  199. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  200. data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
  201. data/vendor/libgit2/src/libgit2/clone.c +186 -164
  202. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  203. data/vendor/libgit2/src/libgit2/commit.c +123 -9
  204. data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
  205. data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
  206. data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
  207. data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
  208. data/vendor/libgit2/src/libgit2/config.c +394 -300
  209. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  210. data/vendor/libgit2/src/libgit2/config.h +9 -4
  211. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  212. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  213. data/vendor/libgit2/src/libgit2/config_file.c +113 -96
  214. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  215. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  216. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  217. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  218. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  219. data/vendor/libgit2/src/libgit2/describe.c +34 -31
  220. data/vendor/libgit2/src/libgit2/diff.c +17 -8
  221. data/vendor/libgit2/src/libgit2/diff.h +6 -6
  222. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  223. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  224. data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
  225. data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
  226. data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
  227. data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
  228. data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
  229. data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
  230. data/vendor/libgit2/src/libgit2/email.c +5 -3
  231. data/vendor/libgit2/src/libgit2/fetch.c +39 -9
  232. data/vendor/libgit2/src/libgit2/fetch.h +0 -2
  233. data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
  234. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  235. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  236. data/vendor/libgit2/src/libgit2/grafts.c +270 -0
  237. data/vendor/libgit2/src/libgit2/grafts.h +35 -0
  238. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  239. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  240. data/vendor/libgit2/src/libgit2/ident.c +3 -3
  241. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  242. data/vendor/libgit2/src/libgit2/index.c +392 -208
  243. data/vendor/libgit2/src/libgit2/index.h +16 -3
  244. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  245. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  246. data/vendor/libgit2/src/libgit2/indexer.c +44 -41
  247. data/vendor/libgit2/src/libgit2/iterator.c +34 -13
  248. data/vendor/libgit2/src/libgit2/iterator.h +3 -0
  249. data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +56 -46
  252. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  253. data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
  254. data/vendor/libgit2/src/libgit2/midx.c +86 -44
  255. data/vendor/libgit2/src/libgit2/midx.h +13 -3
  256. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  257. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  258. data/vendor/libgit2/src/libgit2/notes.c +9 -8
  259. data/vendor/libgit2/src/libgit2/object.c +42 -16
  260. data/vendor/libgit2/src/libgit2/object.h +6 -0
  261. data/vendor/libgit2/src/libgit2/odb.c +16 -9
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
  264. data/vendor/libgit2/src/libgit2/oid.c +35 -2
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
  267. data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
  268. data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
  269. data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
  270. data/vendor/libgit2/src/libgit2/pack.c +33 -27
  271. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  272. data/vendor/libgit2/src/libgit2/parse.c +7 -4
  273. data/vendor/libgit2/src/libgit2/parse.h +1 -1
  274. data/vendor/libgit2/src/libgit2/patch.h +7 -1
  275. data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
  276. data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
  277. data/vendor/libgit2/src/libgit2/path.c +1 -1
  278. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  279. data/vendor/libgit2/src/libgit2/push.c +81 -30
  280. data/vendor/libgit2/src/libgit2/push.h +1 -0
  281. data/vendor/libgit2/src/libgit2/reader.c +1 -1
  282. data/vendor/libgit2/src/libgit2/rebase.c +72 -84
  283. data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
  284. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  285. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  286. data/vendor/libgit2/src/libgit2/refs.c +34 -8
  287. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  288. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  289. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  290. data/vendor/libgit2/src/libgit2/remote.c +136 -67
  291. data/vendor/libgit2/src/libgit2/remote.h +1 -0
  292. data/vendor/libgit2/src/libgit2/repository.c +789 -330
  293. data/vendor/libgit2/src/libgit2/repository.h +22 -3
  294. data/vendor/libgit2/src/libgit2/reset.c +2 -2
  295. data/vendor/libgit2/src/libgit2/revert.c +9 -13
  296. data/vendor/libgit2/src/libgit2/revparse.c +6 -3
  297. data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
  298. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  299. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  300. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  301. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  302. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  303. data/vendor/libgit2/src/libgit2/stash.c +9 -8
  304. data/vendor/libgit2/src/libgit2/status.c +1 -1
  305. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
  306. data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
  307. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  308. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  309. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  310. data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
  311. data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
  312. data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
  313. data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
  314. data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
  315. data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
  316. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  317. data/vendor/libgit2/src/libgit2/submodule.h +9 -10
  318. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  319. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  320. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  321. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  322. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  323. data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
  324. data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
  325. data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
  326. data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
  327. data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
  328. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
  329. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  330. data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
  331. data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
  332. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  333. data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
  334. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  335. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  336. data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
  337. data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
  338. data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
  339. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
  340. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
  341. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  342. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  343. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  344. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  345. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  346. data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
  347. data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
  348. data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
  349. data/vendor/libgit2/src/libgit2/tree.c +35 -27
  350. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  351. data/vendor/libgit2/src/libgit2/worktree.c +39 -27
  352. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  353. data/vendor/libgit2/src/util/alloc.c +69 -7
  354. data/vendor/libgit2/src/util/alloc.h +34 -9
  355. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  356. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  357. data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
  358. data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
  359. data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
  360. data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
  361. data/vendor/libgit2/src/util/array.h +24 -18
  362. data/vendor/libgit2/src/util/cc-compat.h +4 -0
  363. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  364. data/vendor/libgit2/src/util/date.c +22 -14
  365. data/vendor/libgit2/src/util/date.h +12 -0
  366. data/vendor/libgit2/src/util/errors.c +401 -0
  367. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  368. data/vendor/libgit2/src/util/filebuf.c +6 -1
  369. data/vendor/libgit2/src/util/filebuf.h +19 -6
  370. data/vendor/libgit2/src/util/fs_path.c +16 -5
  371. data/vendor/libgit2/src/util/fs_path.h +23 -0
  372. data/vendor/libgit2/src/util/futils.c +14 -10
  373. data/vendor/libgit2/src/util/futils.h +13 -4
  374. data/vendor/libgit2/src/util/git2_features.h.in +21 -4
  375. data/vendor/libgit2/src/util/git2_util.h +6 -0
  376. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  377. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  378. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  379. data/vendor/libgit2/src/util/hashmap.h +424 -0
  380. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  381. data/vendor/libgit2/src/util/integer.h +3 -1
  382. data/vendor/libgit2/src/util/net.c +318 -161
  383. data/vendor/libgit2/src/util/net.h +27 -0
  384. data/vendor/libgit2/src/util/pool.c +1 -1
  385. data/vendor/libgit2/src/util/pool.h +5 -0
  386. data/vendor/libgit2/src/util/posix.c +54 -0
  387. data/vendor/libgit2/src/util/posix.h +22 -0
  388. data/vendor/libgit2/src/util/pqueue.h +1 -1
  389. data/vendor/libgit2/src/util/process.h +222 -0
  390. data/vendor/libgit2/src/util/rand.c +6 -10
  391. data/vendor/libgit2/src/util/regexp.c +1 -1
  392. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  393. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  394. data/vendor/libgit2/src/util/staticstr.h +66 -0
  395. data/vendor/libgit2/src/util/str.c +2 -2
  396. data/vendor/libgit2/src/util/strlist.c +108 -0
  397. data/vendor/libgit2/src/util/strlist.h +36 -0
  398. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  399. data/vendor/libgit2/src/util/unix/process.c +629 -0
  400. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  401. data/vendor/libgit2/src/util/util.c +17 -12
  402. data/vendor/libgit2/src/util/util.h +28 -54
  403. data/vendor/libgit2/src/util/vector.c +3 -3
  404. data/vendor/libgit2/src/util/vector.h +2 -2
  405. data/vendor/libgit2/src/util/win32/error.c +1 -1
  406. data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
  407. data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
  408. data/vendor/libgit2/src/util/win32/process.c +506 -0
  409. data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
  410. data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
  411. data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
  412. metadata +72 -49
  413. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
  414. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  415. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  416. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  417. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  418. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  419. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  420. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  421. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  422. data/vendor/libgit2/src/libgit2/errors.c +0 -238
  423. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  424. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  425. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  426. data/vendor/libgit2/src/libgit2/netops.c +0 -124
  427. data/vendor/libgit2/src/libgit2/netops.h +0 -68
  428. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  429. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  430. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  431. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  432. data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
  433. data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
  434. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  435. data/vendor/libgit2/src/util/khash.h +0 -615
  436. data/vendor/libgit2/src/util/strmap.c +0 -100
  437. data/vendor/libgit2/src/util/strmap.h +0 -131
  438. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
  439. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
  440. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
  441. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
  442. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
  443. /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -169,22 +169,27 @@ out:
169
169
  return error;
170
170
  }
171
171
 
172
+ GIT_HASHMAP_STR_SETUP(git_submodule_namemap, char *);
173
+
172
174
  /**
173
175
  * Release the name map returned by 'load_submodule_names'.
174
176
  */
175
- static void free_submodule_names(git_strmap *names)
177
+ static void free_submodule_names(git_submodule_namemap *names)
176
178
  {
179
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
177
180
  const char *key;
178
181
  char *value;
179
182
 
180
183
  if (names == NULL)
181
184
  return;
182
185
 
183
- git_strmap_foreach(names, key, value, {
184
- git__free((char *) key);
186
+ while (git_submodule_namemap_iterate(&iter, &key, &value, names) == 0) {
187
+ git__free((char *)key);
185
188
  git__free(value);
186
- });
187
- git_strmap_free(names);
189
+ }
190
+
191
+ git_submodule_namemap_dispose(names);
192
+ git__free(names);
188
193
 
189
194
  return;
190
195
  }
@@ -194,19 +199,22 @@ static void free_submodule_names(git_strmap *names)
194
199
  * TODO: for some use-cases, this might need case-folding on a
195
200
  * case-insensitive filesystem
196
201
  */
197
- static int load_submodule_names(git_strmap **out, git_repository *repo, git_config *cfg)
202
+ static int load_submodule_names(git_submodule_namemap **out, git_repository *repo, git_config *cfg)
198
203
  {
199
- const char *key = "submodule\\..*\\.path";
204
+ const char *key = "^submodule\\..*\\.path$";
205
+ char *value;
200
206
  git_config_iterator *iter = NULL;
201
207
  git_config_entry *entry;
202
208
  git_str buf = GIT_STR_INIT;
203
- git_strmap *names;
209
+ git_submodule_namemap *names;
204
210
  int isvalid, error;
205
211
 
206
212
  *out = NULL;
207
213
 
208
- if ((error = git_strmap_new(&names)) < 0)
214
+ if ((names = git__calloc(1, sizeof(git_submodule_namemap))) == NULL) {
215
+ error = -1;
209
216
  goto out;
217
+ }
210
218
 
211
219
  if ((error = git_config_iterator_glob_new(&iter, cfg, key)) < 0)
212
220
  goto out;
@@ -216,7 +224,7 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
216
224
  fdot = strchr(entry->name, '.');
217
225
  ldot = strrchr(entry->name, '.');
218
226
 
219
- if (git_strmap_exists(names, entry->value)) {
227
+ if (git_submodule_namemap_contains(names, entry->value)) {
220
228
  git_error_set(GIT_ERROR_SUBMODULE,
221
229
  "duplicated submodule path '%s'", entry->value);
222
230
  error = -1;
@@ -233,7 +241,12 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
233
241
  if (!isvalid)
234
242
  continue;
235
243
 
236
- if ((error = git_strmap_set(names, git__strdup(entry->value), git_str_detach(&buf))) < 0) {
244
+ if ((value = git__strdup(entry->value)) == NULL) {
245
+ error = -1;
246
+ goto out;
247
+ }
248
+
249
+ if ((error = git_submodule_namemap_put(names, value, git_str_detach(&buf))) < 0) {
237
250
  git_error_set(GIT_ERROR_NOMEMORY, "error inserting submodule into hash table");
238
251
  error = -1;
239
252
  goto out;
@@ -252,31 +265,43 @@ out:
252
265
  return error;
253
266
  }
254
267
 
255
- int git_submodule_cache_init(git_strmap **out, git_repository *repo)
268
+ GIT_HASHMAP_STR_FUNCTIONS(git_submodule_cache, GIT_HASHMAP_INLINE, git_submodule *);
269
+
270
+ int git_submodule__map(git_submodule_cache *cache, git_repository *repo);
271
+
272
+ int git_submodule_cache_init(git_submodule_cache **out, git_repository *repo)
256
273
  {
274
+ git_submodule_cache *cache = NULL;
257
275
  int error = 0;
258
- git_strmap *cache = NULL;
276
+
259
277
  GIT_ASSERT_ARG(out);
260
278
  GIT_ASSERT_ARG(repo);
261
- if ((error = git_strmap_new(&cache)) < 0)
262
- return error;
263
- if ((error = git_submodule__map(repo, cache)) < 0) {
279
+
280
+ if ((cache = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
281
+ return -1;
282
+
283
+ if ((error = git_submodule__map(cache, repo)) < 0) {
264
284
  git_submodule_cache_free(cache);
265
285
  return error;
266
286
  }
287
+
267
288
  *out = cache;
268
289
  return error;
269
290
  }
270
291
 
271
- int git_submodule_cache_free(git_strmap *cache)
292
+ int git_submodule_cache_free(git_submodule_cache *cache)
272
293
  {
273
294
  git_submodule *sm = NULL;
295
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
296
+
274
297
  if (cache == NULL)
275
298
  return 0;
276
- git_strmap_foreach_value(cache, sm, {
299
+
300
+ while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0)
277
301
  git_submodule_free(sm);
278
- });
279
- git_strmap_free(cache);
302
+
303
+ git_submodule_cache_dispose(cache);
304
+ git__free(cache);
280
305
  return 0;
281
306
  }
282
307
 
@@ -292,7 +317,7 @@ int git_submodule__lookup_with_cache(
292
317
  git_submodule **out, /* NULL if user only wants to test existence */
293
318
  git_repository *repo,
294
319
  const char *name, /* trailing slash is allowed */
295
- git_strmap *cache)
320
+ git_submodule_cache *cache)
296
321
  {
297
322
  int error;
298
323
  unsigned int location;
@@ -307,7 +332,7 @@ int git_submodule__lookup_with_cache(
307
332
  }
308
333
 
309
334
  if (cache != NULL) {
310
- if ((sm = git_strmap_get(cache, name)) != NULL) {
335
+ if (git_submodule_cache_get(&sm, cache, name) == 0) {
311
336
  if (out) {
312
337
  *out = sm;
313
338
  GIT_REFCOUNT_INC(*out);
@@ -332,7 +357,7 @@ int git_submodule__lookup_with_cache(
332
357
  /* If it's not configured or we're looking by path */
333
358
  if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
334
359
  git_config_backend *mods;
335
- const char *pattern = "submodule\\..*\\.path";
360
+ const char *pattern = "^submodule\\..*\\.path$";
336
361
  git_str path = GIT_STR_INIT;
337
362
  fbp_data data = { NULL, NULL };
338
363
 
@@ -434,19 +459,23 @@ static void submodule_free_dup(void *sm)
434
459
  git_submodule_free(sm);
435
460
  }
436
461
 
437
- static int submodule_get_or_create(git_submodule **out, git_repository *repo, git_strmap *map, const char *name)
462
+ static int submodule_get_or_create(
463
+ git_submodule **out,
464
+ git_repository *repo,
465
+ git_submodule_cache *cache,
466
+ const char *name)
438
467
  {
439
468
  git_submodule *sm = NULL;
440
469
  int error;
441
470
 
442
- if ((sm = git_strmap_get(map, name)) != NULL)
471
+ if (git_submodule_cache_get(&sm, cache, name) == 0)
443
472
  goto done;
444
473
 
445
474
  /* if the submodule doesn't exist yet in the map, create it */
446
475
  if ((error = submodule_alloc(&sm, repo, name)) < 0)
447
476
  return error;
448
477
 
449
- if ((error = git_strmap_set(map, sm->name, sm)) < 0) {
478
+ if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0) {
450
479
  git_submodule_free(sm);
451
480
  return error;
452
481
  }
@@ -457,12 +486,15 @@ done:
457
486
  return 0;
458
487
  }
459
488
 
460
- static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cfg)
489
+ static int submodules_from_index(
490
+ git_submodule_cache *cache,
491
+ git_index *idx,
492
+ git_config *cfg)
461
493
  {
462
494
  int error;
463
495
  git_iterator *i = NULL;
464
496
  const git_index_entry *entry;
465
- git_strmap *names;
497
+ git_submodule_namemap *names;
466
498
 
467
499
  if ((error = load_submodule_names(&names, git_index_owner(idx), cfg)))
468
500
  goto done;
@@ -473,7 +505,7 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
473
505
  while (!(error = git_iterator_advance(&entry, i))) {
474
506
  git_submodule *sm;
475
507
 
476
- if ((sm = git_strmap_get(map, entry->path)) != NULL) {
508
+ if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
477
509
  if (S_ISGITLINK(entry->mode))
478
510
  submodule_update_from_index_entry(sm, entry);
479
511
  else
@@ -481,10 +513,10 @@ static int submodules_from_index(git_strmap *map, git_index *idx, git_config *cf
481
513
  } else if (S_ISGITLINK(entry->mode)) {
482
514
  const char *name;
483
515
 
484
- if ((name = git_strmap_get(names, entry->path)) == NULL)
516
+ if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
485
517
  name = entry->path;
486
518
 
487
- if (!submodule_get_or_create(&sm, git_index_owner(idx), map, name)) {
519
+ if (!submodule_get_or_create(&sm, git_index_owner(idx), cache, name)) {
488
520
  submodule_update_from_index_entry(sm, entry);
489
521
  git_submodule_free(sm);
490
522
  }
@@ -501,12 +533,15 @@ done:
501
533
  return error;
502
534
  }
503
535
 
504
- static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg)
536
+ static int submodules_from_head(
537
+ git_submodule_cache *cache,
538
+ git_tree *head,
539
+ git_config *cfg)
505
540
  {
506
541
  int error;
507
542
  git_iterator *i = NULL;
508
543
  const git_index_entry *entry;
509
- git_strmap *names;
544
+ git_submodule_namemap *names;
510
545
 
511
546
  if ((error = load_submodule_names(&names, git_tree_owner(head), cfg)))
512
547
  goto done;
@@ -517,7 +552,7 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
517
552
  while (!(error = git_iterator_advance(&entry, i))) {
518
553
  git_submodule *sm;
519
554
 
520
- if ((sm = git_strmap_get(map, entry->path)) != NULL) {
555
+ if (git_submodule_cache_get(&sm, cache, entry->path) == 0) {
521
556
  if (S_ISGITLINK(entry->mode))
522
557
  submodule_update_from_head_data(sm, entry->mode, &entry->id);
523
558
  else
@@ -525,10 +560,10 @@ static int submodules_from_head(git_strmap *map, git_tree *head, git_config *cfg
525
560
  } else if (S_ISGITLINK(entry->mode)) {
526
561
  const char *name;
527
562
 
528
- if ((name = git_strmap_get(names, entry->path)) == NULL)
563
+ if (git_submodule_namemap_get((char **)&name, names, entry->path) != 0)
529
564
  name = entry->path;
530
565
 
531
- if (!submodule_get_or_create(&sm, git_tree_owner(head), map, name)) {
566
+ if (!submodule_get_or_create(&sm, git_tree_owner(head), cache, name)) {
532
567
  submodule_update_from_head_data(
533
568
  sm, entry->mode, &entry->id);
534
569
  git_submodule_free(sm);
@@ -549,11 +584,11 @@ done:
549
584
  /* If have_sm is true, sm is populated, otherwise map an repo are. */
550
585
  typedef struct {
551
586
  git_config *mods;
552
- git_strmap *map;
587
+ git_submodule_cache *cache;
553
588
  git_repository *repo;
554
589
  } lfc_data;
555
590
 
556
- int git_submodule__map(git_repository *repo, git_strmap *map)
591
+ int git_submodule__map(git_submodule_cache *cache, git_repository *repo)
557
592
  {
558
593
  int error = 0;
559
594
  git_index *idx = NULL;
@@ -563,8 +598,8 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
563
598
  git_config *mods = NULL;
564
599
  bool has_workdir;
565
600
 
601
+ GIT_ASSERT_ARG(cache);
566
602
  GIT_ASSERT_ARG(repo);
567
- GIT_ASSERT_ARG(map);
568
603
 
569
604
  /* get sources that we will need to check */
570
605
  if (git_repository_index(&idx, repo) < 0)
@@ -581,7 +616,7 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
581
616
  /* add submodule information from .gitmodules */
582
617
  if (has_workdir) {
583
618
  lfc_data data = { 0 };
584
- data.map = map;
619
+ data.cache = cache;
585
620
  data.repo = repo;
586
621
 
587
622
  if ((error = gitmodules_snapshot(&mods, repo)) < 0) {
@@ -597,19 +632,22 @@ int git_submodule__map(git_repository *repo, git_strmap *map)
597
632
  }
598
633
  /* add back submodule information from index */
599
634
  if (mods && idx) {
600
- if ((error = submodules_from_index(map, idx, mods)) < 0)
635
+ if ((error = submodules_from_index(cache, idx, mods)) < 0)
601
636
  goto cleanup;
602
637
  }
603
638
  /* add submodule information from HEAD */
604
639
  if (mods && head) {
605
- if ((error = submodules_from_head(map, head, mods)) < 0)
640
+ if ((error = submodules_from_head(cache, head, mods)) < 0)
606
641
  goto cleanup;
607
642
  }
608
643
  /* shallow scan submodules in work tree as needed */
609
644
  if (has_workdir) {
610
- git_strmap_foreach_value(map, sm, {
611
- submodule_load_from_wd_lite(sm);
612
- });
645
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
646
+
647
+ while (git_submodule_cache_iterate(&iter, NULL, &sm, cache) == 0) {
648
+ if ((error = submodule_load_from_wd_lite(sm)) < 0)
649
+ goto cleanup;
650
+ }
613
651
  }
614
652
 
615
653
  cleanup:
@@ -627,8 +665,9 @@ int git_submodule_foreach(
627
665
  void *payload)
628
666
  {
629
667
  git_vector snapshot = GIT_VECTOR_INIT;
630
- git_strmap *submodules;
668
+ git_submodule_cache *submodules;
631
669
  git_submodule *sm;
670
+ git_hashmap_iter_t iter;
632
671
  int error;
633
672
  size_t i;
634
673
 
@@ -637,20 +676,22 @@ int git_submodule_foreach(
637
676
  return -1;
638
677
  }
639
678
 
640
- if ((error = git_strmap_new(&submodules)) < 0)
641
- return error;
679
+ if ((submodules = git__calloc(1, sizeof(git_submodule_cache))) == NULL)
680
+ return -1;
642
681
 
643
- if ((error = git_submodule__map(repo, submodules)) < 0)
682
+ if ((error = git_submodule__map(submodules, repo)) < 0)
644
683
  goto done;
645
684
 
646
- if (!(error = git_vector_init(
647
- &snapshot, git_strmap_size(submodules), submodule_cmp))) {
648
-
649
- git_strmap_foreach_value(submodules, sm, {
685
+ if (!(error = git_vector_init(&snapshot,
686
+ git_submodule_cache_size(submodules),
687
+ submodule_cmp))) {
688
+ for (iter = GIT_HASHMAP_ITER_INIT;
689
+ git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; ) {
650
690
  if ((error = git_vector_insert(&snapshot, sm)) < 0)
651
691
  break;
692
+
652
693
  GIT_REFCOUNT_INC(sm);
653
- });
694
+ }
654
695
  }
655
696
 
656
697
  if (error < 0)
@@ -668,12 +709,14 @@ int git_submodule_foreach(
668
709
  done:
669
710
  git_vector_foreach(&snapshot, i, sm)
670
711
  git_submodule_free(sm);
671
- git_vector_free(&snapshot);
712
+ git_vector_dispose(&snapshot);
672
713
 
673
- git_strmap_foreach_value(submodules, sm, {
714
+ for (iter = GIT_HASHMAP_ITER_INIT;
715
+ git_submodule_cache_iterate(&iter, NULL, &sm, submodules) == 0; )
674
716
  git_submodule_free(sm);
675
- });
676
- git_strmap_free(submodules);
717
+
718
+ git_submodule_cache_dispose(submodules);
719
+ git__free(submodules);
677
720
 
678
721
  return error;
679
722
  }
@@ -1338,11 +1381,11 @@ int git_submodule_update(git_submodule *sm, int init, git_submodule_update_optio
1338
1381
  /* Get the status of the submodule to determine if it is already initialized */
1339
1382
  if ((error = git_submodule_status(&submodule_status, sm->repo, sm->name, GIT_SUBMODULE_IGNORE_UNSPECIFIED)) < 0)
1340
1383
  goto done;
1341
-
1384
+
1342
1385
  /* If the submodule is configured but hasn't been added, skip it */
1343
1386
  if (submodule_status == GIT_SUBMODULE_STATUS_IN_CONFIG)
1344
1387
  goto done;
1345
-
1388
+
1346
1389
  /*
1347
1390
  * If submodule work dir is not already initialized, check to see
1348
1391
  * what we need to do (initialize, clone, return error...)
@@ -2049,7 +2092,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
2049
2092
  {
2050
2093
  lfc_data *data = payload;
2051
2094
  const char *namestart, *property;
2052
- git_strmap *map = data->map;
2095
+ git_submodule_cache *cache = data->cache;
2053
2096
  git_str name = GIT_STR_INIT;
2054
2097
  git_submodule *sm;
2055
2098
  int error, isvalid;
@@ -2080,7 +2123,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
2080
2123
  * a new submodule, load the config and insert it. If it's
2081
2124
  * already inserted, we've already loaded it, so we skip.
2082
2125
  */
2083
- if (git_strmap_exists(map, name.ptr)) {
2126
+ if (git_submodule_cache_contains(cache, name.ptr)) {
2084
2127
  error = 0;
2085
2128
  goto done;
2086
2129
  }
@@ -2093,7 +2136,7 @@ static int submodule_load_each(const git_config_entry *entry, void *payload)
2093
2136
  goto done;
2094
2137
  }
2095
2138
 
2096
- if ((error = git_strmap_set(map, sm->name, sm)) < 0)
2139
+ if ((error = git_submodule_cache_put(cache, sm->name, sm)) < 0)
2097
2140
  goto done;
2098
2141
 
2099
2142
  error = 0;
@@ -12,6 +12,7 @@
12
12
  #include "git2/submodule.h"
13
13
  #include "git2/repository.h"
14
14
  #include "futils.h"
15
+ #include "hashmap.h"
15
16
 
16
17
  /* Notes:
17
18
  *
@@ -69,9 +70,9 @@
69
70
  * - `repo` is the parent repository that contains this submodule.
70
71
  * - `flags` after for internal use, tracking where this submodule has been
71
72
  * found (head, index, config, workdir) and known status info, etc.
72
- * - `head_oid` is the SHA1 for the submodule path in the repo HEAD.
73
- * - `index_oid` is the SHA1 for the submodule recorded in the index.
74
- * - `wd_oid` is the SHA1 for the HEAD of the checked out submodule.
73
+ * - `head_oid` is the oid for the submodule path in the repo HEAD.
74
+ * - `index_oid` is the oid for the submodule recorded in the index.
75
+ * - `wd_oid` is the oid for the HEAD of the checked out submodule.
75
76
  *
76
77
  * If the submodule has been added to .gitmodules but not yet git added,
77
78
  * then the `index_oid` will be zero but still marked valid. If the
@@ -116,15 +117,17 @@ enum {
116
117
  #define GIT_SUBMODULE_STATUS__CLEAR_INTERNAL(S) \
117
118
  ((S) & ~(0xFFFFFFFFu << 20))
118
119
 
120
+ GIT_HASHMAP_STR_STRUCT(git_submodule_cache, git_submodule *);
121
+
119
122
  /* Initialize an external submodule cache for the provided repo. */
120
- extern int git_submodule_cache_init(git_strmap **out, git_repository *repo);
123
+ extern int git_submodule_cache_init(git_submodule_cache **out, git_repository *repo);
121
124
 
122
125
  /* Release the resources of the submodule cache. */
123
- extern int git_submodule_cache_free(git_strmap *cache);
126
+ extern int git_submodule_cache_free(git_submodule_cache *cache);
124
127
 
125
128
  /* Submodule lookup with an explicit cache */
126
129
  extern int git_submodule__lookup_with_cache(
127
- git_submodule **out, git_repository *repo, const char *path, git_strmap *cache);
130
+ git_submodule **out, git_repository *repo, const char *path, git_submodule_cache *cache);
128
131
 
129
132
  /* Internal status fn returns status and optionally the various OIDs */
130
133
  extern int git_submodule__status(
@@ -145,10 +148,6 @@ extern int git_submodule_parse_ignore(
145
148
  extern int git_submodule_parse_update(
146
149
  git_submodule_update_t *out, const char *value);
147
150
 
148
- extern int git_submodule__map(
149
- git_repository *repo,
150
- git_strmap *map);
151
-
152
151
  /**
153
152
  * Check whether a submodule's name is valid.
154
153
  *
@@ -548,7 +548,7 @@ int git_tag_list_match(git_strarray *tag_names, const char *pattern, git_reposit
548
548
  error = git_tag_foreach(repo, &tag_list_cb, (void *)&filter);
549
549
 
550
550
  if (error < 0)
551
- git_vector_free(&taglist);
551
+ git_vector_dispose(&taglist);
552
552
 
553
553
  tag_names->strings =
554
554
  (char **)git_vector_detach(&tag_names->count, NULL, &taglist);
@@ -24,7 +24,7 @@ static const char *const git_generated_prefixes[] = {
24
24
  static int is_blank_line(const char *str)
25
25
  {
26
26
  const char *s = str;
27
- while (*s && *s != '\n' && isspace(*s))
27
+ while (*s && *s != '\n' && git__isspace(*s))
28
28
  s++;
29
29
  return !*s || *s == '\n';
30
30
  }
@@ -93,7 +93,7 @@ static bool find_separator(size_t *out, const char *line, const char *separators
93
93
  return true;
94
94
  }
95
95
 
96
- if (!whitespace_found && (isalnum(*c) || *c == '-'))
96
+ if (!whitespace_found && (git__isalnum(*c) || *c == '-'))
97
97
  continue;
98
98
  if (c != line && (*c == ' ' || *c == '\t')) {
99
99
  whitespace_found = 1;
@@ -158,7 +158,7 @@ static size_t find_patch_start(const char *str)
158
158
  const char *s;
159
159
 
160
160
  for (s = str; *s; s = next_line(s)) {
161
- if (git__prefixcmp(s, "---") == 0)
161
+ if (git__prefixcmp(s, "---") == 0 && git__isspace(s[3]))
162
162
  return s - str;
163
163
  }
164
164
 
@@ -233,12 +233,12 @@ static size_t find_trailer_start(const char *buf, size_t len)
233
233
  }
234
234
 
235
235
  find_separator(&separator_pos, bol, TRAILER_SEPARATORS);
236
- if (separator_pos >= 1 && !isspace(bol[0])) {
236
+ if (separator_pos >= 1 && !git__isspace(bol[0])) {
237
237
  trailer_lines++;
238
238
  possible_continuation_lines = 0;
239
239
  if (recognized_prefix)
240
240
  continue;
241
- } else if (isspace(bol[0]))
241
+ } else if (git__isspace(bol[0]))
242
242
  possible_continuation_lines++;
243
243
  else {
244
244
  non_trailer_lines++;
@@ -323,7 +323,7 @@ int git_message_trailers(git_message_trailer_array *trailer_arr, const char *mes
323
323
  goto ret;
324
324
  }
325
325
 
326
- if (isalnum(*ptr) || *ptr == '-') {
326
+ if (git__isalnum(*ptr) || *ptr == '-') {
327
327
  /* legal key character */
328
328
  NEXT(S_KEY);
329
329
  }
@@ -8,7 +8,6 @@
8
8
  #include "transaction.h"
9
9
 
10
10
  #include "repository.h"
11
- #include "strmap.h"
12
11
  #include "refdb.h"
13
12
  #include "pool.h"
14
13
  #include "reflog.h"
@@ -44,17 +43,23 @@ typedef struct {
44
43
  remove :1;
45
44
  } transaction_node;
46
45
 
46
+ GIT_HASHMAP_STR_SETUP(git_transaction_nodemap, transaction_node *);
47
+
47
48
  struct git_transaction {
48
49
  transaction_t type;
49
50
  git_repository *repo;
50
51
  git_refdb *db;
51
52
  git_config *cfg;
53
+ void *cfg_data;
52
54
 
53
- git_strmap *locks;
55
+ git_transaction_nodemap locks;
54
56
  git_pool pool;
55
57
  };
56
58
 
57
- int git_transaction_config_new(git_transaction **out, git_config *cfg)
59
+ int git_transaction_config_new(
60
+ git_transaction **out,
61
+ git_config *cfg,
62
+ void *data)
58
63
  {
59
64
  git_transaction *tx;
60
65
 
@@ -66,6 +71,8 @@ int git_transaction_config_new(git_transaction **out, git_config *cfg)
66
71
 
67
72
  tx->type = TRANSACTION_CONFIG;
68
73
  tx->cfg = cfg;
74
+ tx->cfg_data = data;
75
+
69
76
  *out = tx;
70
77
  return 0;
71
78
  }
@@ -88,11 +95,6 @@ int git_transaction_new(git_transaction **out, git_repository *repo)
88
95
  goto on_error;
89
96
  }
90
97
 
91
- if ((error = git_strmap_new(&tx->locks)) < 0) {
92
- error = -1;
93
- goto on_error;
94
- }
95
-
96
98
  if ((error = git_repository_refdb(&tx->db, repo)) < 0)
97
99
  goto on_error;
98
100
 
@@ -124,7 +126,7 @@ int git_transaction_lock_ref(git_transaction *tx, const char *refname)
124
126
  if ((error = git_refdb_lock(&node->payload, tx->db, refname)) < 0)
125
127
  return error;
126
128
 
127
- if ((error = git_strmap_set(tx->locks, node->name, node)) < 0)
129
+ if ((error = git_transaction_nodemap_put(&tx->locks, node->name, node)) < 0)
128
130
  goto cleanup;
129
131
 
130
132
  return 0;
@@ -138,8 +140,11 @@ cleanup:
138
140
  static int find_locked(transaction_node **out, git_transaction *tx, const char *refname)
139
141
  {
140
142
  transaction_node *node;
143
+ int error;
144
+
145
+ error = git_transaction_nodemap_get(&node, &tx->locks, refname);
141
146
 
142
- if ((node = git_strmap_get(tx->locks, refname)) == NULL) {
147
+ if (error != 0) {
143
148
  git_error_set(GIT_ERROR_REFERENCE, "the specified reference is not locked");
144
149
  return GIT_ENOTFOUND;
145
150
  }
@@ -328,18 +333,20 @@ static int update_target(git_refdb *db, transaction_node *node)
328
333
  int git_transaction_commit(git_transaction *tx)
329
334
  {
330
335
  transaction_node *node;
336
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
331
337
  int error = 0;
332
338
 
333
339
  GIT_ASSERT_ARG(tx);
334
340
 
335
341
  if (tx->type == TRANSACTION_CONFIG) {
336
- error = git_config_unlock(tx->cfg, true);
342
+ error = git_config_unlock(tx->cfg, tx->cfg_data, true);
337
343
  tx->cfg = NULL;
344
+ tx->cfg_data = NULL;
338
345
 
339
346
  return error;
340
347
  }
341
348
 
342
- git_strmap_foreach_value(tx->locks, node, {
349
+ while (git_transaction_nodemap_iterate(&iter, NULL, &node, &tx->locks) == 0) {
343
350
  if (node->reflog) {
344
351
  if ((error = tx->db->backend->reflog_write(tx->db->backend, node->reflog)) < 0)
345
352
  return error;
@@ -355,7 +362,7 @@ int git_transaction_commit(git_transaction *tx)
355
362
  if ((error = update_target(tx->db, node)) < 0)
356
363
  return error;
357
364
  }
358
- });
365
+ }
359
366
 
360
367
  return 0;
361
368
  }
@@ -364,30 +371,29 @@ void git_transaction_free(git_transaction *tx)
364
371
  {
365
372
  transaction_node *node;
366
373
  git_pool pool;
374
+ git_hashmap_iter_t iter = GIT_HASHMAP_ITER_INIT;
367
375
 
368
376
  if (!tx)
369
377
  return;
370
378
 
371
379
  if (tx->type == TRANSACTION_CONFIG) {
372
- if (tx->cfg) {
373
- git_config_unlock(tx->cfg, false);
374
- git_config_free(tx->cfg);
375
- }
380
+ if (tx->cfg)
381
+ git_config_unlock(tx->cfg, tx->cfg_data, false);
376
382
 
377
383
  git__free(tx);
378
384
  return;
379
385
  }
380
386
 
381
387
  /* start by unlocking the ones we've left hanging, if any */
382
- git_strmap_foreach_value(tx->locks, node, {
388
+ while (git_transaction_nodemap_iterate(&iter, NULL, &node, &tx->locks) == 0) {
383
389
  if (node->committed)
384
390
  continue;
385
391
 
386
392
  git_refdb_unlock(tx->db, node->payload, false, false, NULL, NULL, NULL);
387
- });
393
+ }
388
394
 
389
395
  git_refdb_free(tx->db);
390
- git_strmap_free(tx->locks);
396
+ git_transaction_nodemap_dispose(&tx->locks);
391
397
 
392
398
  /* tx is inside the pool, so we need to extract the data */
393
399
  memcpy(&pool, &tx->pool, sizeof(git_pool));
@@ -9,6 +9,9 @@
9
9
 
10
10
  #include "common.h"
11
11
 
12
- int git_transaction_config_new(git_transaction **out, git_config *cfg);
12
+ int git_transaction_config_new(
13
+ git_transaction **out,
14
+ git_config *cfg,
15
+ void *data);
13
16
 
14
17
  #endif