rugged 0.27.7 → 0.27.10

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 (409) 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 +99 -51
  5. data/vendor/libgit2/COPYING +28 -0
  6. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  7. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +29 -0
  8. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +96 -0
  9. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +9 -8
  10. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  11. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  12. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  13. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +11 -6
  14. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  15. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  16. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  17. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  18. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  19. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  20. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  21. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  22. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  23. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  24. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  25. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  26. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  27. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  28. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  29. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  30. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  31. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  32. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1420 -0
  33. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  34. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  35. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  36. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  37. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  38. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  39. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  40. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  41. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  42. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  43. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  44. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  45. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  46. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  47. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  48. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  49. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  50. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  51. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  52. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  53. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  54. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  55. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  56. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  57. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  58. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  59. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  60. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  61. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  62. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  63. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  64. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  65. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  66. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  67. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  68. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  69. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  70. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  71. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  72. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  73. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  74. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  75. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  76. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  77. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  78. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  79. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  80. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  81. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  82. data/vendor/libgit2/include/git2/apply.h +149 -0
  83. data/vendor/libgit2/include/git2/attr.h +20 -13
  84. data/vendor/libgit2/include/git2/blame.h +4 -4
  85. data/vendor/libgit2/include/git2/blob.h +44 -12
  86. data/vendor/libgit2/include/git2/buffer.h +20 -26
  87. data/vendor/libgit2/include/git2/cert.h +135 -0
  88. data/vendor/libgit2/include/git2/checkout.h +53 -21
  89. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  90. data/vendor/libgit2/include/git2/clone.h +5 -5
  91. data/vendor/libgit2/include/git2/commit.h +25 -3
  92. data/vendor/libgit2/include/git2/common.h +35 -10
  93. data/vendor/libgit2/include/git2/config.h +29 -19
  94. data/vendor/libgit2/include/git2/cred.h +308 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +493 -0
  96. data/vendor/libgit2/include/git2/describe.h +4 -4
  97. data/vendor/libgit2/include/git2/diff.h +177 -135
  98. data/vendor/libgit2/include/git2/errors.h +53 -46
  99. data/vendor/libgit2/include/git2/filter.h +8 -0
  100. data/vendor/libgit2/include/git2/index.h +74 -52
  101. data/vendor/libgit2/include/git2/indexer.h +76 -6
  102. data/vendor/libgit2/include/git2/merge.h +25 -10
  103. data/vendor/libgit2/include/git2/net.h +0 -5
  104. data/vendor/libgit2/include/git2/notes.h +1 -1
  105. data/vendor/libgit2/include/git2/object.h +17 -29
  106. data/vendor/libgit2/include/git2/odb.h +12 -11
  107. data/vendor/libgit2/include/git2/odb_backend.h +10 -9
  108. data/vendor/libgit2/include/git2/oid.h +2 -2
  109. data/vendor/libgit2/include/git2/pack.h +14 -3
  110. data/vendor/libgit2/include/git2/proxy.h +5 -3
  111. data/vendor/libgit2/include/git2/rebase.h +46 -2
  112. data/vendor/libgit2/include/git2/refs.h +34 -16
  113. data/vendor/libgit2/include/git2/remote.h +111 -14
  114. data/vendor/libgit2/include/git2/repository.h +69 -34
  115. data/vendor/libgit2/include/git2/revert.h +1 -1
  116. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  117. data/vendor/libgit2/include/git2/signature.h +2 -2
  118. data/vendor/libgit2/include/git2/stash.h +5 -5
  119. data/vendor/libgit2/include/git2/status.h +26 -17
  120. data/vendor/libgit2/include/git2/submodule.h +23 -6
  121. data/vendor/libgit2/include/git2/sys/alloc.h +18 -18
  122. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  123. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  124. data/vendor/libgit2/include/git2/sys/cred.h +90 -0
  125. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  126. data/vendor/libgit2/include/git2/sys/merge.h +3 -3
  127. data/vendor/libgit2/include/git2/sys/odb_backend.h +66 -22
  128. data/vendor/libgit2/include/git2/sys/path.h +14 -5
  129. data/vendor/libgit2/include/git2/sys/refdb_backend.h +76 -40
  130. data/vendor/libgit2/include/git2/sys/repository.h +5 -1
  131. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  132. data/vendor/libgit2/include/git2/sys/transport.h +129 -83
  133. data/vendor/libgit2/include/git2/tag.h +13 -4
  134. data/vendor/libgit2/include/git2/trace.h +2 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -311
  136. data/vendor/libgit2/include/git2/tree.h +4 -4
  137. data/vendor/libgit2/include/git2/types.h +25 -106
  138. data/vendor/libgit2/include/git2/version.h +3 -3
  139. data/vendor/libgit2/include/git2/worktree.h +5 -5
  140. data/vendor/libgit2/include/git2.h +4 -0
  141. data/vendor/libgit2/src/CMakeLists.txt +104 -235
  142. data/vendor/libgit2/src/alloc.c +14 -18
  143. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +7 -8
  144. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  145. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  146. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  147. data/vendor/libgit2/src/annotated_commit.c +18 -11
  148. data/vendor/libgit2/src/apply.c +535 -28
  149. data/vendor/libgit2/src/apply.h +3 -1
  150. data/vendor/libgit2/src/array.h +2 -2
  151. data/vendor/libgit2/src/attr.c +77 -71
  152. data/vendor/libgit2/src/attr_file.c +203 -117
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +49 -51
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +38 -18
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +29 -15
  159. data/vendor/libgit2/src/blob.c +123 -37
  160. data/vendor/libgit2/src/blob.h +19 -2
  161. data/vendor/libgit2/src/branch.c +47 -23
  162. data/vendor/libgit2/src/buf_text.c +7 -6
  163. data/vendor/libgit2/src/buffer.c +60 -53
  164. data/vendor/libgit2/src/cache.c +38 -45
  165. data/vendor/libgit2/src/cache.h +3 -3
  166. data/vendor/libgit2/src/cc-compat.h +20 -3
  167. data/vendor/libgit2/src/checkout.c +77 -67
  168. data/vendor/libgit2/src/cherrypick.c +12 -6
  169. data/vendor/libgit2/src/clone.c +36 -14
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +103 -48
  172. data/vendor/libgit2/src/commit.h +7 -0
  173. data/vendor/libgit2/src/commit_list.c +36 -78
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +24 -90
  176. data/vendor/libgit2/src/config.c +203 -176
  177. data/vendor/libgit2/src/config.h +8 -20
  178. data/vendor/libgit2/src/config_backend.h +96 -0
  179. data/vendor/libgit2/src/config_cache.c +41 -35
  180. data/vendor/libgit2/src/config_entries.c +229 -0
  181. data/vendor/libgit2/src/config_entries.h +24 -0
  182. data/vendor/libgit2/src/config_file.c +422 -680
  183. data/vendor/libgit2/src/config_mem.c +220 -0
  184. data/vendor/libgit2/src/config_parse.c +96 -68
  185. data/vendor/libgit2/src/config_parse.h +15 -14
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +219 -196
  188. data/vendor/libgit2/src/delta.c +25 -18
  189. data/vendor/libgit2/src/describe.c +42 -41
  190. data/vendor/libgit2/src/diff.c +52 -67
  191. data/vendor/libgit2/src/diff.h +2 -1
  192. data/vendor/libgit2/src/diff_driver.c +44 -46
  193. data/vendor/libgit2/src/diff_file.c +16 -14
  194. data/vendor/libgit2/src/diff_file.h +1 -1
  195. data/vendor/libgit2/src/diff_generate.c +158 -103
  196. data/vendor/libgit2/src/diff_generate.h +3 -3
  197. data/vendor/libgit2/src/diff_parse.c +4 -4
  198. data/vendor/libgit2/src/diff_print.c +34 -22
  199. data/vendor/libgit2/src/diff_stats.c +22 -7
  200. data/vendor/libgit2/src/diff_tform.c +18 -16
  201. data/vendor/libgit2/src/diff_xdiff.c +3 -3
  202. data/vendor/libgit2/src/errors.c +51 -39
  203. data/vendor/libgit2/src/errors.h +81 -0
  204. data/vendor/libgit2/src/features.h.in +9 -3
  205. data/vendor/libgit2/src/fetch.c +8 -3
  206. data/vendor/libgit2/src/fetchhead.c +12 -12
  207. data/vendor/libgit2/src/filebuf.c +28 -32
  208. data/vendor/libgit2/src/filebuf.h +2 -2
  209. data/vendor/libgit2/src/filter.c +47 -33
  210. data/vendor/libgit2/src/filter.h +0 -10
  211. data/vendor/libgit2/src/{fileops.c → futils.c} +70 -63
  212. data/vendor/libgit2/src/{fileops.h → futils.h} +6 -6
  213. data/vendor/libgit2/src/global.c +35 -55
  214. data/vendor/libgit2/src/global.h +0 -2
  215. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +48 -0
  216. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +17 -17
  218. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  219. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  220. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -10
  221. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  222. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -7
  223. data/vendor/libgit2/src/hash/sha1/openssl.c +59 -0
  224. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  226. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +47 -37
  227. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  228. data/vendor/libgit2/src/hash/sha1.h +38 -0
  229. data/vendor/libgit2/src/hash.c +61 -0
  230. data/vendor/libgit2/src/hash.h +20 -21
  231. data/vendor/libgit2/src/hashsig.c +5 -5
  232. data/vendor/libgit2/src/idxmap.c +107 -61
  233. data/vendor/libgit2/src/idxmap.h +153 -31
  234. data/vendor/libgit2/src/ignore.c +38 -42
  235. data/vendor/libgit2/src/index.c +264 -199
  236. data/vendor/libgit2/src/index.h +7 -1
  237. data/vendor/libgit2/src/indexer.c +338 -167
  238. data/vendor/libgit2/src/integer.h +71 -26
  239. data/vendor/libgit2/src/iterator.c +134 -62
  240. data/vendor/libgit2/src/iterator.h +15 -0
  241. data/vendor/libgit2/src/mailmap.c +8 -8
  242. data/vendor/libgit2/src/map.h +1 -1
  243. data/vendor/libgit2/src/merge.c +137 -93
  244. data/vendor/libgit2/src/merge_driver.c +11 -11
  245. data/vendor/libgit2/src/merge_file.c +2 -2
  246. data/vendor/libgit2/src/mwindow.c +24 -29
  247. data/vendor/libgit2/src/mwindow.h +4 -4
  248. data/vendor/libgit2/src/net.c +184 -0
  249. data/vendor/libgit2/src/net.h +36 -0
  250. data/vendor/libgit2/src/netops.c +55 -156
  251. data/vendor/libgit2/src/netops.h +3 -23
  252. data/vendor/libgit2/src/notes.c +14 -9
  253. data/vendor/libgit2/src/object.c +120 -69
  254. data/vendor/libgit2/src/object.h +22 -9
  255. data/vendor/libgit2/src/object_api.c +8 -8
  256. data/vendor/libgit2/src/odb.c +111 -88
  257. data/vendor/libgit2/src/odb.h +8 -7
  258. data/vendor/libgit2/src/odb_loose.c +58 -47
  259. data/vendor/libgit2/src/odb_mempack.c +21 -34
  260. data/vendor/libgit2/src/odb_pack.c +17 -13
  261. data/vendor/libgit2/src/offmap.c +53 -35
  262. data/vendor/libgit2/src/offmap.h +108 -21
  263. data/vendor/libgit2/src/oid.c +12 -7
  264. data/vendor/libgit2/src/oidmap.c +49 -47
  265. data/vendor/libgit2/src/oidmap.h +101 -24
  266. data/vendor/libgit2/src/pack-objects.c +87 -86
  267. data/vendor/libgit2/src/pack-objects.h +2 -8
  268. data/vendor/libgit2/src/pack.c +94 -96
  269. data/vendor/libgit2/src/pack.h +16 -18
  270. data/vendor/libgit2/src/parse.c +17 -4
  271. data/vendor/libgit2/src/parse.h +3 -3
  272. data/vendor/libgit2/src/patch.c +3 -3
  273. data/vendor/libgit2/src/patch_generate.c +18 -18
  274. data/vendor/libgit2/src/patch_parse.c +147 -79
  275. data/vendor/libgit2/src/path.c +207 -62
  276. data/vendor/libgit2/src/path.h +14 -0
  277. data/vendor/libgit2/src/pathspec.c +18 -18
  278. data/vendor/libgit2/src/pool.c +26 -22
  279. data/vendor/libgit2/src/pool.h +7 -7
  280. data/vendor/libgit2/src/posix.c +10 -10
  281. data/vendor/libgit2/src/posix.h +12 -1
  282. data/vendor/libgit2/src/proxy.c +8 -3
  283. data/vendor/libgit2/src/push.c +35 -29
  284. data/vendor/libgit2/src/push.h +2 -1
  285. data/vendor/libgit2/src/reader.c +265 -0
  286. data/vendor/libgit2/src/reader.h +107 -0
  287. data/vendor/libgit2/src/rebase.c +97 -38
  288. data/vendor/libgit2/src/refdb.c +15 -3
  289. data/vendor/libgit2/src/refdb_fs.c +318 -222
  290. data/vendor/libgit2/src/reflog.c +13 -15
  291. data/vendor/libgit2/src/refs.c +122 -89
  292. data/vendor/libgit2/src/refs.h +5 -3
  293. data/vendor/libgit2/src/refspec.c +27 -33
  294. data/vendor/libgit2/src/regexp.c +221 -0
  295. data/vendor/libgit2/src/regexp.h +97 -0
  296. data/vendor/libgit2/src/remote.c +229 -178
  297. data/vendor/libgit2/src/remote.h +11 -2
  298. data/vendor/libgit2/src/repository.c +227 -172
  299. data/vendor/libgit2/src/repository.h +52 -40
  300. data/vendor/libgit2/src/reset.c +7 -7
  301. data/vendor/libgit2/src/revert.c +11 -6
  302. data/vendor/libgit2/src/revparse.c +46 -46
  303. data/vendor/libgit2/src/revwalk.c +89 -54
  304. data/vendor/libgit2/src/revwalk.h +20 -0
  305. data/vendor/libgit2/src/settings.c +22 -9
  306. data/vendor/libgit2/src/signature.c +15 -13
  307. data/vendor/libgit2/src/sortedcache.c +22 -36
  308. data/vendor/libgit2/src/sortedcache.h +1 -1
  309. data/vendor/libgit2/src/stash.c +56 -76
  310. data/vendor/libgit2/src/status.c +27 -21
  311. data/vendor/libgit2/src/stream.h +17 -2
  312. data/vendor/libgit2/src/streams/mbedtls.c +100 -80
  313. data/vendor/libgit2/src/streams/mbedtls.h +5 -2
  314. data/vendor/libgit2/src/streams/openssl.c +93 -81
  315. data/vendor/libgit2/src/streams/openssl.h +5 -2
  316. data/vendor/libgit2/src/streams/registry.c +118 -0
  317. data/vendor/libgit2/src/streams/registry.h +19 -0
  318. data/vendor/libgit2/src/streams/socket.c +55 -30
  319. data/vendor/libgit2/src/streams/stransport.c +57 -32
  320. data/vendor/libgit2/src/streams/stransport.h +5 -0
  321. data/vendor/libgit2/src/streams/tls.c +48 -20
  322. data/vendor/libgit2/src/streams/tls.h +12 -4
  323. data/vendor/libgit2/src/strmap.c +47 -74
  324. data/vendor/libgit2/src/strmap.h +108 -33
  325. data/vendor/libgit2/src/submodule.c +190 -169
  326. data/vendor/libgit2/src/submodule.h +1 -1
  327. data/vendor/libgit2/src/sysdir.c +25 -15
  328. data/vendor/libgit2/src/tag.c +39 -26
  329. data/vendor/libgit2/src/tag.h +2 -1
  330. data/vendor/libgit2/src/trace.c +2 -2
  331. data/vendor/libgit2/src/trace.h +2 -2
  332. data/vendor/libgit2/src/trailer.c +46 -32
  333. data/vendor/libgit2/src/transaction.c +30 -29
  334. data/vendor/libgit2/src/transport.c +3 -3
  335. data/vendor/libgit2/src/transports/auth.c +14 -10
  336. data/vendor/libgit2/src/transports/auth.h +10 -3
  337. data/vendor/libgit2/src/transports/auth_negotiate.c +31 -16
  338. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  339. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  340. data/vendor/libgit2/src/transports/auth_ntlm.h +35 -0
  341. data/vendor/libgit2/src/transports/cred.c +24 -24
  342. data/vendor/libgit2/src/transports/git.c +25 -30
  343. data/vendor/libgit2/src/transports/http.c +871 -335
  344. data/vendor/libgit2/src/transports/http.h +2 -0
  345. data/vendor/libgit2/src/transports/local.c +28 -28
  346. data/vendor/libgit2/src/transports/smart.c +64 -46
  347. data/vendor/libgit2/src/transports/smart.h +5 -6
  348. data/vendor/libgit2/src/transports/smart_pkt.c +162 -151
  349. data/vendor/libgit2/src/transports/smart_protocol.c +64 -94
  350. data/vendor/libgit2/src/transports/ssh.c +76 -65
  351. data/vendor/libgit2/src/transports/winhttp.c +328 -319
  352. data/vendor/libgit2/src/tree-cache.c +21 -14
  353. data/vendor/libgit2/src/tree.c +119 -112
  354. data/vendor/libgit2/src/tree.h +1 -0
  355. data/vendor/libgit2/src/unix/map.c +3 -3
  356. data/vendor/libgit2/src/unix/posix.h +1 -11
  357. data/vendor/libgit2/src/userdiff.h +3 -1
  358. data/vendor/libgit2/src/util.c +154 -93
  359. data/vendor/libgit2/src/util.h +19 -23
  360. data/vendor/libgit2/src/vector.c +15 -10
  361. data/vendor/libgit2/src/wildmatch.c +320 -0
  362. data/vendor/libgit2/src/wildmatch.h +23 -0
  363. data/vendor/libgit2/src/win32/dir.c +3 -3
  364. data/vendor/libgit2/src/win32/findfile.c +1 -1
  365. data/vendor/libgit2/src/win32/map.c +9 -11
  366. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  367. data/vendor/libgit2/src/win32/path_w32.c +113 -9
  368. data/vendor/libgit2/src/win32/path_w32.h +18 -29
  369. data/vendor/libgit2/src/win32/posix.h +1 -4
  370. data/vendor/libgit2/src/win32/posix_w32.c +69 -44
  371. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  372. data/vendor/libgit2/src/win32/thread.c +5 -10
  373. data/vendor/libgit2/src/win32/w32_buffer.c +9 -5
  374. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  375. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -95
  376. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  377. data/vendor/libgit2/src/win32/w32_stack.c +6 -11
  378. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  379. data/vendor/libgit2/src/win32/w32_util.c +27 -64
  380. data/vendor/libgit2/src/win32/w32_util.h +5 -49
  381. data/vendor/libgit2/src/worktree.c +44 -30
  382. data/vendor/libgit2/src/xdiff/xdiffi.c +5 -5
  383. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  384. data/vendor/libgit2/src/xdiff/xmerge.c +27 -15
  385. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  386. data/vendor/libgit2/src/zstream.c +4 -4
  387. metadata +115 -38
  388. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  389. data/vendor/libgit2/deps/regex/config.h +0 -7
  390. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  391. data/vendor/libgit2/deps/regex/regex.c +0 -92
  392. data/vendor/libgit2/deps/regex/regex.h +0 -582
  393. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  394. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  395. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  396. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  397. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  398. data/vendor/libgit2/libgit2.pc.in +0 -13
  399. data/vendor/libgit2/src/config_file.h +0 -73
  400. data/vendor/libgit2/src/fnmatch.c +0 -248
  401. data/vendor/libgit2/src/fnmatch.h +0 -48
  402. data/vendor/libgit2/src/hash/hash_collisiondetect.h +0 -47
  403. data/vendor/libgit2/src/hash/hash_openssl.h +0 -59
  404. data/vendor/libgit2/src/streams/curl.c +0 -385
  405. data/vendor/libgit2/src/streams/curl.h +0 -17
  406. /data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  407. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  408. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  409. /data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
