rugged 1.0.0 → 1.2.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 (338) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +3 -3
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_commit.c +1 -1
  6. data/ext/rugged/rugged_config.c +1 -1
  7. data/ext/rugged/rugged_object.c +1 -1
  8. data/ext/rugged/rugged_remote.c +32 -2
  9. data/ext/rugged/rugged_repo.c +13 -3
  10. data/lib/rugged/commit.rb +17 -4
  11. data/lib/rugged/repository.rb +7 -8
  12. data/lib/rugged/submodule_collection.rb +4 -4
  13. data/lib/rugged/version.rb +1 -1
  14. data/vendor/libgit2/CMakeLists.txt +41 -74
  15. data/vendor/libgit2/COPYING +109 -1
  16. data/vendor/libgit2/cmake/{Modules/AddCFlagIfSupported.cmake → AddCFlagIfSupported.cmake} +0 -0
  17. data/vendor/libgit2/cmake/{Modules/EnableWarnings.cmake → EnableWarnings.cmake} +0 -0
  18. data/vendor/libgit2/cmake/{Modules/FindCoreFoundation.cmake → FindCoreFoundation.cmake} +0 -0
  19. data/vendor/libgit2/cmake/{Modules/FindGSSAPI.cmake → FindGSSAPI.cmake} +0 -0
  20. data/vendor/libgit2/cmake/{Modules/FindGSSFramework.cmake → FindGSSFramework.cmake} +0 -0
  21. data/vendor/libgit2/cmake/{Modules/FindHTTP_Parser.cmake → FindHTTP_Parser.cmake} +0 -0
  22. data/vendor/libgit2/cmake/{Modules/FindIconv.cmake → FindIconv.cmake} +0 -0
  23. data/vendor/libgit2/cmake/{Modules/FindPCRE.cmake → FindPCRE.cmake} +0 -0
  24. data/vendor/libgit2/cmake/{Modules/FindPCRE2.cmake → FindPCRE2.cmake} +0 -0
  25. data/vendor/libgit2/cmake/{Modules/FindPkgLibraries.cmake → FindPkgLibraries.cmake} +0 -0
  26. data/vendor/libgit2/cmake/{Modules/FindSecurity.cmake → FindSecurity.cmake} +0 -0
  27. data/vendor/libgit2/cmake/{Modules/FindStatNsec.cmake → FindStatNsec.cmake} +0 -0
  28. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  29. data/vendor/libgit2/cmake/{Modules/FindmbedTLS.cmake → FindmbedTLS.cmake} +0 -0
  30. data/vendor/libgit2/cmake/{Modules/IdeSplitSources.cmake → IdeSplitSources.cmake} +0 -0
  31. data/vendor/libgit2/cmake/{Modules/PkgBuildConfig.cmake → PkgBuildConfig.cmake} +0 -0
  32. data/vendor/libgit2/cmake/{Modules/SanitizeBool.cmake → SanitizeBool.cmake} +0 -0
  33. data/vendor/libgit2/cmake/{Modules/SelectGSSAPI.cmake → SelectGSSAPI.cmake} +18 -26
  34. data/vendor/libgit2/cmake/{Modules/SelectHTTPSBackend.cmake → SelectHTTPSBackend.cmake} +29 -32
  35. data/vendor/libgit2/cmake/{Modules/SelectHashes.cmake → SelectHashes.cmake} +21 -28
  36. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  37. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +4 -3
  38. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +24 -10
  39. data/vendor/libgit2/deps/ntlmclient/compat.h +0 -27
  40. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  41. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  43. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  45. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  47. data/vendor/libgit2/deps/ntlmclient/ntlm.c +164 -135
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  49. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  50. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  51. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  54. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +15 -1
  56. data/vendor/libgit2/deps/ntlmclient/util.h +2 -1
  57. data/vendor/libgit2/deps/pcre/LICENCE +93 -0
  58. data/vendor/libgit2/deps/pcre/pcre.h +2 -2
  59. data/vendor/libgit2/deps/pcre/pcre_compile.c +29 -17
  60. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +4 -4
  61. data/vendor/libgit2/deps/pcre/pcreposix.c +2 -3
  62. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -5
  63. data/vendor/libgit2/deps/zlib/deflate.c +1 -0
  64. data/vendor/libgit2/include/git2/annotated_commit.h +1 -1
  65. data/vendor/libgit2/include/git2/apply.h +2 -0
  66. data/vendor/libgit2/include/git2/attr.h +89 -0
  67. data/vendor/libgit2/include/git2/blame.h +95 -42
  68. data/vendor/libgit2/include/git2/blob.h +31 -3
  69. data/vendor/libgit2/include/git2/branch.h +25 -0
  70. data/vendor/libgit2/include/git2/cert.h +42 -5
  71. data/vendor/libgit2/include/git2/checkout.h +28 -12
  72. data/vendor/libgit2/include/git2/commit.h +35 -19
  73. data/vendor/libgit2/include/git2/common.h +33 -6
  74. data/vendor/libgit2/include/git2/config.h +1 -1
  75. data/vendor/libgit2/include/git2/deprecated.h +248 -8
  76. data/vendor/libgit2/include/git2/diff.h +35 -20
  77. data/vendor/libgit2/include/git2/errors.h +8 -7
  78. data/vendor/libgit2/include/git2/filter.h +57 -17
  79. data/vendor/libgit2/include/git2/graph.h +20 -2
  80. data/vendor/libgit2/include/git2/index.h +4 -5
  81. data/vendor/libgit2/include/git2/indexer.h +2 -1
  82. data/vendor/libgit2/include/git2/odb.h +44 -20
  83. data/vendor/libgit2/include/git2/pack.h +1 -1
  84. data/vendor/libgit2/include/git2/patch.h +8 -0
  85. data/vendor/libgit2/include/git2/rebase.h +25 -1
  86. data/vendor/libgit2/include/git2/refs.h +9 -5
  87. data/vendor/libgit2/include/git2/remote.h +59 -6
  88. data/vendor/libgit2/include/git2/repository.h +95 -52
  89. data/vendor/libgit2/include/git2/revparse.h +5 -5
  90. data/vendor/libgit2/include/git2/status.h +115 -59
  91. data/vendor/libgit2/include/git2/strarray.h +6 -10
  92. data/vendor/libgit2/include/git2/submodule.h +9 -0
  93. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  94. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  95. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  96. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  97. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  98. data/vendor/libgit2/include/git2/tag.h +12 -0
  99. data/vendor/libgit2/include/git2/transport.h +1 -1
  100. data/vendor/libgit2/include/git2/tree.h +2 -14
  101. data/vendor/libgit2/include/git2/types.h +9 -0
  102. data/vendor/libgit2/include/git2/version.h +3 -3
  103. data/vendor/libgit2/include/git2/worktree.h +1 -0
  104. data/vendor/libgit2/src/CMakeLists.txt +77 -44
  105. data/vendor/libgit2/src/alloc.c +21 -8
  106. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  107. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  108. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  109. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  110. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  111. data/vendor/libgit2/src/annotated_commit.c +21 -9
  112. data/vendor/libgit2/src/apply.c +21 -8
  113. data/vendor/libgit2/src/array.h +11 -11
  114. data/vendor/libgit2/src/assert_safe.h +58 -0
  115. data/vendor/libgit2/src/attr.c +181 -74
  116. data/vendor/libgit2/src/attr_file.c +92 -42
  117. data/vendor/libgit2/src/attr_file.h +32 -11
  118. data/vendor/libgit2/src/attrcache.c +44 -40
  119. data/vendor/libgit2/src/attrcache.h +4 -5
  120. data/vendor/libgit2/src/blame.c +28 -15
  121. data/vendor/libgit2/src/blame_git.c +6 -3
  122. data/vendor/libgit2/src/blob.c +46 -24
  123. data/vendor/libgit2/src/branch.c +87 -37
  124. data/vendor/libgit2/src/buffer.c +339 -27
  125. data/vendor/libgit2/src/buffer.h +153 -2
  126. data/vendor/libgit2/src/cache.c +3 -24
  127. data/vendor/libgit2/src/cache.h +7 -7
  128. data/vendor/libgit2/src/cc-compat.h +10 -2
  129. data/vendor/libgit2/src/checkout.c +97 -98
  130. data/vendor/libgit2/src/cherrypick.c +8 -2
  131. data/vendor/libgit2/src/clone.c +104 -29
  132. data/vendor/libgit2/src/commit.c +41 -28
  133. data/vendor/libgit2/src/commit_graph.c +1209 -0
  134. data/vendor/libgit2/src/commit_graph.h +162 -0
  135. data/vendor/libgit2/src/commit_list.c +46 -0
  136. data/vendor/libgit2/src/commit_list.h +2 -0
  137. data/vendor/libgit2/src/common.h +26 -2
  138. data/vendor/libgit2/src/config.c +40 -22
  139. data/vendor/libgit2/src/config_cache.c +9 -4
  140. data/vendor/libgit2/src/config_entries.c +35 -27
  141. data/vendor/libgit2/src/config_file.c +25 -8
  142. data/vendor/libgit2/src/config_parse.c +5 -7
  143. data/vendor/libgit2/src/config_snapshot.c +2 -1
  144. data/vendor/libgit2/src/crlf.c +16 -6
  145. data/vendor/libgit2/src/date.c +4 -3
  146. data/vendor/libgit2/src/delta.c +1 -1
  147. data/vendor/libgit2/src/describe.c +11 -4
  148. data/vendor/libgit2/src/diff.c +23 -19
  149. data/vendor/libgit2/src/diff_driver.c +21 -17
  150. data/vendor/libgit2/src/diff_file.c +5 -7
  151. data/vendor/libgit2/src/diff_generate.c +56 -28
  152. data/vendor/libgit2/src/diff_parse.c +2 -3
  153. data/vendor/libgit2/src/diff_print.c +81 -65
  154. data/vendor/libgit2/src/diff_stats.c +19 -16
  155. data/vendor/libgit2/src/diff_tform.c +13 -13
  156. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  157. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  158. data/vendor/libgit2/src/errors.c +26 -19
  159. data/vendor/libgit2/src/features.h.in +5 -1
  160. data/vendor/libgit2/src/fetch.c +7 -2
  161. data/vendor/libgit2/src/fetchhead.c +8 -4
  162. data/vendor/libgit2/src/filebuf.c +9 -7
  163. data/vendor/libgit2/src/filter.c +209 -113
  164. data/vendor/libgit2/src/filter.h +24 -5
  165. data/vendor/libgit2/src/futils.c +8 -8
  166. data/vendor/libgit2/src/futils.h +4 -4
  167. data/vendor/libgit2/src/graph.c +64 -9
  168. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  169. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  170. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  171. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  172. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  173. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  174. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  175. data/vendor/libgit2/src/hash.c +16 -13
  176. data/vendor/libgit2/src/hash.h +1 -1
  177. data/vendor/libgit2/src/hashsig.c +23 -10
  178. data/vendor/libgit2/src/ident.c +13 -3
  179. data/vendor/libgit2/src/idxmap.c +0 -22
  180. data/vendor/libgit2/src/ignore.c +35 -19
  181. data/vendor/libgit2/src/index.c +126 -84
  182. data/vendor/libgit2/src/index.h +1 -1
  183. data/vendor/libgit2/src/indexer.c +60 -36
  184. data/vendor/libgit2/src/integer.h +79 -2
  185. data/vendor/libgit2/src/iterator.c +40 -28
  186. data/vendor/libgit2/src/iterator.h +1 -1
  187. data/vendor/libgit2/src/khash.h +2 -11
  188. data/vendor/libgit2/src/{settings.c → libgit2.c} +125 -49
  189. data/vendor/libgit2/src/libgit2.h +15 -0
  190. data/vendor/libgit2/src/mailmap.c +23 -10
  191. data/vendor/libgit2/src/map.h +3 -3
  192. data/vendor/libgit2/src/merge.c +108 -46
  193. data/vendor/libgit2/src/merge.h +2 -1
  194. data/vendor/libgit2/src/merge_driver.c +19 -13
  195. data/vendor/libgit2/src/merge_file.c +15 -9
  196. data/vendor/libgit2/src/message.c +3 -1
  197. data/vendor/libgit2/src/midx.c +879 -0
  198. data/vendor/libgit2/src/midx.h +110 -0
  199. data/vendor/libgit2/src/mwindow.c +214 -95
  200. data/vendor/libgit2/src/mwindow.h +3 -3
  201. data/vendor/libgit2/src/net.c +133 -4
  202. data/vendor/libgit2/src/net.h +16 -2
  203. data/vendor/libgit2/src/netops.c +6 -4
  204. data/vendor/libgit2/src/netops.h +2 -2
  205. data/vendor/libgit2/src/notes.c +10 -10
  206. data/vendor/libgit2/src/object.c +24 -15
  207. data/vendor/libgit2/src/odb.c +298 -57
  208. data/vendor/libgit2/src/odb.h +16 -2
  209. data/vendor/libgit2/src/odb_loose.c +31 -21
  210. data/vendor/libgit2/src/odb_mempack.c +3 -1
  211. data/vendor/libgit2/src/odb_pack.c +391 -114
  212. data/vendor/libgit2/src/oid.c +7 -4
  213. data/vendor/libgit2/src/pack-objects.c +83 -69
  214. data/vendor/libgit2/src/pack.c +383 -150
  215. data/vendor/libgit2/src/pack.h +44 -9
  216. data/vendor/libgit2/src/patch.c +14 -7
  217. data/vendor/libgit2/src/patch_generate.c +3 -5
  218. data/vendor/libgit2/src/patch_parse.c +6 -3
  219. data/vendor/libgit2/src/path.c +102 -57
  220. data/vendor/libgit2/src/path.h +79 -6
  221. data/vendor/libgit2/src/pathspec.c +12 -11
  222. data/vendor/libgit2/src/pool.c +34 -22
  223. data/vendor/libgit2/src/pool.h +9 -1
  224. data/vendor/libgit2/src/posix.c +43 -12
  225. data/vendor/libgit2/src/posix.h +9 -0
  226. data/vendor/libgit2/src/proxy.c +2 -0
  227. data/vendor/libgit2/src/push.c +2 -0
  228. data/vendor/libgit2/src/reader.c +10 -6
  229. data/vendor/libgit2/src/rebase.c +95 -49
  230. data/vendor/libgit2/src/refdb.c +165 -13
  231. data/vendor/libgit2/src/refdb.h +69 -0
  232. data/vendor/libgit2/src/refdb_fs.c +144 -152
  233. data/vendor/libgit2/src/reflog.c +21 -20
  234. data/vendor/libgit2/src/refs.c +151 -231
  235. data/vendor/libgit2/src/refs.h +2 -20
  236. data/vendor/libgit2/src/refspec.c +80 -44
  237. data/vendor/libgit2/src/regexp.c +2 -2
  238. data/vendor/libgit2/src/remote.c +312 -121
  239. data/vendor/libgit2/src/remote.h +2 -1
  240. data/vendor/libgit2/src/repository.c +351 -189
  241. data/vendor/libgit2/src/repository.h +23 -29
  242. data/vendor/libgit2/src/reset.c +7 -6
  243. data/vendor/libgit2/src/revert.c +8 -2
  244. data/vendor/libgit2/src/revparse.c +19 -13
  245. data/vendor/libgit2/src/revwalk.c +35 -20
  246. data/vendor/libgit2/src/runtime.c +162 -0
  247. data/vendor/libgit2/src/runtime.h +62 -0
  248. data/vendor/libgit2/src/{refdb_fs.h → settings.h} +3 -11
  249. data/vendor/libgit2/src/signature.c +6 -5
  250. data/vendor/libgit2/src/sortedcache.c +2 -3
  251. data/vendor/libgit2/src/sortedcache.h +10 -8
  252. data/vendor/libgit2/src/stash.c +7 -3
  253. data/vendor/libgit2/src/status.c +9 -4
  254. data/vendor/libgit2/src/strarray.c +64 -0
  255. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  256. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  257. data/vendor/libgit2/src/streams/openssl.c +113 -207
  258. data/vendor/libgit2/src/streams/openssl.h +9 -1
  259. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  260. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  261. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  262. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  263. data/vendor/libgit2/src/streams/registry.c +10 -9
  264. data/vendor/libgit2/src/streams/socket.c +6 -2
  265. data/vendor/libgit2/src/streams/stransport.c +6 -3
  266. data/vendor/libgit2/src/streams/tls.c +5 -3
  267. data/vendor/libgit2/src/submodule.c +134 -66
  268. data/vendor/libgit2/src/submodule.h +9 -9
  269. data/vendor/libgit2/src/sysdir.c +8 -26
  270. data/vendor/libgit2/src/sysdir.h +0 -11
  271. data/vendor/libgit2/src/tag.c +49 -11
  272. data/vendor/libgit2/src/thread.c +140 -0
  273. data/vendor/libgit2/src/thread.h +479 -0
  274. data/vendor/libgit2/src/threadstate.c +83 -0
  275. data/vendor/libgit2/src/threadstate.h +24 -0
  276. data/vendor/libgit2/src/trace.c +2 -2
  277. data/vendor/libgit2/src/trace.h +17 -13
  278. data/vendor/libgit2/src/transaction.c +21 -9
  279. data/vendor/libgit2/src/transport.c +3 -3
  280. data/vendor/libgit2/src/transports/auth.c +1 -1
  281. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  282. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  283. data/vendor/libgit2/src/transports/credential.c +17 -7
  284. data/vendor/libgit2/src/transports/credential_helpers.c +2 -0
  285. data/vendor/libgit2/src/transports/git.c +1 -3
  286. data/vendor/libgit2/src/transports/http.c +19 -17
  287. data/vendor/libgit2/src/transports/http.h +1 -0
  288. data/vendor/libgit2/src/transports/httpclient.c +84 -42
  289. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  290. data/vendor/libgit2/src/transports/local.c +5 -5
  291. data/vendor/libgit2/src/transports/smart.c +14 -9
  292. data/vendor/libgit2/src/transports/smart.h +1 -1
  293. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  294. data/vendor/libgit2/src/transports/ssh.c +51 -17
  295. data/vendor/libgit2/src/transports/winhttp.c +156 -88
  296. data/vendor/libgit2/src/tree.c +100 -77
  297. data/vendor/libgit2/src/tree.h +1 -0
  298. data/vendor/libgit2/src/tsort.c +0 -2
  299. data/vendor/libgit2/src/unix/map.c +3 -1
  300. data/vendor/libgit2/src/unix/posix.h +16 -1
  301. data/vendor/libgit2/src/unix/pthread.h +2 -1
  302. data/vendor/libgit2/src/utf8.c +150 -0
  303. data/vendor/libgit2/src/utf8.h +52 -0
  304. data/vendor/libgit2/src/util.c +74 -183
  305. data/vendor/libgit2/src/util.h +33 -39
  306. data/vendor/libgit2/src/vector.c +23 -19
  307. data/vendor/libgit2/src/vector.h +4 -2
  308. data/vendor/libgit2/src/win32/findfile.c +4 -2
  309. data/vendor/libgit2/src/win32/git2.rc +18 -3
  310. data/vendor/libgit2/src/win32/map.c +1 -1
  311. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  312. data/vendor/libgit2/src/win32/path_w32.c +23 -25
  313. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  314. data/vendor/libgit2/src/win32/posix_w32.c +77 -1
  315. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  316. data/vendor/libgit2/src/win32/reparse.h +4 -4
  317. data/vendor/libgit2/src/win32/thread.c +24 -15
  318. data/vendor/libgit2/src/win32/thread.h +1 -1
  319. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  320. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  321. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  322. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  323. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  324. data/vendor/libgit2/src/worktree.c +37 -15
  325. data/vendor/libgit2/src/zstream.c +1 -1
  326. metadata +56 -38
  327. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.c.in +0 -29
  328. data/vendor/libgit2/cmake/Modules/CheckPrototypeDefinition.cmake +0 -96
  329. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  330. data/vendor/libgit2/src/buf_text.c +0 -316
  331. data/vendor/libgit2/src/buf_text.h +0 -122
  332. data/vendor/libgit2/src/global.c +0 -361
  333. data/vendor/libgit2/src/global.h +0 -41
  334. data/vendor/libgit2/src/thread-utils.c +0 -58
  335. data/vendor/libgit2/src/thread-utils.h +0 -246
  336. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  337. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  338. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -6,12 +6,16 @@
