rugged 0.27.10.1 → 0.28.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 (297) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +23 -2
  3. data/ext/rugged/rugged.c +48 -2
  4. data/ext/rugged/rugged.h +5 -0
  5. data/ext/rugged/rugged_allocator.c +89 -0
  6. data/ext/rugged/rugged_blob.c +3 -3
  7. data/ext/rugged/rugged_branch.c +1 -1
  8. data/ext/rugged/rugged_commit.c +8 -8
  9. data/ext/rugged/rugged_config.c +1 -1
  10. data/ext/rugged/rugged_diff.c +24 -4
  11. data/ext/rugged/rugged_note.c +1 -1
  12. data/ext/rugged/rugged_repo.c +10 -10
  13. data/ext/rugged/rugged_settings.c +1 -1
  14. data/lib/rugged/version.rb +1 -1
  15. data/vendor/libgit2/CMakeLists.txt +69 -47
  16. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +15 -1
  17. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +5 -8
  18. data/vendor/libgit2/cmake/Modules/FindmbedTLS.cmake +93 -0
  19. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +2 -0
  20. data/vendor/libgit2/deps/http-parser/{LICENSE-MIT → COPYING} +0 -0
  21. data/vendor/libgit2/deps/regex/COPYING +502 -0
  22. data/vendor/libgit2/deps/winhttp/COPYING.GPL +993 -0
  23. data/vendor/libgit2/deps/winhttp/COPYING.LGPL +502 -0
  24. data/vendor/libgit2/deps/zlib/CMakeLists.txt +1 -0
  25. data/vendor/libgit2/deps/zlib/COPYING +27 -0
  26. data/vendor/libgit2/include/git2.h +3 -0
  27. data/vendor/libgit2/include/git2/annotated_commit.h +9 -0
  28. data/vendor/libgit2/include/git2/apply.h +129 -0
  29. data/vendor/libgit2/include/git2/attr.h +19 -8
  30. data/vendor/libgit2/include/git2/blame.h +41 -24
  31. data/vendor/libgit2/include/git2/blob.h +1 -1
  32. data/vendor/libgit2/include/git2/branch.h +1 -1
  33. data/vendor/libgit2/include/git2/buffer.h +2 -2
  34. data/vendor/libgit2/include/git2/checkout.h +20 -19
  35. data/vendor/libgit2/include/git2/cherrypick.h +6 -4
  36. data/vendor/libgit2/include/git2/clone.h +11 -9
  37. data/vendor/libgit2/include/git2/commit.h +30 -2
  38. data/vendor/libgit2/include/git2/common.h +54 -4
  39. data/vendor/libgit2/include/git2/config.h +18 -7
  40. data/vendor/libgit2/include/git2/deprecated.h +253 -0
  41. data/vendor/libgit2/include/git2/describe.h +30 -7
  42. data/vendor/libgit2/include/git2/diff.h +193 -143
  43. data/vendor/libgit2/include/git2/errors.h +54 -46
  44. data/vendor/libgit2/include/git2/ignore.h +2 -2
  45. data/vendor/libgit2/include/git2/index.h +72 -51
  46. data/vendor/libgit2/include/git2/indexer.h +30 -4
  47. data/vendor/libgit2/include/git2/mailmap.h +115 -0
  48. data/vendor/libgit2/include/git2/merge.h +29 -8
  49. data/vendor/libgit2/include/git2/net.h +1 -1
  50. data/vendor/libgit2/include/git2/notes.h +1 -1
  51. data/vendor/libgit2/include/git2/object.h +16 -16
  52. data/vendor/libgit2/include/git2/odb.h +10 -10
  53. data/vendor/libgit2/include/git2/odb_backend.h +7 -7
  54. data/vendor/libgit2/include/git2/oid.h +1 -1
  55. data/vendor/libgit2/include/git2/pack.h +2 -2
  56. data/vendor/libgit2/include/git2/proxy.h +9 -5
  57. data/vendor/libgit2/include/git2/rebase.h +7 -4
  58. data/vendor/libgit2/include/git2/refs.h +14 -15
  59. data/vendor/libgit2/include/git2/refspec.h +17 -0
  60. data/vendor/libgit2/include/git2/remote.h +92 -16
  61. data/vendor/libgit2/include/git2/repository.h +52 -37
  62. data/vendor/libgit2/include/git2/revert.h +5 -3
  63. data/vendor/libgit2/include/git2/revwalk.h +7 -7
  64. data/vendor/libgit2/include/git2/signature.h +2 -2
  65. data/vendor/libgit2/include/git2/stash.h +13 -10
  66. data/vendor/libgit2/include/git2/status.h +8 -4
  67. data/vendor/libgit2/include/git2/submodule.h +11 -10
  68. data/vendor/libgit2/include/git2/sys/alloc.h +101 -0
  69. data/vendor/libgit2/include/git2/sys/commit.h +1 -1
  70. data/vendor/libgit2/include/git2/sys/config.h +13 -13
  71. data/vendor/libgit2/include/git2/sys/filter.h +6 -6
  72. data/vendor/libgit2/include/git2/sys/index.h +3 -0
  73. data/vendor/libgit2/include/git2/sys/mempack.h +35 -35
  74. data/vendor/libgit2/include/git2/sys/merge.h +9 -4
  75. data/vendor/libgit2/include/git2/sys/odb_backend.h +19 -19
  76. data/vendor/libgit2/include/git2/sys/path.h +64 -0
  77. data/vendor/libgit2/include/git2/sys/refdb_backend.h +19 -19
  78. data/vendor/libgit2/include/git2/sys/stream.h +92 -12
  79. data/vendor/libgit2/include/git2/sys/transport.h +127 -81
  80. data/vendor/libgit2/include/git2/tag.h +2 -2
  81. data/vendor/libgit2/include/git2/trace.h +1 -1
  82. data/vendor/libgit2/include/git2/transaction.h +1 -0
  83. data/vendor/libgit2/include/git2/transport.h +47 -18
  84. data/vendor/libgit2/include/git2/tree.h +3 -3
  85. data/vendor/libgit2/include/git2/types.h +35 -28
  86. data/vendor/libgit2/include/git2/version.h +4 -4
  87. data/vendor/libgit2/include/git2/worktree.h +47 -12
  88. data/vendor/libgit2/src/CMakeLists.txt +87 -26
  89. data/vendor/libgit2/src/alloc.c +55 -0
  90. data/vendor/libgit2/src/alloc.h +40 -0
  91. data/vendor/libgit2/src/annotated_commit.c +15 -8
  92. data/vendor/libgit2/src/apply.c +490 -14
  93. data/vendor/libgit2/src/apply.h +3 -1
  94. data/vendor/libgit2/src/array.h +2 -2
  95. data/vendor/libgit2/src/attr.c +11 -11
  96. data/vendor/libgit2/src/attr_file.c +20 -15
  97. data/vendor/libgit2/src/attrcache.c +11 -11
  98. data/vendor/libgit2/src/blame.c +30 -15
  99. data/vendor/libgit2/src/blame.h +1 -0
  100. data/vendor/libgit2/src/blame_git.c +16 -13
  101. data/vendor/libgit2/src/blob.c +50 -28
  102. data/vendor/libgit2/src/blob.h +18 -1
  103. data/vendor/libgit2/src/branch.c +38 -38
  104. data/vendor/libgit2/src/buf_text.c +7 -6
  105. data/vendor/libgit2/src/buffer.c +55 -50
  106. data/vendor/libgit2/src/buffer.h +1 -1
  107. data/vendor/libgit2/src/cache.c +16 -16
  108. data/vendor/libgit2/src/cache.h +2 -2
  109. data/vendor/libgit2/src/cc-compat.h +15 -3
  110. data/vendor/libgit2/src/checkout.c +83 -74
  111. data/vendor/libgit2/src/cherrypick.c +6 -6
  112. data/vendor/libgit2/src/clone.c +20 -20
  113. data/vendor/libgit2/src/commit.c +53 -33
  114. data/vendor/libgit2/src/commit.h +1 -0
  115. data/vendor/libgit2/src/commit_list.c +6 -10
  116. data/vendor/libgit2/src/common.h +32 -30
  117. data/vendor/libgit2/src/config.c +167 -147
  118. data/vendor/libgit2/src/config.h +1 -14
  119. data/vendor/libgit2/src/config_backend.h +84 -0
  120. data/vendor/libgit2/src/config_cache.c +7 -1
  121. data/vendor/libgit2/src/config_entries.c +259 -0
  122. data/vendor/libgit2/src/config_entries.h +23 -0
  123. data/vendor/libgit2/src/config_file.c +167 -439
  124. data/vendor/libgit2/src/config_mem.c +224 -0
  125. data/vendor/libgit2/src/config_parse.c +69 -38
  126. data/vendor/libgit2/src/config_parse.h +4 -4
  127. data/vendor/libgit2/src/crlf.c +215 -186
  128. data/vendor/libgit2/src/delta.c +25 -18
  129. data/vendor/libgit2/src/describe.c +23 -23
  130. data/vendor/libgit2/src/diff.c +12 -12
  131. data/vendor/libgit2/src/diff_driver.c +14 -15
  132. data/vendor/libgit2/src/diff_file.c +10 -10
  133. data/vendor/libgit2/src/diff_generate.c +29 -23
  134. data/vendor/libgit2/src/diff_generate.h +1 -1
  135. data/vendor/libgit2/src/diff_parse.c +3 -3
  136. data/vendor/libgit2/src/diff_print.c +17 -17
  137. data/vendor/libgit2/src/diff_stats.c +22 -7
  138. data/vendor/libgit2/src/diff_tform.c +12 -12
  139. data/vendor/libgit2/src/diff_xdiff.c +15 -3
  140. data/vendor/libgit2/src/errors.c +42 -20
  141. data/vendor/libgit2/src/features.h.in +2 -1
  142. data/vendor/libgit2/src/fetch.c +3 -3
  143. data/vendor/libgit2/src/fetchhead.c +16 -16
  144. data/vendor/libgit2/src/filebuf.c +28 -28
  145. data/vendor/libgit2/src/fileops.c +54 -54
  146. data/vendor/libgit2/src/fileops.h +1 -1
  147. data/vendor/libgit2/src/filter.c +30 -30
  148. data/vendor/libgit2/src/filter.h +0 -10
  149. data/vendor/libgit2/src/global.c +36 -23
  150. data/vendor/libgit2/src/hash.h +4 -1
  151. data/vendor/libgit2/src/hash/hash_collisiondetect.h +6 -2
  152. data/vendor/libgit2/src/hash/hash_common_crypto.h +5 -1
  153. data/vendor/libgit2/src/hash/hash_generic.h +5 -1
  154. data/vendor/libgit2/src/hash/hash_mbedtls.c +38 -0
  155. data/vendor/libgit2/src/hash/hash_mbedtls.h +24 -0
  156. data/vendor/libgit2/src/hash/hash_openssl.h +8 -4
  157. data/vendor/libgit2/src/hash/hash_win32.c +13 -13
  158. data/vendor/libgit2/src/hashsig.c +4 -4
  159. data/vendor/libgit2/src/idxmap.c +25 -5
  160. data/vendor/libgit2/src/idxmap.h +4 -18
  161. data/vendor/libgit2/src/ignore.c +9 -9
  162. data/vendor/libgit2/src/index.c +280 -198
  163. data/vendor/libgit2/src/index.h +16 -0
  164. data/vendor/libgit2/src/indexer.c +311 -139
  165. data/vendor/libgit2/src/integer.h +32 -22
  166. data/vendor/libgit2/src/iterator.c +116 -49
  167. data/vendor/libgit2/src/iterator.h +15 -0
  168. data/vendor/libgit2/src/khash.h +3 -1
  169. data/vendor/libgit2/src/mailmap.c +485 -0
  170. data/vendor/libgit2/src/mailmap.h +35 -0
  171. data/vendor/libgit2/src/merge.c +89 -59
  172. data/vendor/libgit2/src/merge_driver.c +7 -7
  173. data/vendor/libgit2/src/merge_file.c +1 -1
  174. data/vendor/libgit2/src/mwindow.c +8 -8
  175. data/vendor/libgit2/src/netops.c +22 -13
  176. data/vendor/libgit2/src/netops.h +2 -0
  177. data/vendor/libgit2/src/notes.c +15 -10
  178. data/vendor/libgit2/src/object.c +118 -67
  179. data/vendor/libgit2/src/object.h +20 -9
  180. data/vendor/libgit2/src/object_api.c +8 -8
  181. data/vendor/libgit2/src/odb.c +72 -72
  182. data/vendor/libgit2/src/odb.h +7 -7
  183. data/vendor/libgit2/src/odb_loose.c +46 -46
  184. data/vendor/libgit2/src/odb_mempack.c +14 -14
  185. data/vendor/libgit2/src/odb_pack.c +14 -10
  186. data/vendor/libgit2/src/offmap.c +30 -0
  187. data/vendor/libgit2/src/offmap.h +20 -11
  188. data/vendor/libgit2/src/oid.c +6 -6
  189. data/vendor/libgit2/src/oidmap.c +20 -0
  190. data/vendor/libgit2/src/oidmap.h +9 -12
  191. data/vendor/libgit2/src/pack-objects.c +71 -63
  192. data/vendor/libgit2/src/pack-objects.h +1 -7
  193. data/vendor/libgit2/src/pack.c +58 -58
  194. data/vendor/libgit2/src/pack.h +6 -6
  195. data/vendor/libgit2/src/parse.h +1 -1
  196. data/vendor/libgit2/src/patch.c +3 -3
  197. data/vendor/libgit2/src/patch_generate.c +18 -18
  198. data/vendor/libgit2/src/patch_parse.c +13 -13
  199. data/vendor/libgit2/src/path.c +93 -225
  200. data/vendor/libgit2/src/path.h +2 -84
  201. data/vendor/libgit2/src/pathspec.c +6 -6
  202. data/vendor/libgit2/src/posix.c +3 -3
  203. data/vendor/libgit2/src/proxy.c +1 -1
  204. data/vendor/libgit2/src/push.c +27 -26
  205. data/vendor/libgit2/src/push.h +2 -1
  206. data/vendor/libgit2/src/reader.c +265 -0
  207. data/vendor/libgit2/src/reader.h +107 -0
  208. data/vendor/libgit2/src/rebase.c +49 -52
  209. data/vendor/libgit2/src/refdb.c +3 -3
  210. data/vendor/libgit2/src/refdb_fs.c +181 -103
  211. data/vendor/libgit2/src/reflog.c +3 -3
  212. data/vendor/libgit2/src/refs.c +98 -74
  213. data/vendor/libgit2/src/refs.h +5 -3
  214. data/vendor/libgit2/src/refspec.c +47 -21
  215. data/vendor/libgit2/src/refspec.h +1 -1
  216. data/vendor/libgit2/src/remote.c +219 -166
  217. data/vendor/libgit2/src/remote.h +9 -0
  218. data/vendor/libgit2/src/repository.c +173 -133
  219. data/vendor/libgit2/src/repository.h +6 -3
  220. data/vendor/libgit2/src/reset.c +8 -8
  221. data/vendor/libgit2/src/revert.c +6 -6
  222. data/vendor/libgit2/src/revparse.c +30 -30
  223. data/vendor/libgit2/src/revwalk.c +60 -30
  224. data/vendor/libgit2/src/revwalk.h +2 -1
  225. data/vendor/libgit2/src/settings.c +42 -10
  226. data/vendor/libgit2/src/signature.c +11 -11
  227. data/vendor/libgit2/src/sortedcache.c +13 -13
  228. data/vendor/libgit2/src/stash.c +91 -45
  229. data/vendor/libgit2/src/status.c +13 -13
  230. data/vendor/libgit2/src/stdalloc.c +120 -0
  231. data/vendor/libgit2/src/{streams/curl.h → stdalloc.h} +6 -6
  232. data/vendor/libgit2/src/stream.h +17 -2
  233. data/vendor/libgit2/src/streams/mbedtls.c +483 -0
  234. data/vendor/libgit2/src/streams/mbedtls.h +23 -0
  235. data/vendor/libgit2/src/streams/openssl.c +204 -114
  236. data/vendor/libgit2/src/streams/openssl.h +4 -108
  237. data/vendor/libgit2/src/streams/registry.c +118 -0
  238. data/vendor/libgit2/src/streams/registry.h +19 -0
  239. data/vendor/libgit2/src/streams/socket.c +54 -29
  240. data/vendor/libgit2/src/streams/stransport.c +57 -32
  241. data/vendor/libgit2/src/streams/stransport.h +5 -0
  242. data/vendor/libgit2/src/streams/tls.c +50 -19
  243. data/vendor/libgit2/src/streams/tls.h +12 -4
  244. data/vendor/libgit2/src/strmap.c +22 -2
  245. data/vendor/libgit2/src/strmap.h +18 -15
  246. data/vendor/libgit2/src/submodule.c +179 -155
  247. data/vendor/libgit2/src/sysdir.c +18 -18
  248. data/vendor/libgit2/src/tag.c +31 -26
  249. data/vendor/libgit2/src/tag.h +2 -1
  250. data/vendor/libgit2/src/trace.c +1 -1
  251. data/vendor/libgit2/src/trace.h +1 -1
  252. data/vendor/libgit2/src/trailer.c +6 -6
  253. data/vendor/libgit2/src/transaction.c +23 -23
  254. data/vendor/libgit2/src/transport.c +5 -5
  255. data/vendor/libgit2/src/transports/auth.c +7 -4
  256. data/vendor/libgit2/src/transports/auth.h +1 -1
  257. data/vendor/libgit2/src/transports/auth_negotiate.c +12 -11
  258. data/vendor/libgit2/src/transports/cred.c +18 -18
  259. data/vendor/libgit2/src/transports/git.c +15 -15
  260. data/vendor/libgit2/src/transports/http.c +606 -216
  261. data/vendor/libgit2/src/transports/http.h +2 -0
  262. data/vendor/libgit2/src/transports/local.c +26 -26
  263. data/vendor/libgit2/src/transports/smart.c +54 -31
  264. data/vendor/libgit2/src/transports/smart.h +1 -2
  265. data/vendor/libgit2/src/transports/smart_pkt.c +43 -40
  266. data/vendor/libgit2/src/transports/smart_protocol.c +61 -57
  267. data/vendor/libgit2/src/transports/ssh.c +34 -33
  268. data/vendor/libgit2/src/transports/winhttp.c +99 -119
  269. data/vendor/libgit2/src/tree-cache.c +5 -5
  270. data/vendor/libgit2/src/tree.c +96 -121
  271. data/vendor/libgit2/src/tree.h +1 -12
  272. data/vendor/libgit2/src/unix/map.c +2 -2
  273. data/vendor/libgit2/src/util.c +22 -6
  274. data/vendor/libgit2/src/util.h +12 -135
  275. data/vendor/libgit2/src/vector.c +4 -4
  276. data/vendor/libgit2/src/win32/dir.c +3 -3
  277. data/vendor/libgit2/src/win32/findfile.c +3 -3
  278. data/vendor/libgit2/src/win32/map.c +6 -6
  279. data/vendor/libgit2/src/win32/msvc-compat.h +6 -0
  280. data/vendor/libgit2/src/win32/path_w32.c +101 -7
  281. data/vendor/libgit2/src/win32/path_w32.h +18 -0
  282. data/vendor/libgit2/src/win32/posix_w32.c +24 -43
  283. data/vendor/libgit2/src/win32/w32_buffer.c +2 -2
  284. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +96 -2
  285. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +28 -75
  286. data/vendor/libgit2/src/win32/w32_stack.c +2 -2
  287. data/vendor/libgit2/src/win32/w32_util.c +1 -69
  288. data/vendor/libgit2/src/win32/w32_util.h +1 -19
  289. data/vendor/libgit2/src/worktree.c +75 -54
  290. data/vendor/libgit2/src/worktree.h +2 -0
  291. data/vendor/libgit2/src/xdiff/xdiffi.c +7 -5
  292. data/vendor/libgit2/src/xdiff/xhistogram.c +1 -1
  293. data/vendor/libgit2/src/xdiff/xmerge.c +15 -15
  294. data/vendor/libgit2/src/zstream.c +4 -4
  295. metadata +33 -7
  296. data/vendor/libgit2/src/config_file.h +0 -73
  297. data/vendor/libgit2/src/streams/curl.c +0 -385
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70a778d31c690a9546c49bf2de625d251c624dc75e9a01171ed7922e67907699
4
- data.tar.gz: 781194f36ca5ac19cfc475b05d61aca788b76421e698e4647e172a05744bef3a
3
+ metadata.gz: 28cda5c3e68cfdf6edcf8efb20157b83af045c61009b9d84ef45d04307222f68
4
+ data.tar.gz: 6136a85649898880308af6d3ae92d3c3ac1802fe3b4595b826129ad4bdb9375d
5
5
  SHA512:
6
- metadata.gz: 246a7592db8403acb93af774908a97a155d283b760354818ead1caf4da87129d24a0462c919b5ead6e55a9b0af979e0b212bb4775d321ac136dfe8d1f9e38bc6
7
- data.tar.gz: 72ccb7c78702e23f96df9e1f1508ff24ac4a3c518eef498a94b3598ce2f657cca80794451cee7984a2b111ad7a6cb815007f8f4da2d7e4435df48cc4db5afa31
6
+ metadata.gz: 4893ace2448d29b3945a0d45bc0770d2543dc5c40f8fafd9530fe41d9f52715f008f7c88510115bb9c1413fd5a434ef60d636f7544f96a0057fc65051a4d8efa
7
+ data.tar.gz: d3df3dad58a2405fa3da033bb5d3debb25d80f37563c342247099a390b663b807ca75b993cbde772e27d108e56b6590bfe921b3e1fcd9e64c897e97345c614af
@@ -4,6 +4,7 @@
4
4
  # For full terms see the included LICENSE file.
5
5
 
6
6
  require 'mkmf'
7
+ require 'timeout'
7
8
 
8
9
  RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
9
10
 
@@ -23,6 +24,26 @@ def sys(cmd)
23
24
  ret
24
25
  end
25
26
 
27
+ # Thrown when we detect CMake is taking too long and we killed it
28
+ class CMakeTimeout < StandardError
29
+ end
30
+
31
+ def self.run_cmake(timeout, args)
32
+ # Set to process group so we can kill it and its children
33
+ pid = Process.spawn("cmake #{args}", pgroup: true)
34
+
35
+ Timeout.timeout(timeout) do
36
+ Process.waitpid(pid)
37
+ end
38
+
39
+ rescue Timeout::Error
40
+ # Kill it, #detach is essentially a background wait, since we don't actually
41
+ # care about waiting for it now
42
+ Process.kill(-9, pid)
43
+ Process.detach(pid)
44
+ raise CMakeTimeout.new("cmake has exceeded its timeout of #{timeout}s")
45
+ end
46
+
26
47
  MAKE = if Gem.win_platform?