@@ -9,6 +9,7 @@
9
9
 
10
10
  #include "posix.h"
11
11
  #include "netops.h"
12
+ #include "registry.h"
12
13
  #include "stream.h"
13
14
 
14
15
  #ifndef _WIN32
@@ -34,16 +35,16 @@ static void net_set_error(const char *str)
34
35
  char * win32_error = git_win32_get_error_message(error);
35
36
 
36
37
  if (win32_error) {
37
- giterr_set(GITERR_NET, "%s: %s", str, win32_error);
38
+ git_error_set(GIT_ERROR_NET, "%s: %s", str, win32_error);
38
39
  git__free(win32_error);
39
40
  } else {
40
- giterr_set(GITERR_NET, str);
41
+ git_error_set(GIT_ERROR_NET, "%s", str);
41
42
  }
42
43
  }
43
44
  #else
44
45
  static void net_set_error(const char *str)
45
46
  {
46
- giterr_set(GITERR_NET, "%s: %s", str, strerror(errno));
47
+ git_error_set(GIT_ERROR_NET, "%s: %s", str, strerror(errno));
47
48
  }
48
49
  #endif
49
50
 
@@ -57,7 +58,7 @@ static int close_socket(GIT_SOCKET s)
57
58
  return -1;
58
59
 
59
60
  if (0 != WSACleanup()) {
60
- giterr_set(GITERR_OS, "winsock cleanup failed");
61
+ git_error_set(GIT_ERROR_OS, "winsock cleanup failed");
61
62
  return -1;
62
63
  }