6
6
  */
7
7
 
8
8
  #include "streams/openssl.h"
9
+ #include "streams/openssl_legacy.h"
10
+ #include "streams/openssl_dynamic.h"
9
11
 
10
12
  #ifdef GIT_OPENSSL
11
13
 
12
14
  #include <ctype.h>
13
15
 
14
- #include "global.h"
16
+ #include "common.h"
17
+ #include "runtime.h"
18
+ #include "settings.h"
15
19
  #include "posix.h"
16
20
  #include "stream.h"
17
21
  #include "streams/socket.h"
@@ -25,156 +29,17 @@
25
29
  # include <netinet/in.h>
26
30
  #endif
27
31
 
28
- #include <openssl/ssl.h>
29
- #include <openssl/err.h>
30
- #include <openssl/x509v3.h>
31
- #include <openssl/bio.h>
32
+ #ifndef GIT_OPENSSL_DYNAMIC
33
+ # include <openssl/ssl.h>
34
+ # include <openssl/err.h>
35
+ # include <openssl/x509v3.h>
36
+ # include <openssl/bio.h>
37
+ #endif
32
38
 
33
39
  SSL_CTX *git__ssl_ctx;
34
40
 
35
41
  #define GIT_SSL_DEFAULT_CIPHERS "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA256:DHE-DSS-AES128-SHA:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA"