27
48
  # On Windows, Ruby-DevKit only has 'make'.
28
49
  find_executable('make')
@@ -80,7 +101,7 @@ else
80
101
  Dir.chdir("build") do
81
102
  # On Windows, Ruby-DevKit is MSYS-based, so ensure to use MSYS Makefiles.
82
103
  generator = "-G \"MSYS Makefiles\"" if Gem.win_platform?
83
- sys("cmake .. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo #{cmake_flags.join(' ')} #{generator}")
104
+ run_cmake(5 * 60, ".. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo #{cmake_flags.join(' ')} #{generator}")
84
105
  sys(MAKE)
85
106
 
86
107
  # "normal" libraries (and libgit2 builds) get all these when they build but we're doing it
@@ -88,7 +109,7 @@ else
88
109
  # in $LIBS or the final linking stage won't pick them up
89
110
  if Gem.win_platform?
90
111
  $LDFLAGS << " " + "-L#{Dir.pwd}/deps/winhttp"
91
- $LIBS << " -lwinhttp -lcrypt32 -lrpcrt4 -lole32 -lz"
112
+ $LIBS << " -lwinhttp -lcrypt32 -lrpcrt4 -lole32 -lz -lssh2"
92
113
  else
93
114
  pcfile = File.join(LIBGIT2_DIR, "build", "libgit2.pc")
