rugged 0.27.10.1 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
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);