36
42
 
37
- #if (defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER < 0x10100000L) || \
38
- (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L)
39
- # define OPENSSL_LEGACY_API
40
- #endif
41
-
42
- /*
43
- * OpenSSL 1.1 made BIO opaque so we have to use functions to interact with it
44
- * which do not exist in previous versions. We define these inline functions so
45
- * we can program against the interface instead of littering the implementation
46
- * with ifdefs. We do the same for OPENSSL_init_ssl.
47
- */
48
- #if defined(OPENSSL_LEGACY_API)
49
- static int OPENSSL_init_ssl(int opts, void *settings)
50
- {
51
- GIT_UNUSED(opts);
52
- GIT_UNUSED(settings);
53
- SSL_load_error_strings();
54
- OpenSSL_add_ssl_algorithms();
55
- return 0;
56
- }
57
-
58
- static BIO_METHOD* BIO_meth_new(int type, const char *name)
59
- {
60
- BIO_METHOD *meth = git__calloc(1, sizeof(BIO_METHOD));
61
- if (!meth) {
62
- return NULL;
63
- }
64
-
65
- meth->type = type;
66
- meth->name = name;
67
-
68
- return meth;
69
- }
70
-
71
- static void BIO_meth_free(BIO_METHOD *biom)
72
- {
73
- git__free(biom);
74
- }
75
-
76
- static int BIO_meth_set_write(BIO_METHOD *biom, int (*write) (BIO *, const char *, int))
77
- {
78
- biom->bwrite = write;
79
- return 1;
80
- }
81
-
82
- static int BIO_meth_set_read(BIO_METHOD *biom, int (*read) (BIO *, char *, int))
83
- {
84
- biom->bread = read;
85
- return 1;
86
- }
87
-
88
- static int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts) (BIO *, const char *))
89
- {
90
- biom->bputs = puts;
91
- return 1;
92
- }
93
-
94
- static int BIO_meth_set_gets(BIO_METHOD *biom, int (*gets) (BIO *, char *, int))
95
-
96
- {
97
- biom->bgets = gets;
98
- return 1;
99
- }
100
-
101
- static int BIO_meth_set_ctrl(BIO_METHOD *biom, long (*ctrl) (BIO *, int, long, void *))
102
- {
103
- biom->ctrl = ctrl;
104
- return 1;
105
- }
106
-
107
- static int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *))
108
- {
109
- biom->create = create;
110
- return 1;
111
- }
112
-
113
- static int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *))
114
- {
115
- biom->destroy = destroy;
116
- return 1;
117
- }
118
-
119
- static int BIO_get_new_index(void)
120
- {
121
- /* This exists as of 1.1 so before we'd just have 0 */
122
- return 0;
123
- }
124
-
125
- static void BIO_set_init(BIO *b, int init)
126
- {
127
- b->init = init;
128
- }
129
-
130
- static void BIO_set_data(BIO *a, void *ptr)
131
- {
132
- a->ptr = ptr;
133
- }
134
-
135
- static void *BIO_get_data(BIO *a)
136
- {
137
- return a->ptr;
138
- }
139
-
140
- static const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x)
141
- {
142
- return ASN1_STRING_data((ASN1_STRING *)x);
143
- }
144
-
145
- # if defined(GIT_THREADS)
146
- static git_mutex *openssl_locks;
147
-
148
- static void openssl_locking_function(
149
- int mode, int n, const char *file, int line)
150
- {
151
- int lock;
152
-
153
- GIT_UNUSED(file);
154
- GIT_UNUSED(line);
155
-
156
- lock = mode & CRYPTO_LOCK;
157
-
158
- if (lock) {
159
- (void)git_mutex_lock(&openssl_locks[n]);
160
- } else {
161
- git_mutex_unlock(&openssl_locks[n]);
162
- }
163
- }
164
-
165
- static void shutdown_ssl_locking(void)
166
- {
167
- int num_locks, i;
168
-
169
- num_locks = CRYPTO_num_locks();
170
- CRYPTO_set_locking_callback(NULL);
171
-
172
- for (i = 0; i < num_locks; ++i)
173
- git_mutex_free(&openssl_locks[i]);
174
- git__free(openssl_locks);
175
- }
176
- # endif /* GIT_THREADS */
177
- #endif /* OPENSSL_LEGACY_API */
178
43
 
