rugged 1.7.2 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +23 -10
  5. data/vendor/libgit2/COPYING +195 -1
  6. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  7. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  8. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  9. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  10. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  11. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  12. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  13. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  14. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  15. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  16. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  17. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  18. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  19. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  20. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  21. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  22. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  23. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  24. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  25. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  26. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  29. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  30. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  31. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  32. data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  34. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  35. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  36. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  37. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  38. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  39. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  40. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  41. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  42. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  43. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  44. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  45. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  46. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  47. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  48. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  49. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  50. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  51. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  52. data/vendor/libgit2/include/git2/apply.h +27 -6
  53. data/vendor/libgit2/include/git2/attr.h +17 -4
  54. data/vendor/libgit2/include/git2/blame.h +133 -28
  55. data/vendor/libgit2/include/git2/blob.h +71 -28
  56. data/vendor/libgit2/include/git2/branch.h +22 -15
  57. data/vendor/libgit2/include/git2/buffer.h +6 -4
  58. data/vendor/libgit2/include/git2/cert.h +2 -1
  59. data/vendor/libgit2/include/git2/checkout.h +83 -32
  60. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  61. data/vendor/libgit2/include/git2/clone.h +25 -9
  62. data/vendor/libgit2/include/git2/commit.h +132 -3
  63. data/vendor/libgit2/include/git2/common.h +120 -63
  64. data/vendor/libgit2/include/git2/config.h +93 -23
  65. data/vendor/libgit2/include/git2/credential.h +30 -2
  66. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  67. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  68. data/vendor/libgit2/include/git2/describe.h +13 -1
  69. data/vendor/libgit2/include/git2/diff.h +38 -8
  70. data/vendor/libgit2/include/git2/email.h +9 -29
  71. data/vendor/libgit2/include/git2/errors.h +46 -73
  72. data/vendor/libgit2/include/git2/filter.h +14 -7
  73. data/vendor/libgit2/include/git2/global.h +8 -1
  74. data/vendor/libgit2/include/git2/graph.h +3 -2
  75. data/vendor/libgit2/include/git2/ignore.h +10 -0
  76. data/vendor/libgit2/include/git2/index.h +99 -14
  77. data/vendor/libgit2/include/git2/indexer.h +21 -4
  78. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  79. data/vendor/libgit2/include/git2/merge.h +46 -1
  80. data/vendor/libgit2/include/git2/message.h +2 -2
  81. data/vendor/libgit2/include/git2/net.h +3 -1
  82. data/vendor/libgit2/include/git2/notes.h +9 -6
  83. data/vendor/libgit2/include/git2/object.h +9 -8
  84. data/vendor/libgit2/include/git2/odb.h +91 -49
  85. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  86. data/vendor/libgit2/include/git2/oid.h +23 -24
  87. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  88. data/vendor/libgit2/include/git2/pack.h +13 -1
  89. data/vendor/libgit2/include/git2/patch.h +2 -3
  90. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  91. data/vendor/libgit2/include/git2/proxy.h +10 -0
  92. data/vendor/libgit2/include/git2/rebase.h +9 -6
  93. data/vendor/libgit2/include/git2/refdb.h +2 -2
  94. data/vendor/libgit2/include/git2/reflog.h +3 -2
  95. data/vendor/libgit2/include/git2/refs.h +9 -6
  96. data/vendor/libgit2/include/git2/refspec.h +14 -4
  97. data/vendor/libgit2/include/git2/remote.h +94 -18
  98. data/vendor/libgit2/include/git2/repository.h +57 -21
  99. data/vendor/libgit2/include/git2/reset.h +16 -3
  100. data/vendor/libgit2/include/git2/revert.h +9 -4
  101. data/vendor/libgit2/include/git2/revparse.h +3 -3
  102. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  103. data/vendor/libgit2/include/git2/signature.h +46 -1
  104. data/vendor/libgit2/include/git2/stash.h +17 -3
  105. data/vendor/libgit2/include/git2/status.h +10 -6
  106. data/vendor/libgit2/include/git2/stdint.h +87 -85
  107. data/vendor/libgit2/include/git2/strarray.h +2 -3
  108. data/vendor/libgit2/include/git2/submodule.h +20 -9
  109. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  110. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  111. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  112. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  113. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  114. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  115. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  116. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  117. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  118. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  119. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  120. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  121. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  122. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  123. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  124. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  125. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  126. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  127. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  128. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  129. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  130. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  131. data/vendor/libgit2/include/git2/sys/transport.h +24 -3
  132. data/vendor/libgit2/include/git2/tag.h +3 -1
  133. data/vendor/libgit2/include/git2/trace.h +9 -3
  134. data/vendor/libgit2/include/git2/transaction.h +3 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -3
  136. data/vendor/libgit2/include/git2/tree.h +16 -5
  137. data/vendor/libgit2/include/git2/types.h +19 -3
  138. data/vendor/libgit2/include/git2/version.h +44 -8
  139. data/vendor/libgit2/include/git2/worktree.h +16 -6
  140. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  142. data/vendor/libgit2/src/cli/cmd.c +1 -1
  143. data/vendor/libgit2/src/cli/cmd.h +4 -0
  144. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  145. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  146. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  147. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  149. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  150. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  151. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  152. data/vendor/libgit2/src/cli/common.c +168 -0
  153. data/vendor/libgit2/src/cli/common.h +63 -0
  154. data/vendor/libgit2/src/cli/error.h +1 -1
  155. data/vendor/libgit2/src/cli/main.c +52 -24
  156. data/vendor/libgit2/src/cli/opt.c +29 -3
  157. data/vendor/libgit2/src/cli/opt.h +21 -3
  158. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  159. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  160. data/vendor/libgit2/src/cli/progress.c +51 -2
  161. data/vendor/libgit2/src/cli/progress.h +12 -0
  162. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  163. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  164. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  165. data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
  166. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  167. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  168. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  169. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  170. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  171. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  172. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  173. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  174. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  175. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  176. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  177. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  178. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  179. data/vendor/libgit2/src/libgit2/clone.c +186 -166
  180. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  181. data/vendor/libgit2/src/libgit2/commit.c +92 -0
  182. data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
  183. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  184. data/vendor/libgit2/src/libgit2/config.c +389 -298
  185. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  186. data/vendor/libgit2/src/libgit2/config.h +9 -4
  187. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  188. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  189. data/vendor/libgit2/src/libgit2/config_file.c +99 -88
  190. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  191. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  192. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  193. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  194. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  195. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  196. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  197. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  198. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  199. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  200. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  201. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  202. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  203. data/vendor/libgit2/src/libgit2/email.c +1 -0
  204. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  205. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  206. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  207. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  208. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  209. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  210. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  211. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  212. data/vendor/libgit2/src/libgit2/index.c +68 -90
  213. data/vendor/libgit2/src/libgit2/index.h +2 -2
  214. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  215. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  216. data/vendor/libgit2/src/libgit2/indexer.c +34 -38
  217. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  218. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  219. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  220. data/vendor/libgit2/src/libgit2/merge.c +42 -37
  221. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  222. data/vendor/libgit2/src/libgit2/midx.c +28 -15
  223. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  224. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  225. data/vendor/libgit2/src/libgit2/object.c +6 -5
  226. data/vendor/libgit2/src/libgit2/odb.c +5 -4
  227. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  228. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  229. data/vendor/libgit2/src/libgit2/oid.c +32 -5
  230. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  231. data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
  232. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  233. data/vendor/libgit2/src/libgit2/pack.c +30 -24
  234. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  235. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  236. data/vendor/libgit2/src/libgit2/path.c +1 -1
  237. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  238. data/vendor/libgit2/src/libgit2/push.c +79 -28
  239. data/vendor/libgit2/src/libgit2/push.h +1 -0
  240. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  241. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  242. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  243. data/vendor/libgit2/src/libgit2/refs.c +26 -7
  244. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  245. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  246. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  247. data/vendor/libgit2/src/libgit2/remote.c +121 -61
  248. data/vendor/libgit2/src/libgit2/repository.c +231 -51
  249. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  250. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  251. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  252. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  253. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  254. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  255. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  256. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  257. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  258. data/vendor/libgit2/src/libgit2/status.c +1 -1
  259. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  260. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  261. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  262. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  263. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  264. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  265. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  266. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  267. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  268. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  269. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  270. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  271. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  272. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  273. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  274. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  275. data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
  276. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  277. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  278. data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
  279. data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
  280. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  281. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
  282. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  283. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  284. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  285. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  286. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  287. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  288. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  289. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  290. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  291. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  292. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  293. data/vendor/libgit2/src/util/alloc.c +4 -1
  294. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  295. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  296. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  297. data/vendor/libgit2/src/util/array.h +18 -17
  298. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  299. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  300. data/vendor/libgit2/src/util/date.c +22 -14
  301. data/vendor/libgit2/src/util/date.h +12 -0
  302. data/vendor/libgit2/src/util/errors.c +401 -0
  303. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  304. data/vendor/libgit2/src/util/fs_path.c +15 -4
  305. data/vendor/libgit2/src/util/fs_path.h +23 -0
  306. data/vendor/libgit2/src/util/futils.c +6 -5
  307. data/vendor/libgit2/src/util/futils.h +13 -4
  308. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  309. data/vendor/libgit2/src/util/git2_util.h +6 -0
  310. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  311. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  312. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  313. data/vendor/libgit2/src/util/hashmap.h +424 -0
  314. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  315. data/vendor/libgit2/src/util/integer.h +3 -1
  316. data/vendor/libgit2/src/util/net.c +13 -7
  317. data/vendor/libgit2/src/util/net.h +2 -0
  318. data/vendor/libgit2/src/util/pool.c +1 -1
  319. data/vendor/libgit2/src/util/pool.h +5 -0
  320. data/vendor/libgit2/src/util/pqueue.h +1 -1
  321. data/vendor/libgit2/src/util/process.h +222 -0
  322. data/vendor/libgit2/src/util/rand.c +1 -7
  323. data/vendor/libgit2/src/util/regexp.c +1 -1
  324. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  325. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  326. data/vendor/libgit2/src/util/str.c +2 -2
  327. data/vendor/libgit2/src/util/strlist.c +108 -0
  328. data/vendor/libgit2/src/util/strlist.h +36 -0
  329. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  330. data/vendor/libgit2/src/util/unix/process.c +629 -0
  331. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  332. data/vendor/libgit2/src/util/util.c +2 -2
  333. data/vendor/libgit2/src/util/util.h +4 -38
  334. data/vendor/libgit2/src/util/vector.c +3 -3
  335. data/vendor/libgit2/src/util/vector.h +2 -2
  336. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  337. data/vendor/libgit2/src/util/win32/process.c +506 -0
  338. metadata +45 -28
  339. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  340. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  341. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  342. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  343. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  344. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  345. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  346. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  347. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  348. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  349. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  350. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  351. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  352. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  353. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  354. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  355. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  356. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  357. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  358. data/vendor/libgit2/src/util/khash.h +0 -615
  359. data/vendor/libgit2/src/util/strmap.c +0 -100
  360. data/vendor/libgit2/src/util/strmap.h +0 -131
  361. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -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
  *
@@ -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