63
64
 
@@ -68,7 +69,7 @@ static int close_socket(GIT_SOCKET s)
68
69
 
69
70
  }
70
71
 
71
- int socket_connect(git_stream *stream)
72
+ static int socket_connect(git_stream *stream)
72
73
  {
73
74
  struct addrinfo *info = NULL, *p;
74
75
  struct addrinfo hints;
@@ -82,13 +83,13 @@ int socket_connect(git_stream *stream)
82
83
  WSADATA wsd;
83
84
 
84
85
  if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
85
- giterr_set(GITERR_OS, "winsock init failed");
86
+ git_error_set(GIT_ERROR_OS, "winsock init failed");
86
87
  return -1;
87
88
  }
88
89
 
89
90
  if (LOBYTE(wsd.wVersion) != 2 || HIBYTE(wsd.wVersion) != 2) {
90
91
  WSACleanup();
91
- giterr_set(GITERR_OS, "winsock init failed");
92
+ git_error_set(GIT_ERROR_OS, "winsock init failed");
92
93
  return -1;
93
94
  }
94
95
  #endif
@@ -98,7 +99,7 @@ int socket_connect(git_stream *stream)
98
99
  hints.ai_family = AF_UNSPEC;
99
100
 
100
101
  if ((ret = p_getaddrinfo(st->host, st->port, &hints, &info)) != 0) {
101
- giterr_set(GITERR_NET,
102
+ git_error_set(GIT_ERROR_NET,
102
103
  "failed to resolve address for %s: %s", st->host, p_gai_strerror(ret));
103
104
  return -1;
104
105
  }
@@ -119,7 +120,7 @@ int socket_connect(git_stream *stream)
119
120
 
120
121
  /* Oops, we couldn't connect to any address */
121
122
  if (s == INVALID_SOCKET && p == NULL) {
122
- giterr_set(GITERR_OS, "failed to connect to %s", st->host);
123
+ git_error_set(GIT_ERROR_OS, "failed to connect to %s", st->host);
123
124
  p_freeaddrinfo(info);
124
125
  return -1;
125
126
  }
@@ -129,38 +130,33 @@ int socket_connect(git_stream *stream)
129
130
  return 0;
130
131
  }