179
44
  static BIO_METHOD *git_stream_bio_method;
180
45
  static int init_bio_method(void);
@@ -197,46 +62,47 @@ static void shutdown_ssl(void)
197
62
  }
198
63
 
199
64
  #ifdef VALGRIND
200
- #ifdef OPENSSL_LEGACY_API
201
- static void *git_openssl_malloc(size_t bytes)
202
- {
203
- return git__calloc(1, bytes);
204
- }
65
+ # if !defined(GIT_OPENSSL_LEGACY) && !defined(GIT_OPENSSL_DYNAMIC)
205
66
 
206
- static void *git_openssl_realloc(void *mem, size_t size)
207
- {
208
- return git__realloc(mem, size);
209
- }
210
-
211
- static void git_openssl_free(void *mem)
212
- {
213
- return git__free(mem);
214
- }
215
- #else
216
67
  static void *git_openssl_malloc(size_t bytes, const char *file, int line)
217
68
  {
218
69
  GIT_UNUSED(file);
219
70
  GIT_UNUSED(line);
220
71
  return git__calloc(1, bytes);
221
72
  }
222
-
73
+
223
74
  static void *git_openssl_realloc(void *mem, size_t size, const char *file, int line)
224
75
  {
225
76
  GIT_UNUSED(file);
226
77
  GIT_UNUSED(line);
227
78
  return git__realloc(mem, size);
228
79
  }