94
115
  $LDFLAGS << " " + `pkg-config --libs --static #{pcfile}`.strip
@@ -210,7 +210,7 @@ static VALUE rb_git_prettify_message(int argc, VALUE *argv, VALUE self)
210
210
  if (!error)
211
211
  result = rb_enc_str_new(message.ptr, message.size, rb_utf8_encoding());
212
212
 
213
- git_buf_free(&message);
213
+ git_buf_dispose(&message);
214
214
  rugged_exception_check(error);
215
215
 
216
216
  return result;
@@ -515,6 +515,48 @@ VALUE rb_merge_file_result_fromC(const git_merge_file_result *result)
515
515
  return rb_result;
516
516
  }
517
517
 
518
+ static VALUE rb_git_path_is_dotgit_modules(VALUE self, VALUE rb_path)
519
+ {
520
+ const char *path;
521
+ int is_dotgit;
522
+
523
+ Check_Type(rb_path, T_STRING);
524
+
525
+ path = StringValueCStr(rb_path);
526
+
527
+ is_dotgit = git_path_is_gitfile(path, strlen(path), GIT_PATH_GITFILE_GITMODULES, GIT_PATH_FS_GENERIC);
528
+
529
+ return is_dotgit ? Qtrue : Qfalse;
530
+ }
531
+
532
+ static VALUE rb_git_path_is_dotgit_ignore(VALUE self, VALUE rb_path)
533
+ {
534
+ const char *path;
535
+ int is_dotgit;
536
+
537
+ Check_Type(rb_path, T_STRING);
538
+
539
+ path = StringValueCStr(rb_path);
540
+
541
+ is_dotgit = git_path_is_gitfile(path, strlen(path), GIT_PATH_GITFILE_GITIGNORE, GIT_PATH_FS_GENERIC);
542
+
543
+ return is_dotgit ? Qtrue : Qfalse;
544
+ }
545
+
546
+ static VALUE rb_git_path_is_dotgit_attributes(VALUE self, VALUE rb_path)
547
+ {
548
+ const char *path;
549
+ int is_dotgit;
550
+
551
+ Check_Type(rb_path, T_STRING);
552
+
553
+ path = StringValueCStr(rb_path);
554
+
555
+ is_dotgit = git_path_is_gitfile(path, strlen(path), GIT_PATH_GITFILE_GITATTRIBUTES, GIT_PATH_FS_GENERIC);
556
+
557
+ return is_dotgit ? Qtrue : Qfalse;
558
+ }
559
+
518
560
  void Init_rugged(void)