131
132
 
132
- ssize_t socket_write(git_stream *stream, const char *data, size_t len, int flags)
133
+ static ssize_t socket_write(git_stream *stream, const char *data, size_t len, int flags)
133
134
  {
134
- ssize_t ret;
135
- size_t off = 0;
136
135
  git_socket_stream *st = (git_socket_stream *) stream;
136
+ ssize_t written;
137
137
 
138
- while (off < len) {
139
- errno = 0;
140
- ret = p_send(st->s, data + off, len - off, flags);
141
- if (ret < 0) {
142
- net_set_error("Error sending data");
143
- return -1;
144
- }
138
+ errno = 0;
145
139
 
146
- off += ret;
140
+ if ((written = p_send(st->s, data, len, flags)) < 0) {
141
+ net_set_error("error sending data");
142
+ return -1;
147
143
  }
148
144
 
149
- return off;
145
+ return written;
150
146
  }
151
147
 
152
- ssize_t socket_read(git_stream *stream, void *data, size_t len)
148
+ static ssize_t socket_read(git_stream *stream, void *data, size_t len)
153
149
  {
154
150
  ssize_t ret;
155
151
  git_socket_stream *st = (git_socket_stream *) stream;
156
152
 
157
153
  if ((ret = p_recv(st->s, data, len, 0)) < 0)
158
- net_set_error("Error receiving socket data");
154
+ net_set_error("error receiving socket data");
159
155
 
160
156
  return ret;
161
157
  }
162
158
 
163
- int socket_close(git_stream *stream)
159
+ static int socket_close(git_stream *stream)
164
160
  {
165
161
  git_socket_stream *st = (git_socket_stream *) stream;
166
162
  int error;
@@ -171,7 +167,7 @@ int socket_close(git_stream *stream)
171
167
  return error;
172
168
  }
173
169
 
174
- void socket_free(git_stream *stream)
170
+ static void socket_free(git_stream *stream)
175
171
  {
176
172
  git_socket_stream *st = (git_socket_stream *) stream;
177
173
 
@@ -180,21 +176,24 @@ void socket_free(git_stream *stream)
180
176
  git__free(st);
181
177
  }
182
178
 
183
- int git_socket_stream_new(git_stream **out, const char *host, const char *port)
179
+ static int default_socket_stream_new(
180
+ git_stream **out,
181
+ const char *host,
182
+ const char *port)
184
183
  {
185
184
  git_socket_stream *st;
186
185
 
187
- assert(out && host);
186
+ assert(out && host && port);
188
187
 
189
188
  st = git__calloc(1, sizeof(git_socket_stream));
190
- GITERR_CHECK_ALLOC(st);
189
+ GIT_ERROR_CHECK_ALLOC(st);
191
190
 
192
191
  st->host = git__strdup(host);
193
- GITERR_CHECK_ALLOC(st->host);
192
+ GIT_ERROR_CHECK_ALLOC(st->host);
194
193
 
195
194
  if (port) {
196
195
  st->port = git__strdup(port);
197
- GITERR_CHECK_ALLOC(st->port);
196
+ GIT_ERROR_CHECK_ALLOC(st->port);
198
197
  }
199
198
 
200
199
  st->parent.version = GIT_STREAM_VERSION;
@@ -208,3 +207,29 @@ int git_socket_stream_new(git_stream **out, const char *host, const char *port)
208
207
  *out = (git_stream *) st;
209
208
  return 0;
210
209
  }
210
+
211
+ int git_socket_stream_new(
212
+ git_stream **out,
213
+ const char *host,
214
+ const char *port)
215
+ {
216
+ int (*init)(git_stream **, const char *, const char *) = NULL;
217
+ git_stream_registration custom = {0};
218
+ int error;
219
+
220
+ assert(out && host && port);
221
+
222
+ if ((error = git_stream_registry_lookup(&custom, GIT_STREAM_STANDARD)) == 0)
223
+ init = custom.init;
224
+ else if (error == GIT_ENOTFOUND)
225
+ init = default_socket_stream_new;
226
+ else
227
+ return error;
228
+
229
+ if (!init) {
230
+ git_error_set(GIT_ERROR_NET, "there is no socket stream available");
231
+ return -1;
232
+ }
233
+
234
+ return init(out, host, port);
235
+ }
@@ -16,26 +16,25 @@
16
16
  #include "git2/transport.h"
17
17
 
18
18
  #include "streams/socket.h"
19
- #include "streams/curl.h"
20
19
 
21
20
  static int stransport_error(OSStatus ret)
22
21
  {
23
22
  CFStringRef message;
24
23
 
25
24
  if (ret == noErr || ret == errSSLClosedGraceful) {
26
- giterr_clear();
25
+ git_error_clear();
27
26
  return 0;
28
27
  }
29
28
 
30
29
  #if !TARGET_OS_IPHONE
31
30
  message = SecCopyErrorMessageString(ret, NULL);
32
- GITERR_CHECK_ALLOC(message);
31
+ GIT_ERROR_CHECK_ALLOC(message);
33
32
 
34
- giterr_set(GITERR_NET, "SecureTransport error: %s", CFStringGetCStringPtr(message, kCFStringEncodingUTF8));
33
+ git_error_set(GIT_ERROR_NET, "SecureTransport error: %s", CFStringGetCStringPtr(message, kCFStringEncodingUTF8));
35
34
  CFRelease(message);
36
35
  #else
37
- giterr_set(GITERR_NET, "SecureTransport error: OSStatus %d", (unsigned int)ret);
38
- GIT_UNUSED(message);
36
+ git_error_set(GIT_ERROR_NET, "SecureTransport error: OSStatus %d", (unsigned int)ret);
37
+ GIT_UNUSED(message);
39
38
  #endif
40
39
 
41
40
  return -1;
@@ -44,6 +43,7 @@ static int stransport_error(OSStatus ret)
44
43
  typedef struct {
45
44
  git_stream parent;
46
45
  git_stream *io;
46
+ int owned;
47
47
  SSLContextRef ctx;
48
48
  CFDataRef der_data;
49
49
  git_cert_x509 cert_info;
@@ -57,12 +57,12 @@ static int stransport_connect(git_stream *stream)
57
57
  SecTrustResultType sec_res;
58
58
  OSStatus ret;
59
59
 
60
- if ((error = git_stream_connect(st->io)) < 0)
60
+ if (st->owned && (error = git_stream_connect(st->io)) < 0)
61
61
  return error;
62
62
 
63
63
  ret = SSLHandshake(st->ctx);
64
64
  if (ret != errSSLServerAuthCompleted) {
65
- giterr_set(GITERR_SSL, "unexpected return value from ssl handshake %d", ret);
65
+ git_error_set(GIT_ERROR_SSL, "unexpected return value from ssl handshake %d", (int)ret);
66
66
  return -1;
67
67
  }
68
68
 
@@ -78,13 +78,13 @@ static int stransport_connect(git_stream *stream)
78
78
  CFRelease(trust);
79
79
 
80
80
  if (sec_res == kSecTrustResultInvalid || sec_res == kSecTrustResultOtherError) {
81
- giterr_set(GITERR_SSL, "internal security trust error");
81
+ git_error_set(GIT_ERROR_SSL, "internal security trust error");
82
82
  return -1;
83
83
  }
84
84
 
85
85
  if (sec_res == kSecTrustResultDeny || sec_res == kSecTrustResultRecoverableTrustFailure ||
86
86
  sec_res == kSecTrustResultFatalTrustFailure) {
87
- giterr_set(GITERR_SSL, "untrusted connection error");
87
+ git_error_set(GIT_ERROR_SSL, "untrusted connection error");
88
88
  return GIT_ECERTIFICATE;
89
89
  }
90
90
 
@@ -112,7 +112,7 @@ static int stransport_certificate(git_cert **out, git_stream *stream)
112
112
  CFRelease(trust);
113
113
 
114
114
  if (st->der_data == NULL) {
115
- giterr_set(GITERR_SSL, "retrieved invalid certificate data");
115
+ git_error_set(GIT_ERROR_SSL, "retrieved invalid certificate data");
116
116
  return -1;
117
117
  }
118
118
 
@@ -149,9 +149,8 @@ static OSStatus write_cb(SSLConnectionRef conn, const void *data, size_t *len)
149
149
  {
150
150
  git_stream *io = (git_stream *) conn;
151
151
 
152
- if (git_stream_write(io, data, *len, 0) < 0) {
152
+ if (git_stream__write_full(io, data, *len, 0) < 0)
153
153
  return -36; /* "ioErr" from MacErrors.h which is not available on iOS */
154
- }
155
154
 
156
155
  return noErr;
157
156
  }
@@ -164,11 +163,12 @@ static ssize_t stransport_write(git_stream *stream, const char *data, size_t len
164
163
 
165
164
  GIT_UNUSED(flags);
166
165
 
167
- data_len = len;
166
+ data_len = min(len, SSIZE_MAX);
168
167
  if ((ret = SSLWrite(st->ctx, data, data_len, &processed)) != noErr)
169
168
  return stransport_error(ret);
170
169
 
171
- return processed;
170
+ assert(processed < SSIZE_MAX);
171
+ return (ssize_t)processed;
172
172
  }
173
173
 
174
174
  /*
@@ -226,45 +226,42 @@ static int stransport_close(git_stream *stream)
226
226
  if (ret != noErr && ret != errSSLClosedGraceful)
227
227
  return stransport_error(ret);
228
228
 
229
- return git_stream_close(st->io);
229
+ return st->owned ? git_stream_close(st->io) : 0;
230
230
  }
231
231
 
232
232
  static void stransport_free(git_stream *stream)
233
233
  {
234
234
  stransport_stream *st = (stransport_stream *) stream;
235
235
 
236
- git_stream_free(st->io);
236
+ if (st->owned)
237
+ git_stream_free(st->io);
238
+
237
239
  CFRelease(st->ctx);
238
240
  if (st->der_data)
239
241
  CFRelease(st->der_data);
240
242
  git__free(st);
241
243
  }
242
244
 
243
- int git_stransport_stream_new(git_stream **out, const char *host, const char *port)
245
+ static int stransport_wrap(
246
+ git_stream **out,
247
+ git_stream *in,
248
+ const char *host,
249
+ int owned)
244
250
  {
245
251
  stransport_stream *st;
246
- int error;
247
252
  OSStatus ret;
248
253
 
249
- assert(out && host);
254
+ assert(out && in && host);
250
255
 
251
256
  st = git__calloc(1, sizeof(stransport_stream));
252
- GITERR_CHECK_ALLOC(st);
253
-
254
- #ifdef GIT_CURL
255
- error = git_curl_stream_new(&st->io, host, port);
256
- #else
257
- error = git_socket_stream_new(&st->io, host, port);
258
- #endif
257
+ GIT_ERROR_CHECK_ALLOC(st);
259
258
 
260
- if (error < 0){
261
- git__free(st);
262
- return error;
263
- }
259
+ st->io = in;
260
+ st->owned = owned;
264
261
 
265
262
  st->ctx = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType);
266
263
  if (!st->ctx) {
267
- giterr_set(GITERR_NET, "failed to create SSL context");
264
+ git_error_set(GIT_ERROR_NET, "failed to create SSL context");
268
265
  git__free(st);
269
266
  return -1;
270
267
  }
@@ -295,4 +292,32 @@ int git_stransport_stream_new(git_stream **out, const char *host, const char *po
295
292
  return 0;
296
293
  }
297
294
 
295
+ int git_stransport_stream_wrap(
296
+ git_stream **out,
297
+ git_stream *in,
298
+ const char *host)
299
+ {
300
+ return stransport_wrap(out, in, host, 0);
301
+ }
302
+
303
+ int git_stransport_stream_new(git_stream **out, const char *host, const char *port)
304
+ {
305
+ git_stream *stream = NULL;
306
+ int error;
307
+
308
+ assert(out && host);
309
+
310
+ error = git_socket_stream_new(&stream, host, port);
311
+
312
+ if (!error)
313
+ error = stransport_wrap(out, stream, host, 1);
314
+
315
+ if (error < 0 && stream) {
316
+ git_stream_close(stream);
317
+ git_stream_free(stream);
318
+ }
319
+
320
+ return error;
321
+ }
322
+
298
323
  #endif
@@ -11,6 +11,11 @@
11
11
 
12
12
  #include "git2/sys/stream.h"
13
13
 
14
+ #ifdef GIT_SECURE_TRANSPORT
15
+
14
16
  extern int git_stransport_stream_new(git_stream **out, const char *host, const char *port);
17
+ extern int git_stransport_stream_wrap(git_stream **out, git_stream *in, const char *host);
18
+
19
+ #endif
15
20
 
16
21
  #endif
@@ -5,41 +5,69 @@
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
7
 
8
- #include "streams/tls.h"
9
-
10
8
  #include "git2/errors.h"
11
9
 
10
+ #include "common.h"
11
+ #include "global.h"
12
+ #include "streams/registry.h"
13
+ #include "streams/tls.h"
12
14
  #include "streams/mbedtls.h"
13
15
  #include "streams/openssl.h"
14
16
  #include "streams/stransport.h"
15
17
 
16
- static git_stream_cb tls_ctor;
17
-
18
- int git_stream_register_tls(git_stream_cb ctor)
18
+ int git_tls_stream_new(git_stream **out, const char *host, const char *port)
19
19
  {
20
- tls_ctor = ctor;
20
+ int (*init)(git_stream **, const char *, const char *) = NULL;
21
+ git_stream_registration custom = {0};
22
+ int error;
23
+
24
+ assert(out && host && port);
21
25
 
22
- return 0;
26
+ if ((error = git_stream_registry_lookup(&custom, GIT_STREAM_TLS)) == 0) {
27
+ init = custom.init;
28
+ } else if (error == GIT_ENOTFOUND) {
29
+ #ifdef GIT_SECURE_TRANSPORT
30
+ init = git_stransport_stream_new;
31
+ #elif defined(GIT_OPENSSL)
32
+ init = git_openssl_stream_new;
33
+ #elif defined(GIT_MBEDTLS)
34
+ init = git_mbedtls_stream_new;
35
+ #endif
36
+ } else {
37
+ return error;
38
+ }
39
+
40
+ if (!init) {
41
+ git_error_set(GIT_ERROR_SSL, "there is no TLS stream available");
42
+ return -1;
43
+ }
44
+
45
+ return init(out, host, port);
23
46
  }
24
47
 
25
- int git_tls_stream_new(git_stream **out, const char *host, const char *port)
48
+ int git_tls_stream_wrap(git_stream **out, git_stream *in, const char *host)
26
49
  {
50
+ int (*wrap)(git_stream **, git_stream *, const char *) = NULL;
51
+ git_stream_registration custom = {0};
27
52
 
28
- if (tls_ctor)
29
- return tls_ctor(out, host, port);
53
+ assert(out && in);
30
54
 
55
+ if (git_stream_registry_lookup(&custom, GIT_STREAM_TLS) == 0) {
56
+ wrap = custom.wrap;
57
+ } else {
31
58
  #ifdef GIT_SECURE_TRANSPORT
32
- return git_stransport_stream_new(out, host, port);
59
+ wrap = git_stransport_stream_wrap;
33
60
  #elif defined(GIT_OPENSSL)
34
- return git_openssl_stream_new(out, host, port);
61
+ wrap = git_openssl_stream_wrap;
35
62
  #elif defined(GIT_MBEDTLS)
36
- return git_mbedtls_stream_new(out, host, port);
37
- #else
38
- GIT_UNUSED(out);
39
- GIT_UNUSED(host);
40
- GIT_UNUSED(port);
41
-
42
- giterr_set(GITERR_SSL, "there is no TLS stream available");
43
- return -1;
63
+ wrap = git_mbedtls_stream_wrap;
44
64
  #endif
65
+ }
66
+
67
+ if (!wrap) {
68
+ git_error_set(GIT_ERROR_SSL, "there is no TLS stream available");
69
+ return -1;
70
+ }
71
+
72
+ return wrap(out, in, host);
45
73
  }
@@ -13,11 +13,19 @@
13
13
 
14
14
  /**
15
15
  * Create a TLS stream with the most appropriate backend available for
16
- * the current platform.
17
- *
18
- * This allows us to ask for a SecureTransport or OpenSSL stream
19
- * according to being on general Unix vs OS X.
16
+ * the current platform, whether that's SecureTransport on macOS,
17
+ * OpenSSL or mbedTLS on other Unixes, or something else entirely.
20
18
  */
21
19
  extern int git_tls_stream_new(git_stream **out, const char *host, const char *port);
22
20
 
21
+ /**
22
+ * Create a TLS stream on top of an existing insecure stream, using
23
+ * the most appropriate backend available for the current platform.
24
+ *
25
+ * This allows us to create a CONNECT stream on top of a proxy;
26
+ * using SecureTransport on macOS, OpenSSL or mbedTLS on other
27
+ * Unixes, or something else entirely.
28
+ */
29
+ extern int git_tls_stream_wrap(git_stream **out, git_stream *in, const char *host);
30
+
23
31
  #endif
@@ -7,14 +7,21 @@
7
7
 
8
8
  #include "strmap.h"
9
9
 
10
+ #define kmalloc git__malloc
11
+ #define kcalloc git__calloc
12
+ #define krealloc git__realloc
13
+ #define kreallocarray git__reallocarray
14
+ #define kfree git__free
15
+ #include "khash.h"
16
+
17
+ __KHASH_TYPE(str, const char *, void *)
18
+
10
19
  __KHASH_IMPL(str, static kh_inline, const char *, void *, 1, kh_str_hash_func, kh_str_hash_equal)
11
20
 
12
- int git_strmap_alloc(git_strmap **map)
21
+ int git_strmap_new(git_strmap **out)
13
22
  {
14
- if ((*map = kh_init(str)) == NULL) {
15
- giterr_set_oom();
16
- return -1;
17
- }
23
+ *out = kh_init(str);
24
+ GIT_ERROR_CHECK_ALLOC(*out);
18
25
 
19
26
  return 0;
20
27
  }
@@ -29,99 +36,65 @@ void git_strmap_clear(git_strmap *map)
29
36
  kh_clear(str, map);
30
37
  }
31
38
 
32
- size_t git_strmap_num_entries(git_strmap *map)
39
+ size_t git_strmap_size(git_strmap *map)
33
40
  {
34
41
  return kh_size(map);
35
42
  }
36
43
 
37
- size_t git_strmap_lookup_index(git_strmap *map, const char *key)
38
- {
39
- return kh_get(str, map, key);
40
- }
41
-
42
- int git_strmap_valid_index(git_strmap *map, size_t idx)
43
- {
44
- return idx != kh_end(map);
45
- }
46
-
47
- int git_strmap_exists(git_strmap *map, const char *key)
44
+ void *git_strmap_get(git_strmap *map, const char *key)
48
45
  {
49
- return kh_get(str, map, key) != kh_end(map);
46
+ size_t idx = kh_get(str, map, key);
47
+ if (idx == kh_end(map) || !kh_exist(map, idx))
48
+ return NULL;
49
+ return kh_val(map, idx);
50
50
  }
51
51
 
52
- int git_strmap_has_data(git_strmap *map, size_t idx)
52
+ int git_strmap_set(git_strmap *map, const char *key, void *value)
53
53
  {
54
- return kh_exist(map, idx);
55
- }
54
+ size_t idx;
55
+ int rval;
56
56
 
57
- const char *git_strmap_key(git_strmap *map, size_t idx)
58
- {
59
- return kh_key(map, idx);
60
- }
57
+ idx = kh_put(str, map, key, &rval);
58
+ if (rval < 0)
59
+ return -1;
61
60
 
62
- void git_strmap_set_key_at(git_strmap *map, size_t idx, char *key)
63
- {
64
- kh_val(map, idx) = key;
65
- }
61
+ if (rval == 0)
62
+ kh_key(map, idx) = key;
66
63
 
67
- void *git_strmap_value_at(git_strmap *map, size_t idx)
68
- {
69
- return kh_val(map, idx);
70
- }
71
-
72
- void git_strmap_set_value_at(git_strmap *map, size_t idx, void *value)
73
- {
74
64
  kh_val(map, idx) = value;
75
- }
76
-
77
- void git_strmap_delete_at(git_strmap *map, size_t idx)
78
- {
79
- kh_del(str, map, idx);
80
- }
81
65
 
82
- int git_strmap_put(git_strmap *map, const char *key, int *err)
83
- {
84
- return kh_put(str, map, key, err);
66
+ return 0;
85
67
  }
86
68
 
87
- void git_strmap_insert(git_strmap *map, const char *key, void *value, int *rval)
69
+ int git_strmap_delete(git_strmap *map, const char *key)
88
70
  {
89
- khiter_t idx = kh_put(str, map, key, rval);
90
-
91
- if ((*rval) >= 0) {
92
- if ((*rval) == 0)
93
- kh_key(map, idx) = key;
94
- kh_val(map, idx) = value;
95
- }
71
+ khiter_t idx = kh_get(str, map, key);
72
+ if (idx == kh_end(map))
73
+ return GIT_ENOTFOUND;
74
+ kh_del(str, map, idx);
75
+ return 0;
96
76
  }
97
77
 
98
- void git_strmap_delete(git_strmap *map, const char *key)
78
+ int git_strmap_exists(git_strmap *map, const char *key)
99
79
  {
100
- khiter_t idx = git_strmap_lookup_index(map, key);
101
- if (git_strmap_valid_index(map, idx))
102
- git_strmap_delete_at(map, idx);
80
+ return kh_get(str, map, key) != kh_end(map);
103
81
  }
104
82
 
105
- int git_strmap_next(
106
- void **data,
107
- git_strmap_iter* iter,
108
- git_strmap *map)
83
+ int git_strmap_iterate(void **value, git_strmap *map, size_t *iter, const char **key)
109
84
  {
110
- if (!map)
111
- return GIT_ERROR;
85
+ size_t i = *iter;
112
86
 
113
- while (*iter != git_strmap_end(map)) {
114
- if (!(git_strmap_has_data(map, *iter))) {
115
- ++(*iter);
116
- continue;
117
- }
87
+ while (i < map->n_buckets && !kh_exist(map, i))
88
+ i++;
118
89
 
119
- *data = git_strmap_value_at(map, *iter);
90
+ if (i >= map->n_buckets)
91
+ return GIT_ITEROVER;
120
92
 
121
- ++(*iter);
93
+ if (key)
94
+ *key = kh_key(map, i);
95
+ if (value)
96
+ *value = kh_val(map, i);
97
+ *iter = ++i;
122
98
 
123
- return GIT_OK;
124
- }
125
-
126
- return GIT_ITEROVER;
99
+ return 0;
127
100
  }