229
-
80
+
230
81
  static void git_openssl_free(void *mem, const char *file, int line)
231
82
  {
232
83
  GIT_UNUSED(file);
233
84
  GIT_UNUSED(line);
234
- return git__free(mem);
85
+ git__free(mem);
86
+ }
87
+ # else /* !GIT_OPENSSL_LEGACY && !GIT_OPENSSL_DYNAMIC */
88
+ static void *git_openssl_malloc(size_t bytes)
89
+ {
90
+ return git__calloc(1, bytes);
235
91
  }
236
- #endif
237
- #endif
238
92
 
239
- int git_openssl_stream_global_init(void)
93
+ static void *git_openssl_realloc(void *mem, size_t size)
94
+ {
95
+ return git__realloc(mem, size);
96
+ }
97
+
98
+ static void git_openssl_free(void *mem)
99
+ {
100
+ git__free(mem);
101
+ }
102
+ # endif /* !GIT_OPENSSL_LEGACY && !GIT_OPENSSL_DYNAMIC */
103
+ #endif /* VALGRIND */
104
+
105
+ static int openssl_init(void)
240
106
  {
241
107
  long ssl_opts = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
242
108
  const char *ciphers = git_libgit2__ssl_ciphers();
@@ -250,13 +116,18 @@ int git_openssl_stream_global_init(void)
250
116
  #endif
251
117
 
252
118
  #ifdef VALGRIND
253
- /* Swap in our own allocator functions that initialize allocated memory */
254
- if (!allocators_initialized &&
119
+ /*
120
+ * Swap in our own allocator functions that initialize
121
+ * allocated memory to avoid spurious valgrind warnings.
122
+ * Don't error on failure; many builds of OpenSSL do not
123
+ * allow you to set these functions.
124
+ */
125
+ if (!allocators_initialized) {
255
126
  CRYPTO_set_mem_functions(git_openssl_malloc,
256
127
  git_openssl_realloc,
257
- git_openssl_free) != 1)
258
- goto error;
259
- allocators_initialized = true;
128
+ git_openssl_free);
129
+ allocators_initialized = true;
130
+ }
260
131
  #endif