519
561
  {
520
562
  rb_mRugged = rb_define_module("Rugged");
@@ -544,6 +586,9 @@ void Init_rugged(void)
544
586
  rb_define_module_function(rb_mRugged, "prettify_message", rb_git_prettify_message, -1);
545
587
  rb_define_module_function(rb_mRugged, "__cache_usage__", rb_git_cache_usage, 0);
546
588
  rb_define_module_function(rb_mRugged, "signature_from_buffer", rb_git_signature_from_buffer, -1);
589
+ rb_define_module_function(rb_mRugged, "dotgit_modules?", rb_git_path_is_dotgit_modules, 1);
590
+ rb_define_module_function(rb_mRugged, "dotgit_ignore?", rb_git_path_is_dotgit_ignore, 1);
591
+ rb_define_module_function(rb_mRugged, "dotgit_attributes?", rb_git_path_is_dotgit_attributes, 1);
547
592
 
548
593
  Init_rugged_reference();
549
594
  Init_rugged_reference_collection();
@@ -604,7 +649,8 @@ void Init_rugged(void)
604
649
  */
605
650
  rb_define_const(rb_mRugged, "SORT_REVERSE", INT2FIX(GIT_SORT_REVERSE));
606
651
 
607
- /* Initialize libgit2 */
652
+ /* Set the allocator and initialize libgit2 */
653
+ rugged_set_allocator();
608
654
  git_libgit2_init();
609
655
 
610
656
  /* Hook a global object to cleanup the library
@@ -20,9 +20,12 @@
20
20
  #include <ruby/encoding.h>
21
21
  #endif
22
22
 
23
+ #include <ruby/util.h>
24
+
23
25
  #include <assert.h>
24
26
  #include <git2.h>
25
27
  #include <git2/odb_backend.h>
28
+ #include <git2/sys/path.h>
26
29
 
27
30
  #define rb_str_new_utf8(str) rb_enc_str_new(str, strlen(str), rb_utf8_encoding())
28
31
  #define CSTR2SYM(s) (ID2SYM(rb_intern((s))))
@@ -173,4 +176,6 @@ typedef struct _rugged_backend {
173
176
  int (* refdb_backend)(git_refdb_backend **backend_out, struct _rugged_backend *backend, const char* path);
174
177
  } rugged_backend;
175
178
 
179
+ extern void rugged_set_allocator(void);
180
+
176
181
  #endif
@@ -0,0 +1,89 @@
1
+ /*
2
+ * Copyright (C) the Rugged contributors. All rights reserved.
3
+ *
4
+ * This file is part of Rugged, distributed under the MIT license.
5
+ * For full terms see the included LICENSE file.
6
+ */
7
+
8
+ #include "rugged.h"
9
+ #include <git2/sys/alloc.h>
10
+
11
+ static void *rugged_gmalloc(size_t n, const char *file, int line)
12
+ {
13
+ return xmalloc(n);
14
+ }
15
+
16
+ static void *rugged_gcalloc(size_t nelem, size_t elsize, const char *file, int line)
17
+ {
18
+ return xcalloc(nelem, elsize);
19
+ }
20
+
21
+ static char *rugged_gstrdup(const char *str, const char *file, int line)
22
+ {
23
+ return ruby_strdup(str);
24
+ }
25
+
26
+ static char *rugged_gstrndup(const char *str, size_t n, const char *file, int line)
27
+ {
28
+ size_t len;
29
+ char *newstr;
30
+
31
+ len = strnlen(str, n);
32
+ if (len < n)
33
+ n = len;
34
+
35
+ newstr = xmalloc(n+1);
36
+ memcpy(newstr, str, n);
37
+ newstr[n] = '\0';
38
+
39
+ return newstr;
40
+ }
41
+
42
+ static char *rugged_gsubstrdup(const char *str, size_t n, const char *file, int line)
43
+ {
44
+ char *newstr;
45
+
46
+ newstr = xmalloc(n+1);
47
+ memcpy(newstr, str, n);
48
+ newstr[n] = '\0';
49
+
50
+ return newstr;
51
+ }
52
+
53
+ static void *rugged_grealloc(void *ptr, size_t size, const char *file, int line)
54
+ {
55
+ return xrealloc(ptr, size);
56
+ }
57
+
58
+ static void *rugged_greallocarray(void *ptr, size_t nelem, size_t elsize, const char *file, int line)
59
+ {
60
+ return xrealloc2(ptr, nelem, elsize);
61
+ }
62
+
63
+ static void *rugged_gmallocarray(size_t nelem, size_t elsize, const char *file, int line)
64
+ {
65
+ return xmalloc2(nelem, elsize);
66
+ }
67
+
68
+ static void rugged_gfree(void *ptr)
69
+ {
70
+ xfree(ptr);
71
+ }
72
+
73
+ void rugged_set_allocator(void)
74
+ {
75
+ git_allocator allocator;
76
+
77
+ allocator.gmalloc = rugged_gmalloc;
78
+ allocator.gcalloc = rugged_gcalloc;
79
+ allocator.gstrdup = rugged_gstrdup;
80
+ allocator.gstrndup = rugged_gstrndup;
81
+ allocator.gstrndup = rugged_gstrndup;
82
+ allocator.gsubstrdup = rugged_gsubstrdup;
83
+ allocator.grealloc = rugged_grealloc;
84
+ allocator.greallocarray = rugged_greallocarray;
85
+ allocator.gmallocarray = rugged_gmallocarray;
86
+ allocator.gfree = rugged_gfree;
87
+
88
+ git_libgit2_opts(GIT_OPT_SET_ALLOCATOR, &allocator);
89
+ }
@@ -165,7 +165,7 @@ static VALUE rb_git_blob_from_workdir(VALUE self, VALUE rb_repo, VALUE rb_path)
165
165
  git_oid oid;
166
166
  git_repository *repo;
167
167
 
168
- Check_Type(rb_path, T_STRING);
168
+ FilePathValue(rb_path);
169
169
  rugged_check_repo(rb_repo);
170
170
 
171
171
  Data_Get_Struct(rb_repo, git_repository, repo);
@@ -193,7 +193,7 @@ static VALUE rb_git_blob_from_disk(VALUE self, VALUE rb_repo, VALUE rb_path)
193
193
  git_oid oid;
194
194
  git_repository *repo;
195
195
 
196
- Check_Type(rb_path, T_STRING);
196
+ FilePathValue(rb_path);
197
197
  rugged_check_repo(rb_repo);
198
198
 
199
199
  Data_Get_Struct(rb_repo, git_repository, repo);
@@ -254,7 +254,7 @@ static VALUE rb_git_blob_from_io(int argc, VALUE *argv, VALUE klass)
254
254
  Data_Get_Struct(rb_repo, git_repository, repo);
255
255
 
256
256
  if (!NIL_P(rb_hint_path)) {
257
- Check_Type(rb_hint_path, T_STRING);
257
+ FilePathValue(rb_hint_path);
258
258
  hint_path = StringValueCStr(rb_hint_path);
259
259
  }
260
260
 
@@ -63,7 +63,7 @@ static VALUE rb_git_branch__remote_name(VALUE rb_repo, const char *canonical_nam
63
63
  if ((error = git_branch_remote_name(&remote_name, repo, canonical_name)) == GIT_OK)
64
64
  result = rb_enc_str_new(remote_name.ptr, remote_name.size, rb_utf8_encoding());
65
65
 
66
- git_buf_free(&remote_name);
66
+ git_buf_dispose(&remote_name);
67
67
  rugged_exception_check(error);
68
68
 
69
69
  return result;
@@ -649,7 +649,7 @@ static VALUE rb_git_commit_to_mbox(int argc, VALUE *argv, VALUE self)
649
649
  cleanup:
650
650
 
651
651
  xfree(opts.pathspec.strings);
652
- git_buf_free(&email_patch);
652
+ git_buf_dispose(&email_patch);
653
653
  rugged_exception_check(error);
654
654
 
655
655
  return rb_email_patch;
@@ -678,7 +678,7 @@ static VALUE rb_git_commit_header_field(VALUE self, VALUE rb_field)
678
678
  error = git_commit_header_field(&header_field, commit, StringValueCStr(rb_field));
679
679
 
680
680
  if (error < 0) {
681
- git_buf_free(&header_field);
681
+ git_buf_dispose(&header_field);
682
682
  if (error == GIT_ENOTFOUND)
683
683
  return Qnil;
684
684
  rugged_exception_check(error);
@@ -689,7 +689,7 @@ static VALUE rb_git_commit_header_field(VALUE self, VALUE rb_field)
689
689
  encoding = rb_enc_find(encoding_name);
690
690
 
691
691
  rb_result = rb_enc_str_new(header_field.ptr, header_field.size, encoding);
692
- git_buf_free(&header_field);
692
+ git_buf_dispose(&header_field);
693
693
  return rb_result;
694
694
  }
695
695
 
@@ -741,8 +741,8 @@ static VALUE rb_git_commit_extract_signature(int argc, VALUE *argv, VALUE self)
741
741
  field = NIL_P(rb_field) ? NULL : StringValueCStr(rb_field);
742
742
  error = git_commit_extract_signature(&signature, &signed_data, repo, &commit_id, field);
743
743
  if (error < 0) {
744
- git_buf_free(&signature);
745
- git_buf_free(&signed_data);
744
+ git_buf_dispose(&signature);
745
+ git_buf_dispose(&signed_data);
746
746
  }
747
747
 
748
748
  if (error == GIT_ENOTFOUND && giterr_last()->klass == GITERR_OBJECT ) {
@@ -754,8 +754,8 @@ static VALUE rb_git_commit_extract_signature(int argc, VALUE *argv, VALUE self)
754
754
  rb_str_new(signed_data.ptr, signed_data.size));
755
755
  }
756
756
 
757
- git_buf_free(&signature);
758
- git_buf_free(&signed_data);
757
+ git_buf_dispose(&signature);
758
+ git_buf_dispose(&signed_data);
759
759
 
760
760
  return ret;
761
761
  }