261
132
 
262
133
  OPENSSL_init_ssl(0, NULL);
@@ -285,9 +156,7 @@ int git_openssl_stream_global_init(void)
285
156
  if (init_bio_method() < 0)
286
157
  goto error;
287
158
 
288
- git__on_shutdown(shutdown_ssl);
289
-
290
- return 0;
159
+ return git_runtime_shutdown_register(shutdown_ssl);
291
160
 
292
161
  error:
293
162
  git_error_set(GIT_ERROR_NET, "could not initialize openssl: %s",
@@ -297,42 +166,60 @@ error:
297
166
  return -1;
298
167
  }
299
168
 
300
- #if defined(GIT_THREADS) && defined(OPENSSL_LEGACY_API)
301
- static void threadid_cb(CRYPTO_THREADID *threadid)
169
+ /*
170
+ * When we use dynamic loading, we defer OpenSSL initialization until
171
+ * it's first used. `openssl_ensure_initialized` will do the work
172
+ * under a mutex.
173
+ */
174
+ git_mutex openssl_mutex;
175
+ bool openssl_initialized;
176
+
177
+ int git_openssl_stream_global_init(void)
302
178
  {
303
- GIT_UNUSED(threadid);
304
- CRYPTO_THREADID_set_numeric(threadid, git_thread_currentid());
305
- }
179
+ #ifndef GIT_OPENSSL_DYNAMIC
180
+ return openssl_init();
181
+ #else
182
+ if (git_mutex_init(&openssl_mutex) != 0)
183
+ return -1;
184
+
185
+ return 0;
306
186
  #endif
187
+ }
307
188
 
308
- int git_openssl_set_locking(void)
189
+ static int openssl_ensure_initialized(void)
309
190
  {
310
- #if defined(GIT_THREADS) && defined(OPENSSL_LEGACY_API)
311
- int num_locks, i;
191
+ #ifdef GIT_OPENSSL_DYNAMIC
192
+ int error = 0;
312
193
 
313
- CRYPTO_THREADID_set_callback(threadid_cb);
194
+ if (git_mutex_lock(&openssl_mutex) != 0)
195
+ return -1;
314
196
 
315
- num_locks = CRYPTO_num_locks();
316
- openssl_locks = git__calloc(num_locks, sizeof(git_mutex));
317
- GIT_ERROR_CHECK_ALLOC(openssl_locks);
197
+ if (!openssl_initialized) {
198
+ if ((error = git_openssl_stream_dynamic_init()) == 0)
199
+ error = openssl_init();
318
200
 
319
- for (i = 0; i < num_locks; i++) {
320
- if (git_mutex_init(&openssl_locks[i]) != 0) {
321
- git_error_set(GIT_ERROR_SSL, "failed to initialize openssl locks");
322
- return -1;
323
- }
201
+ openssl_initialized = true;
324
202
  }
325
203
 
326
- CRYPTO_set_locking_callback(openssl_locking_function);
327
- git__on_shutdown(shutdown_ssl_locking);
204
+ error |= git_mutex_unlock(&openssl_mutex);
205
+ return error;
206
+
207
+ #else
328
208
  return 0;
329
- #elif !defined(OPENSSL_LEGACY_API)
209
+ #endif
210
+ }
211
+
212
+ #if !defined(GIT_OPENSSL_LEGACY) && !defined(GIT_OPENSSL_DYNAMIC)
213
+ int git_openssl_set_locking(void)
214
+ {
215
+ # ifdef GIT_THREADS
330
216
  return 0;
331
- #else
217
+ # else
332
218
  git_error_set(GIT_ERROR_THREAD, "libgit2 was not built with threads");
333
219
  return -1;
334
- #endif
220
+ # endif
335
221
  }
222
+ #endif
336
223
 
337
224
 
338
225
  static int bio_create(BIO *b)
@@ -415,8 +302,8 @@ static int ssl_set_error(SSL *ssl, int error)
415
302
 
416
303
  err = SSL_get_error(ssl, error);
417
304
 
418
- assert(err != SSL_ERROR_WANT_READ);
419
- assert(err != SSL_ERROR_WANT_WRITE);
305
+ GIT_ASSERT(err != SSL_ERROR_WANT_READ);
306
+ GIT_ASSERT(err != SSL_ERROR_WANT_WRITE);
420
307
 
421
308
  switch (err) {
422
309
  case SSL_ERROR_WANT_CONNECT:
@@ -655,15 +542,16 @@ static int openssl_connect(git_stream *stream)
655
542
  static int openssl_certificate(git_cert **out, git_stream *stream)
656
543
  {
657
544
  openssl_stream *st = (openssl_stream *) stream;
658
- int len;
659
545
  X509 *cert = SSL_get_peer_certificate(st->ssl);
660
- unsigned char *guard, *encoded_cert;
546
+ unsigned char *guard, *encoded_cert = NULL;
547
+ int error, len;
661
548
 
662
549
  /* Retrieve the length of the certificate first */
663
550
  len = i2d_X509(cert, NULL);
664
551
  if (len < 0) {
665
552
  git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
666
- return -1;
553
+ error = -1;
554
+ goto out;
667
555
  }
668
556
 
669
557
  encoded_cert = git__malloc(len);
@@ -673,18 +561,23 @@ static int openssl_certificate(git_cert **out, git_stream *stream)
673
561
 
674
562
  len = i2d_X509(cert, &guard);
675
563
  if (len < 0) {
676
- git__free(encoded_cert);
677
564
  git_error_set(GIT_ERROR_NET, "failed to retrieve certificate information");
678
- return -1;
565
+ error = -1;
566
+ goto out;
679
567
  }
680
568
 
681
569
  st->cert_info.parent.cert_type = GIT_CERT_X509;
682
570
  st->cert_info.data = encoded_cert;
683
571
  st->cert_info.len = len;
572
+ encoded_cert = NULL;
684
573
 
685
574
  *out = &st->cert_info.parent;
575
+ error = 0;
686
576
 
687
- return 0;
577
+ out:
578
+ git__free(encoded_cert);
579
+ X509_free(cert);
580
+ return error;
688
581
  }
689
582
 
690
583
  static int openssl_set_proxy(git_stream *stream, const git_proxy_options *proxy_opts)
@@ -752,7 +645,9 @@ static int openssl_stream_wrap(
752
645
  {
753
646
  openssl_stream *st;
754
647
 
755
- assert(out && in && host);
648
+ GIT_ASSERT_ARG(out);
649
+ GIT_ASSERT_ARG(in);
650
+ GIT_ASSERT_ARG(host);
756
651
 
757
652
  st = git__calloc(1, sizeof(openssl_stream));
758
653
  GIT_ERROR_CHECK_ALLOC(st);
@@ -787,6 +682,9 @@ static int openssl_stream_wrap(
787
682
 
788
683
  int git_openssl_stream_wrap(git_stream **out, git_stream *in, const char *host)
789
684
  {
685
+ if (openssl_ensure_initialized() < 0)
686
+ return -1;
687
+
790
688
  return openssl_stream_wrap(out, in, host, 0);
791
689
  }
792
690
 
@@ -795,7 +693,12 @@ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
795
693
  git_stream *stream = NULL;
796
694
  int error;
797
695
 
798
- assert(out && host && port);
696
+ GIT_ASSERT_ARG(out);
697
+ GIT_ASSERT_ARG(host);
698
+ GIT_ASSERT_ARG(port);
699
+
700
+ if (openssl_ensure_initialized() < 0)
701
+ return -1;
799
702
 
800
703
  if ((error = git_socket_stream_new(&stream, host, port)) < 0)
801
704
  return error;
@@ -810,6 +713,9 @@ int git_openssl_stream_new(git_stream **out, const char *host, const char *port)
810
713
 
811
714
  int git_openssl__set_cert_location(const char *file, const char *path)
812
715
  {
716
+ if (openssl_ensure_initialized() < 0)
717
+ return -1;
718
+
813
719
  if (SSL_CTX_load_verify_locations(git__ssl_ctx, file, path) == 0) {
814
720
  char errmsg[256];
815
721