@@ -821,7 +821,7 @@ cleanup:
821
821
  rugged_exception_check(error);
822
822
 
823
823
  ret = rb_str_new_utf8(buf.ptr);
824
- git_buf_free(&buf);
824
+ git_buf_dispose(&buf);
825
825
 
826
826
  return ret;
827
827
  }
@@ -89,7 +89,7 @@ static VALUE rb_git_config_get(VALUE self, VALUE rb_key)
89
89
 
90
90
  rugged_exception_check(error);
91
91
  rb_result = rb_str_new_utf8(buf.ptr);
92
- git_buf_free(&buf);
92
+ git_buf_dispose(&buf);
93
93
 
94
94
  return rb_result;
95
95
  }
@@ -6,6 +6,7 @@
6
6
  */
7
7
 
8
8
  #include "rugged.h"
9
+ #include <ruby/thread.h>
9
10
 
10
11
  extern VALUE rb_mRugged;
11
12
  VALUE rb_cRuggedDiff;
@@ -197,6 +198,20 @@ static int diff_print_cb(
197
198
  return GIT_OK;
198
199
  }
199
200
 
201
+ struct nogvl_diff_patch_args {
202
+ git_diff * diff;
203
+ git_diff_format_t format;
204
+ VALUE rb_str;
205
+ };
206
+
207
+ static void rb_git_diff_patch_nogvl(void * _args)
208
+ {
209
+ struct nogvl_diff_patch_args * args;
210
+
211
+ args = (struct nogvl_diff_patch_args *)_args;
212
+ git_diff_print(args->diff, args->format, diff_print_cb, (void*) args->rb_str);
213
+ }
214
+
200
215
  /*
201
216
  * call-seq:
202
217
  * diff.patch -> patch
@@ -209,6 +224,8 @@ static VALUE rb_git_diff_patch(int argc, VALUE *argv, VALUE self)
209
224
  git_diff *diff;
210
225
  VALUE rb_str = rb_str_new(NULL, 0);
211
226
  VALUE rb_opts;
227
+ struct nogvl_diff_patch_args args;
228
+ git_diff_format_t format = GIT_DIFF_FORMAT_PATCH;
212
229
 
213
230
  rb_scan_args(argc, argv, "00:", &rb_opts);
214
231
 
@@ -216,13 +233,16 @@ static VALUE rb_git_diff_patch(int argc, VALUE *argv, VALUE self)
216
233
 
217
234
  if (!NIL_P(rb_opts)) {
218
235
  if (rb_hash_aref(rb_opts, CSTR2SYM("compact")) == Qtrue)
219
- git_diff_print(diff, GIT_DIFF_FORMAT_NAME_STATUS, diff_print_cb, (void*)rb_str);
236
+ format = GIT_DIFF_FORMAT_NAME_STATUS;
220
237
  else
221
- git_diff_print(diff, GIT_DIFF_FORMAT_PATCH, diff_print_cb, (void*)rb_str);
222
- } else {
223
- git_diff_print(diff, GIT_DIFF_FORMAT_PATCH, diff_print_cb, (void*)rb_str);
238
+ format = GIT_DIFF_FORMAT_PATCH;
224
239
  }
225
240
 
241
+ args.diff = diff;
242
+ args.format = format;
243
+ args.rb_str = rb_str;
244
+ rb_thread_call_without_gvl(rb_git_diff_patch_nogvl, &args, RUBY_UBF_PROCESS, NULL);
245
+
226
246
  return rb_str;
227
247
  }
228
248
 
@@ -340,7 +340,7 @@ static VALUE rb_git_note_default_ref_GET(VALUE self)
340
340
 
341
341
  rb_result = rb_enc_str_new(ref_name.ptr, ref_name.size, rb_utf8_encoding());
342
342
 
343
- git_buf_free(&ref_name);
343
+ git_buf_dispose(&ref_name);
344
344
 
345
345
  return rb_result;
346
346
  }
@@ -182,7 +182,7 @@ static void rugged_repo_new_with_backend(git_repository **repo, VALUE rb_path, V
182
182
 
183
183
  int error = 0;
184
184
 
185
- Check_Type(rb_path, T_STRING);
185
+ FilePathValue(rb_path);
186
186
  path = StringValueCStr(rb_path);
187
187
 
188
188
  if (rb_obj_is_kind_of(rb_backend, rb_cRuggedBackend) == Qfalse) {
@@ -291,7 +291,7 @@ static VALUE rb_git_repo_open_bare(int argc, VALUE *argv, VALUE klass)
291
291
  }
292
292
 
293
293
  if (!repo) {
294
- Check_Type(rb_path, T_STRING);
294
+ FilePathValue(rb_path);
295
295
 
296
296
  error = git_repository_open_bare(&repo, StringValueCStr(rb_path));
297
297
  rugged_exception_check(error);
@@ -335,7 +335,7 @@ static VALUE rb_git_repo_new(int argc, VALUE *argv, VALUE klass)
335
335
  VALUE rb_path, rb_options;
336
336
 
337
337
  rb_scan_args(argc, argv, "10:", &rb_path, &rb_options);
338
- Check_Type(rb_path, T_STRING);
338
+ FilePathValue(rb_path);
339
339
 
340
340
  error = git_repository_open(&repo, StringValueCStr(rb_path));
341
341
  rugged_exception_check(error);
@@ -377,7 +377,7 @@ static VALUE rb_git_repo_init_at(int argc, VALUE *argv, VALUE klass)
377
377
  int error;
378
378
 
379
379
  rb_scan_args(argc, argv, "11:", &rb_path, &rb_is_bare, &rb_options);
380
- Check_Type(rb_path, T_STRING);
380
+ FilePathValue(rb_path);
381
381
 
382
382
  if (!NIL_P(rb_options)) {
383
383
  /* Check for `:backend` */
@@ -474,7 +474,7 @@ static VALUE rb_git_repo_clone_at(int argc, VALUE *argv, VALUE klass)
474
474
 
475
475
  rb_scan_args(argc, argv, "21", &url, &local_path, &rb_options_hash);
476
476
  Check_Type(url, T_STRING);
477
- Check_Type(local_path, T_STRING);
477
+ FilePathValue(local_path);
478
478
 
479
479
  parse_clone_options(&options, rb_options_hash, &remote_payload);
480
480
 
@@ -1180,7 +1180,7 @@ static VALUE rb_git_repo_hashfile(VALUE self, VALUE rb_path, VALUE rb_type)
1180
1180
  int error;
1181
1181
  git_oid oid;
1182
1182
 
1183
- Check_Type(rb_path, T_STRING);
1183
+ FilePathValue(rb_path);
1184
1184
 
1185
1185
  error = git_odb_hashfile(&oid,
1186
1186
  StringValueCStr(rb_path),
@@ -1455,7 +1455,7 @@ static VALUE rb_git_repo_discover(int argc, VALUE *argv, VALUE klass)
1455
1455
  across_fs = rugged_parse_bool(rb_across_fs);
1456
1456
  }
1457
1457
 
1458
- Check_Type(rb_path, T_STRING);
1458
+ FilePathValue(rb_path);
1459
1459
 
1460
1460
  error = git_repository_discover(
1461
1461
  &repository_path,
@@ -1467,7 +1467,7 @@ static VALUE rb_git_repo_discover(int argc, VALUE *argv, VALUE klass)
1467
1467
  rugged_exception_check(error);
1468
1468
 
1469
1469
  error = git_repository_open(&repo, repository_path.ptr);
1470
- git_buf_free(&repository_path);
1470
+ git_buf_dispose(&repository_path);
1471
1471
 
1472
1472
  rugged_exception_check(error);
1473
1473
 
@@ -1518,7 +1518,7 @@ static VALUE rb_git_repo_file_status(VALUE self, VALUE rb_path)
1518
1518
  git_repository *repo;
1519
1519
 
1520
1520
  Data_Get_Struct(self, git_repository, repo);
1521
- Check_Type(rb_path, T_STRING);
1521
+ FilePathValue(rb_path);
1522
1522
  error = git_status_file(&flags, repo, StringValueCStr(rb_path));
1523
1523
  rugged_exception_check(error);
1524
1524
 
@@ -2365,7 +2365,7 @@ static VALUE rb_git_repo_attributes(int argc, VALUE *argv, VALUE self)
2365
2365
  rb_scan_args(argc, argv, "12", &rb_path, &rb_names, &rb_options);
2366
2366
 
2367
2367
  Data_Get_Struct(self, git_repository, repo);
2368
- Check_Type(rb_path, T_STRING);
2368
+ FilePathValue(rb_path);
2369
2369
 
2370
2370
  if (!NIL_P(rb_options)) {
2371
2371
  Check_Type(rb_options, T_FIXNUM);