rugged 0.28.5 → 0.99.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (379) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +3 -1
  3. data/ext/rugged/rugged.c +35 -31
  4. data/ext/rugged/rugged.h +13 -0
  5. data/ext/rugged/rugged_blob.c +11 -9
  6. data/ext/rugged/rugged_commit.c +17 -15
  7. data/ext/rugged/rugged_diff.c +4 -26
  8. data/ext/rugged/rugged_index.c +4 -2
  9. data/ext/rugged/rugged_note.c +5 -3
  10. data/ext/rugged/rugged_object.c +57 -10
  11. data/ext/rugged/rugged_rebase.c +3 -1
  12. data/ext/rugged/rugged_remote.c +0 -6
  13. data/ext/rugged/rugged_repo.c +222 -17
  14. data/ext/rugged/rugged_tag.c +8 -6
  15. data/ext/rugged/rugged_tree.c +18 -16
  16. data/lib/rugged/version.rb +1 -1
  17. data/vendor/libgit2/CMakeLists.txt +38 -19
  18. data/vendor/libgit2/COPYING +28 -0
  19. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +5 -1
  20. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  21. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  22. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  23. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  24. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  25. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  26. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  27. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +110 -0
  28. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +53 -0
  29. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +124 -0
  30. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +66 -0
  31. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  32. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +21 -0
  33. data/vendor/libgit2/deps/ntlmclient/compat.h +33 -0
  34. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  35. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  36. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  37. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  38. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  39. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  40. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  41. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1422 -0
  42. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  43. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  44. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  45. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  46. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  47. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  48. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  49. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  50. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  51. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  52. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  53. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  54. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  55. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  56. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  57. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  58. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  59. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  60. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  61. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  62. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  63. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  64. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  65. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  66. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  67. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  68. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  69. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  70. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  71. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  72. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  73. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  74. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  75. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  76. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  77. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  78. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  79. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  80. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  81. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  82. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  83. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  84. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  85. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  86. data/vendor/libgit2/include/git2.h +2 -0
  87. data/vendor/libgit2/include/git2/apply.h +22 -2
  88. data/vendor/libgit2/include/git2/attr.h +23 -13
  89. data/vendor/libgit2/include/git2/blame.h +2 -2
  90. data/vendor/libgit2/include/git2/blob.h +44 -12
  91. data/vendor/libgit2/include/git2/branch.h +74 -57
  92. data/vendor/libgit2/include/git2/buffer.h +20 -14
  93. data/vendor/libgit2/include/git2/cert.h +135 -0
  94. data/vendor/libgit2/include/git2/checkout.h +46 -14
  95. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  96. data/vendor/libgit2/include/git2/clone.h +2 -2
  97. data/vendor/libgit2/include/git2/commit.h +23 -1
  98. data/vendor/libgit2/include/git2/common.h +15 -6
  99. data/vendor/libgit2/include/git2/config.h +12 -12
  100. data/vendor/libgit2/include/git2/cred_helpers.h +4 -42
  101. data/vendor/libgit2/include/git2/credential.h +314 -0
  102. data/vendor/libgit2/include/git2/credential_helpers.h +52 -0
  103. data/vendor/libgit2/include/git2/deprecated.h +314 -3
  104. data/vendor/libgit2/include/git2/describe.h +4 -4
  105. data/vendor/libgit2/include/git2/diff.h +16 -14
  106. data/vendor/libgit2/include/git2/errors.h +4 -2
  107. data/vendor/libgit2/include/git2/filter.h +8 -0
  108. data/vendor/libgit2/include/git2/index.h +2 -1
  109. data/vendor/libgit2/include/git2/indexer.h +48 -4
  110. data/vendor/libgit2/include/git2/merge.h +6 -10
  111. data/vendor/libgit2/include/git2/net.h +0 -5
  112. data/vendor/libgit2/include/git2/object.h +2 -14
  113. data/vendor/libgit2/include/git2/odb.h +3 -2
  114. data/vendor/libgit2/include/git2/odb_backend.h +5 -4
  115. data/vendor/libgit2/include/git2/oid.h +11 -6
  116. data/vendor/libgit2/include/git2/pack.h +12 -1
  117. data/vendor/libgit2/include/git2/proxy.h +6 -4
  118. data/vendor/libgit2/include/git2/rebase.h +46 -2
  119. data/vendor/libgit2/include/git2/refs.h +19 -0
  120. data/vendor/libgit2/include/git2/remote.h +40 -15
  121. data/vendor/libgit2/include/git2/repository.h +24 -2
  122. data/vendor/libgit2/include/git2/revert.h +1 -1
  123. data/vendor/libgit2/include/git2/revwalk.h +7 -3
  124. data/vendor/libgit2/include/git2/stash.h +4 -4
  125. data/vendor/libgit2/include/git2/status.h +25 -16
  126. data/vendor/libgit2/include/git2/submodule.h +20 -3
  127. data/vendor/libgit2/include/git2/sys/alloc.h +9 -9
  128. data/vendor/libgit2/include/git2/sys/cred.h +15 -0
  129. data/vendor/libgit2/include/git2/sys/credential.h +90 -0
  130. data/vendor/libgit2/include/git2/sys/index.h +4 -2
  131. data/vendor/libgit2/include/git2/sys/mempack.h +2 -1
  132. data/vendor/libgit2/include/git2/sys/merge.h +1 -1
  133. data/vendor/libgit2/include/git2/sys/odb_backend.h +48 -4
  134. data/vendor/libgit2/include/git2/sys/refdb_backend.h +57 -21
  135. data/vendor/libgit2/include/git2/sys/repository.h +17 -6
  136. data/vendor/libgit2/include/git2/sys/transport.h +4 -4
  137. data/vendor/libgit2/include/git2/tag.h +11 -2
  138. data/vendor/libgit2/include/git2/trace.h +2 -2
  139. data/vendor/libgit2/include/git2/transport.h +11 -340
  140. data/vendor/libgit2/include/git2/tree.h +5 -3
  141. data/vendor/libgit2/include/git2/types.h +4 -89
  142. data/vendor/libgit2/include/git2/version.h +4 -4
  143. data/vendor/libgit2/include/git2/worktree.h +5 -5
  144. data/vendor/libgit2/src/CMakeLists.txt +89 -224
  145. data/vendor/libgit2/src/alloc.c +2 -14
  146. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +3 -4
  147. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  148. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  149. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  150. data/vendor/libgit2/src/apply.c +31 -15
  151. data/vendor/libgit2/src/attr.c +70 -64
  152. data/vendor/libgit2/src/attr_file.c +189 -96
  153. data/vendor/libgit2/src/attr_file.h +9 -9
  154. data/vendor/libgit2/src/attrcache.c +47 -47
  155. data/vendor/libgit2/src/attrcache.h +2 -1
  156. data/vendor/libgit2/src/blame.c +17 -5
  157. data/vendor/libgit2/src/blame.h +1 -1
  158. data/vendor/libgit2/src/blame_git.c +21 -7
  159. data/vendor/libgit2/src/blob.c +81 -17
  160. data/vendor/libgit2/src/blob.h +2 -2
  161. data/vendor/libgit2/src/branch.c +60 -32
  162. data/vendor/libgit2/src/buffer.c +5 -0
  163. data/vendor/libgit2/src/buffer.h +1 -0
  164. data/vendor/libgit2/src/cache.c +26 -33
  165. data/vendor/libgit2/src/cache.h +1 -1
  166. data/vendor/libgit2/src/cc-compat.h +5 -0
  167. data/vendor/libgit2/src/checkout.c +26 -16
  168. data/vendor/libgit2/src/cherrypick.c +7 -1
  169. data/vendor/libgit2/src/clone.c +29 -7
  170. data/vendor/libgit2/src/clone.h +4 -0
  171. data/vendor/libgit2/src/commit.c +70 -22
  172. data/vendor/libgit2/src/commit.h +6 -0
  173. data/vendor/libgit2/src/commit_list.c +28 -76
  174. data/vendor/libgit2/src/commit_list.h +2 -2
  175. data/vendor/libgit2/src/common.h +3 -75
  176. data/vendor/libgit2/src/config.c +31 -40
  177. data/vendor/libgit2/src/config.h +7 -6
  178. data/vendor/libgit2/src/config_backend.h +12 -0
  179. data/vendor/libgit2/src/config_cache.c +39 -39
  180. data/vendor/libgit2/src/config_entries.c +69 -99
  181. data/vendor/libgit2/src/config_entries.h +1 -0
  182. data/vendor/libgit2/src/config_file.c +337 -380
  183. data/vendor/libgit2/src/config_mem.c +12 -16
  184. data/vendor/libgit2/src/config_parse.c +49 -29
  185. data/vendor/libgit2/src/config_parse.h +13 -12
  186. data/vendor/libgit2/src/config_snapshot.c +206 -0
  187. data/vendor/libgit2/src/crlf.c +14 -14
  188. data/vendor/libgit2/src/describe.c +21 -20
  189. data/vendor/libgit2/src/diff.c +43 -66
  190. data/vendor/libgit2/src/diff.h +4 -3
  191. data/vendor/libgit2/src/diff_driver.c +37 -38
  192. data/vendor/libgit2/src/diff_file.c +12 -10
  193. data/vendor/libgit2/src/diff_file.h +2 -2
  194. data/vendor/libgit2/src/diff_generate.c +26 -26
  195. data/vendor/libgit2/src/diff_generate.h +2 -2
  196. data/vendor/libgit2/src/diff_parse.c +1 -1
  197. data/vendor/libgit2/src/diff_print.c +25 -13
  198. data/vendor/libgit2/src/diff_stats.c +1 -1
  199. data/vendor/libgit2/src/diff_tform.c +11 -11
  200. data/vendor/libgit2/src/errors.c +21 -25
  201. data/vendor/libgit2/src/errors.h +81 -0
  202. data/vendor/libgit2/src/features.h.in +9 -2
  203. data/vendor/libgit2/src/fetch.c +7 -2
  204. data/vendor/libgit2/src/fetchhead.c +9 -9
  205. data/vendor/libgit2/src/filebuf.c +1 -1
  206. data/vendor/libgit2/src/filebuf.h +1 -1
  207. data/vendor/libgit2/src/filter.c +16 -8
  208. data/vendor/libgit2/src/{fileops.c → futils.c} +20 -17
  209. data/vendor/libgit2/src/{fileops.h → futils.h} +5 -5
  210. data/vendor/libgit2/src/hash.c +61 -0
  211. data/vendor/libgit2/src/hash.h +19 -21
  212. data/vendor/libgit2/src/hash/sha1.h +38 -0
  213. data/vendor/libgit2/src/hash/{hash_collisiondetect.h → sha1/collisiondetect.c} +14 -17
  214. data/vendor/libgit2/src/hash/sha1/collisiondetect.h +19 -0
  215. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +15 -19
  216. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  217. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  218. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -14
  219. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  220. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -11
  221. data/vendor/libgit2/src/hash/{hash_openssl.h → sha1/openssl.c} +14 -18
  222. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  223. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  224. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  225. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  226. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
  227. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +34 -24
  228. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  229. data/vendor/libgit2/src/hashsig.c +1 -1
  230. data/vendor/libgit2/src/idxmap.c +91 -65
  231. data/vendor/libgit2/src/idxmap.h +151 -15
  232. data/vendor/libgit2/src/ignore.c +26 -35
  233. data/vendor/libgit2/src/index.c +103 -81
  234. data/vendor/libgit2/src/index.h +1 -1
  235. data/vendor/libgit2/src/indexer.c +69 -70
  236. data/vendor/libgit2/src/integer.h +11 -4
  237. data/vendor/libgit2/src/iterator.c +32 -28
  238. data/vendor/libgit2/src/iterator.h +8 -8
  239. data/vendor/libgit2/src/map.h +1 -1
  240. data/vendor/libgit2/src/merge.c +55 -41
  241. data/vendor/libgit2/src/merge.h +2 -2
  242. data/vendor/libgit2/src/merge_driver.c +5 -5
  243. data/vendor/libgit2/src/merge_file.c +1 -1
  244. data/vendor/libgit2/src/mwindow.c +18 -23
  245. data/vendor/libgit2/src/mwindow.h +4 -4
  246. data/vendor/libgit2/src/net.c +411 -0
  247. data/vendor/libgit2/src/net.h +57 -0
  248. data/vendor/libgit2/src/netops.c +6 -222
  249. data/vendor/libgit2/src/netops.h +1 -37
  250. data/vendor/libgit2/src/notes.c +2 -2
  251. data/vendor/libgit2/src/object.c +3 -3
  252. data/vendor/libgit2/src/object.h +2 -0
  253. data/vendor/libgit2/src/odb.c +41 -23
  254. data/vendor/libgit2/src/odb.h +3 -2
  255. data/vendor/libgit2/src/odb_loose.c +17 -10
  256. data/vendor/libgit2/src/odb_mempack.c +13 -24
  257. data/vendor/libgit2/src/odb_pack.c +4 -4
  258. data/vendor/libgit2/src/offmap.c +43 -55
  259. data/vendor/libgit2/src/offmap.h +102 -24
  260. data/vendor/libgit2/src/oid.c +19 -8
  261. data/vendor/libgit2/src/oidmap.c +39 -57
  262. data/vendor/libgit2/src/oidmap.h +99 -19
  263. data/vendor/libgit2/src/pack-objects.c +25 -32
  264. data/vendor/libgit2/src/pack-objects.h +1 -1
  265. data/vendor/libgit2/src/pack.c +97 -129
  266. data/vendor/libgit2/src/pack.h +15 -18
  267. data/vendor/libgit2/src/parse.c +10 -0
  268. data/vendor/libgit2/src/parse.h +3 -3
  269. data/vendor/libgit2/src/patch.c +1 -1
  270. data/vendor/libgit2/src/patch_generate.c +1 -1
  271. data/vendor/libgit2/src/patch_parse.c +30 -9
  272. data/vendor/libgit2/src/path.c +43 -6
  273. data/vendor/libgit2/src/path.h +2 -0
  274. data/vendor/libgit2/src/pathspec.c +14 -14
  275. data/vendor/libgit2/src/pool.c +26 -22
  276. data/vendor/libgit2/src/pool.h +7 -7
  277. data/vendor/libgit2/src/posix.c +7 -7
  278. data/vendor/libgit2/src/posix.h +12 -1
  279. data/vendor/libgit2/src/proxy.c +7 -2
  280. data/vendor/libgit2/src/push.c +10 -5
  281. data/vendor/libgit2/src/reader.c +2 -2
  282. data/vendor/libgit2/src/rebase.c +87 -28
  283. data/vendor/libgit2/src/refdb.c +12 -0
  284. data/vendor/libgit2/src/refdb_fs.c +215 -169
  285. data/vendor/libgit2/src/reflog.c +11 -13
  286. data/vendor/libgit2/src/refs.c +34 -23
  287. data/vendor/libgit2/src/refs.h +8 -1
  288. data/vendor/libgit2/src/refspec.c +9 -16
  289. data/vendor/libgit2/src/regexp.c +221 -0
  290. data/vendor/libgit2/src/regexp.h +97 -0
  291. data/vendor/libgit2/src/remote.c +57 -55
  292. data/vendor/libgit2/src/remote.h +2 -2
  293. data/vendor/libgit2/src/repository.c +120 -103
  294. data/vendor/libgit2/src/repository.h +49 -40
  295. data/vendor/libgit2/src/revert.c +6 -1
  296. data/vendor/libgit2/src/revparse.c +18 -19
  297. data/vendor/libgit2/src/revwalk.c +71 -33
  298. data/vendor/libgit2/src/revwalk.h +20 -0
  299. data/vendor/libgit2/src/settings.c +13 -1
  300. data/vendor/libgit2/src/sortedcache.c +12 -26
  301. data/vendor/libgit2/src/sortedcache.h +1 -1
  302. data/vendor/libgit2/src/stash.c +45 -65
  303. data/vendor/libgit2/src/status.c +17 -11
  304. data/vendor/libgit2/src/streams/openssl.c +53 -1
  305. data/vendor/libgit2/src/streams/socket.c +2 -2
  306. data/vendor/libgit2/src/strmap.c +37 -84
  307. data/vendor/libgit2/src/strmap.h +105 -33
  308. data/vendor/libgit2/src/submodule.c +151 -126
  309. data/vendor/libgit2/src/submodule.h +1 -1
  310. data/vendor/libgit2/src/tag.c +10 -2
  311. data/vendor/libgit2/src/trace.c +1 -1
  312. data/vendor/libgit2/src/trace.h +3 -3
  313. data/vendor/libgit2/src/trailer.c +46 -32
  314. data/vendor/libgit2/src/transaction.c +3 -8
  315. data/vendor/libgit2/src/transports/auth.c +16 -15
  316. data/vendor/libgit2/src/transports/auth.h +18 -11
  317. data/vendor/libgit2/src/transports/auth_negotiate.c +64 -33
  318. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  319. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  320. data/vendor/libgit2/src/transports/auth_ntlm.h +38 -0
  321. data/vendor/libgit2/src/transports/credential.c +476 -0
  322. data/vendor/libgit2/src/transports/{cred_helpers.c → credential_helpers.c} +21 -8
  323. data/vendor/libgit2/src/transports/git.c +11 -16
  324. data/vendor/libgit2/src/transports/http.c +488 -1248
  325. data/vendor/libgit2/src/transports/http.h +4 -1
  326. data/vendor/libgit2/src/transports/httpclient.c +1526 -0
  327. data/vendor/libgit2/src/transports/httpclient.h +190 -0
  328. data/vendor/libgit2/src/transports/local.c +10 -10
  329. data/vendor/libgit2/src/transports/smart.c +19 -19
  330. data/vendor/libgit2/src/transports/smart.h +3 -3
  331. data/vendor/libgit2/src/transports/smart_protocol.c +40 -64
  332. data/vendor/libgit2/src/transports/ssh.c +77 -59
  333. data/vendor/libgit2/src/transports/winhttp.c +266 -241
  334. data/vendor/libgit2/src/tree-cache.c +14 -7
  335. data/vendor/libgit2/src/tree.c +16 -26
  336. data/vendor/libgit2/src/unix/map.c +1 -1
  337. data/vendor/libgit2/src/unix/posix.h +2 -12
  338. data/vendor/libgit2/src/userdiff.h +3 -1
  339. data/vendor/libgit2/src/util.c +51 -53
  340. data/vendor/libgit2/src/util.h +16 -21
  341. data/vendor/libgit2/src/wildmatch.c +320 -0
  342. data/vendor/libgit2/src/wildmatch.h +23 -0
  343. data/vendor/libgit2/src/win32/map.c +3 -5
  344. data/vendor/libgit2/src/win32/path_w32.c +12 -2
  345. data/vendor/libgit2/src/win32/path_w32.h +0 -29
  346. data/vendor/libgit2/src/win32/posix.h +1 -4
  347. data/vendor/libgit2/src/win32/posix_w32.c +48 -5
  348. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  349. data/vendor/libgit2/src/win32/thread.c +5 -5
  350. data/vendor/libgit2/src/win32/w32_buffer.c +7 -3
  351. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  352. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +0 -93
  353. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  354. data/vendor/libgit2/src/win32/w32_stack.c +4 -9
  355. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  356. data/vendor/libgit2/src/win32/w32_util.c +31 -0
  357. data/vendor/libgit2/src/win32/w32_util.h +6 -32
  358. data/vendor/libgit2/src/worktree.c +36 -22
  359. data/vendor/libgit2/src/xdiff/xdiffi.c +1 -1
  360. data/vendor/libgit2/src/xdiff/xmerge.c +12 -0
  361. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  362. data/vendor/libgit2/src/zstream.c +5 -0
  363. data/vendor/libgit2/src/zstream.h +1 -0
  364. metadata +108 -38
  365. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  366. data/vendor/libgit2/deps/regex/COPYING +0 -502
  367. data/vendor/libgit2/deps/regex/config.h +0 -7
  368. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  369. data/vendor/libgit2/deps/regex/regex.c +0 -92
  370. data/vendor/libgit2/deps/regex/regex.h +0 -582
  371. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  372. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  373. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  374. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  375. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  376. data/vendor/libgit2/libgit2.pc.in +0 -13
  377. data/vendor/libgit2/src/fnmatch.c +0 -248
  378. data/vendor/libgit2/src/fnmatch.h +0 -48
  379. data/vendor/libgit2/src/transports/cred.c +0 -390
@@ -16,6 +16,8 @@ extern VALUE rb_cRuggedRepo;
16
16
 
17
17
  VALUE rb_cRuggedObject;
18
18
 
19
+ const rb_data_type_t rugged_object_type;
20
+
19
21
  git_otype rugged_otype_get(VALUE self)
20
22
  {
21
23
  git_otype type = GIT_OBJ_BAD;
@@ -74,7 +76,7 @@ int rugged_oid_get(git_oid *oid, git_repository *repo, VALUE p)
74
76
  int error;
75
77
 
76
78
  if (rb_obj_is_kind_of(p, rb_cRuggedObject)) {
77
- Data_Get_Struct(p, git_object, object);
79
+ TypedData_Get_Struct(p, git_object, &rugged_object_type, object);
78
80
  git_oid_cpy(oid, git_object_id(object));
79
81
  } else {
80
82
  Check_Type(p, T_STRING);
@@ -100,7 +102,7 @@ git_object *rugged_object_get(git_repository *repo, VALUE object_value, git_otyp
100
102
 
101
103
  if (rb_obj_is_kind_of(object_value, rb_cRuggedObject)) {
102
104
  git_object *owned_obj = NULL;
103
- Data_Get_Struct(object_value, git_object, owned_obj);
105
+ TypedData_Get_Struct(object_value, git_object, &rugged_object_type, owned_obj);
104
106
  git_object_dup(&object, owned_obj);
105
107
  } else {
106
108
  int error;
@@ -132,11 +134,56 @@ git_object *rugged_object_get(git_repository *repo, VALUE object_value, git_otyp
132
134
  return object;
133
135
  }
134
136
 
135
- static void rb_git_object__free(git_object *object)
137
+ static void rb_git_object__free(void *data)
136
138
  {
139
+ git_object *object = (git_object *) data;
137
140
  git_object_free(object);
138
141
  }
139
142
 
143
+ static size_t rb_git_object__size(const void *data)
144
+ {
145
+ git_object *object = (git_object *) data;
146
+ size_t size = 0;
147
+
148
+ /*
149
+ * We cannot always be accurate cheaply, but we can give some numbers
150
+ * which are closer than zero by taking an average/guessed size.
151
+ */
152
+ switch (git_object_type(object)) {
153
+ case GIT_OBJ_BLOB:
154
+ {
155
+ git_blob *blob = (git_blob *) object;
156
+ size = git_blob_rawsize(blob);
157
+ break;
158
+ }
159
+ case GIT_OBJ_TREE:
160
+ {
161
+ git_tree *tree = (git_tree *) object;
162
+ size = git_tree_entrycount(tree) * 64;
163
+ break;
164
+ }
165
+ case GIT_OBJ_COMMIT:
166
+ case GIT_OBJ_TAG:
167
+ size = 256;
168
+ break;
169
+ default:
170
+ break;
171
+ }
172
+
173
+ return size;
174
+ }
175
+
176
+ const rb_data_type_t rugged_object_type = {
177
+ .wrap_struct_name = "Rugged::Object",
178
+ .function = {
179
+ .dmark = NULL,
180
+ .dfree = rb_git_object__free,
181
+ .dsize = rb_git_object__size,
182
+ },
183
+ .data = NULL,
184
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
185
+ };
186
+
140
187
  VALUE rugged_object_new(VALUE owner, git_object *object)
141
188
  {
142
189
  VALUE klass, rb_object;
@@ -164,7 +211,7 @@ VALUE rugged_object_new(VALUE owner, git_object *object)
164
211
  return Qnil; /* never reached */
165
212
  }
166
213
 
167
- rb_object = Data_Wrap_Struct(klass, NULL, &rb_git_object__free, object);
214
+ rb_object = TypedData_Wrap_Struct(klass, &rugged_object_type, object);
168
215
  rugged_set_owner(rb_object, owner);
169
216
  return rb_object;
170
217
  }
@@ -307,8 +354,8 @@ static VALUE rb_git_object_equal(VALUE self, VALUE other)
307
354
  if (!rb_obj_is_kind_of(other, rb_cRuggedObject))
308
355
  return Qfalse;
309
356
 
310
- Data_Get_Struct(self, git_object, a);
311
- Data_Get_Struct(other, git_object, b);
357
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, a);
358
+ TypedData_Get_Struct(other, git_object, &rugged_object_type, b);
312
359
 
313
360
  return git_oid_cmp(git_object_id(a), git_object_id(b)) == 0 ? Qtrue : Qfalse;
314
361
  }
@@ -321,7 +368,7 @@ static VALUE rb_git_object_equal(VALUE self, VALUE other)
321
368
  static VALUE rb_git_object_oid_GET(VALUE self)
322
369
  {
323
370
  git_object *object;
324
- Data_Get_Struct(self, git_object, object);
371
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, object);
325
372
  return rugged_create_oid(git_object_id(object));
326
373
  }
327
374
 
@@ -333,7 +380,7 @@ static VALUE rb_git_object_oid_GET(VALUE self)
333
380
  static VALUE rb_git_object_type_GET(VALUE self)
334
381
  {
335
382
  git_object *object;
336
- Data_Get_Struct(self, git_object, object);
383
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, object);
337
384
 
338
385
  return rugged_otype_new(git_object_type(object));
339
386
  }
@@ -346,14 +393,14 @@ static VALUE rb_git_object_type_GET(VALUE self)
346
393
  static VALUE rb_git_object_read_raw(VALUE self)
347
394
  {
348
395
  git_object *object;
349
- Data_Get_Struct(self, git_object, object);
396
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, object);
350
397
 
351
398
  return rugged_raw_read(git_object_owner(object), git_object_id(object));
352
399
  }
353
400
 
354
401
  void Init_rugged_object(void)
355
402
  {
356
- rb_cRuggedObject = rb_define_class_under(rb_mRugged, "Object", rb_cObject);
403
+ rb_cRuggedObject = rb_define_class_under(rb_mRugged, "Object", rb_cData);
357
404
  rb_define_singleton_method(rb_cRuggedObject, "lookup", rb_git_object_lookup, 2);
358
405
  rb_define_singleton_method(rb_cRuggedObject, "rev_parse", rb_git_object_rev_parse, 2);
359
406
  rb_define_singleton_method(rb_cRuggedObject, "rev_parse_oid", rb_git_object_rev_parse_oid, 2);
@@ -15,6 +15,8 @@ extern VALUE rb_cRuggedReference;
15
15
 
16
16
  VALUE rb_cRuggedRebase;
17
17
 
18
+ extern const rb_data_type_t rugged_object_type;
19
+
18
20
  static VALUE rebase_operation_type(git_rebase_operation *operation);
19
21
 
20
22
  static void parse_rebase_options(git_rebase_options *ret, VALUE rb_options)
@@ -70,7 +72,7 @@ static void get_annotated_commit(git_annotated_commit **annotated_commit, VALUE
70
72
  const git_commit * commit;
71
73
  const git_oid * oid;
72
74
 
73
- Data_Get_Struct(rb_value, git_commit, commit);
75
+ TypedData_Get_Struct(rb_value, git_commit, &rugged_object_type, commit);
74
76
 
75
77
  oid = git_commit_id(commit);
76
78
  error = git_annotated_commit_lookup(annotated_commit, repo, oid);
@@ -157,12 +157,6 @@ static int credentials_cb(
157
157
  return payload->exception ? GIT_ERROR : GIT_OK;
158
158
  }
159
159
 
160
- #define CALLABLE_OR_RAISE(ret, name) \
161
- do { \
162
- if (!rb_respond_to(ret, rb_intern("call"))) \
163
- rb_raise(rb_eArgError, "Expected a Proc or an object that responds to #call (:" name " )."); \
164
- } while (0);
165
-
166
160
  void rugged_remote_init_callbacks_and_payload_from_options(
167
161
  VALUE rb_options,
168
162
  git_remote_callbacks *callbacks,
@@ -10,6 +10,7 @@
10
10
  #include <git2/sys/odb_backend.h>
11
11
  #include <git2/sys/refdb_backend.h>
12
12
  #include <git2/refs.h>
13
+ #include <git2/apply.h>
13
14
 
14
15
  extern VALUE rb_mRugged;
15
16
  extern VALUE rb_eRuggedError;
@@ -18,6 +19,7 @@ extern VALUE rb_cRuggedConfig;
18
19
  extern VALUE rb_cRuggedBackend;
19
20
  extern VALUE rb_cRuggedRemote;
20
21
  extern VALUE rb_cRuggedCommit;
22
+ extern VALUE rb_cRuggedDiff;
21
23
  extern VALUE rb_cRuggedTag;
22
24
  extern VALUE rb_cRuggedTree;
23
25
  extern VALUE rb_cRuggedReference;
@@ -32,6 +34,9 @@ VALUE rb_cRuggedOdbObject;
32
34
 
33
35
  static ID id_call;
34
36
 
37
+ extern const rb_data_type_t rugged_object_type;
38
+ static const rb_data_type_t rugged_odb_object_type;
39
+
35
40
  /*
36
41
  * call-seq:
37
42
  * odb_obj.oid -> hex_oid
@@ -44,7 +49,7 @@ static ID id_call;
44
49
  static VALUE rb_git_odbobj_oid(VALUE self)
45
50
  {
46
51
  git_odb_object *obj;
47
- Data_Get_Struct(self, git_odb_object, obj);
52
+ TypedData_Get_Struct(self, git_odb_object, &rugged_odb_object_type, obj);
48
53
  return rugged_create_oid(git_odb_object_id(obj));
49
54
  }
50
55
 
@@ -62,7 +67,7 @@ static VALUE rb_git_odbobj_oid(VALUE self)
62
67
  static VALUE rb_git_odbobj_data(VALUE self)
63
68
  {
64
69
  git_odb_object *obj;
65
- Data_Get_Struct(self, git_odb_object, obj);
70
+ TypedData_Get_Struct(self, git_odb_object, &rugged_odb_object_type, obj);
66
71
  return rb_str_new(git_odb_object_data(obj), git_odb_object_size(obj));
67
72
  }
68
73
 
@@ -78,7 +83,7 @@ static VALUE rb_git_odbobj_data(VALUE self)
78
83
  static VALUE rb_git_odbobj_size(VALUE self)
79
84
  {
80
85
  git_odb_object *obj;
81
- Data_Get_Struct(self, git_odb_object, obj);
86
+ TypedData_Get_Struct(self, git_odb_object, &rugged_odb_object_type, obj);
82
87
  return INT2FIX(git_odb_object_size(obj));
83
88
  }
84
89
 
@@ -94,7 +99,7 @@ static VALUE rb_git_odbobj_size(VALUE self)
94
99
  static VALUE rb_git_odbobj_type(VALUE self)
95
100
  {
96
101
  git_odb_object *obj;
97
- Data_Get_Struct(self, git_odb_object, obj);
102
+ TypedData_Get_Struct(self, git_odb_object, &rugged_odb_object_type, obj);
98
103
  return rugged_otype_new(git_odb_object_type(obj));
99
104
  }
100
105
 
@@ -103,6 +108,24 @@ void rb_git__odbobj_free(void *obj)
103
108
  git_odb_object_free((git_odb_object *)obj);
104
109
  }
105
110
 
111
+ static size_t rb_git__odbobj_size(const void *obj)
112
+ {
113
+ return git_odb_object_size((git_odb_object *)obj);
114
+ }
115
+
116
+ static const rb_data_type_t rugged_odb_object_type = {
117
+ .wrap_struct_name = "Rugged::OdbObject",
118
+ .function = {
119
+ .dmark = NULL,
120
+ .dfree = rb_git__odbobj_free,
121
+ .dsize = rb_git__odbobj_size,
122
+ },
123
+ .data = NULL,
124
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
125
+ };
126
+
127
+
128
+
106
129
  VALUE rugged_raw_read(git_repository *repo, const git_oid *oid)
107
130
  {
108
131
  git_odb *odb;
@@ -117,7 +140,7 @@ VALUE rugged_raw_read(git_repository *repo, const git_oid *oid)
117
140
  git_odb_free(odb);
118
141
  rugged_exception_check(error);
119
142
 
120
- return Data_Wrap_Struct(rb_cRuggedOdbObject, NULL, rb_git__odbobj_free, obj);
143
+ return TypedData_Wrap_Struct(rb_cRuggedOdbObject, &rugged_odb_object_type, obj);
121
144
  }
122
145
 
123
146
  void rb_git_repo__free(git_repository *repo)
@@ -396,6 +419,98 @@ static VALUE rb_git_repo_init_at(int argc, VALUE *argv, VALUE klass)
396
419
  return rugged_repo_new(klass, repo);
397
420
  }
398
421
 
422
+ static int apply_cb_result(int exception, VALUE result)
423
+ {
424
+ if (exception || result == Qnil) {
425
+ return GIT_EAPPLYFAIL;
426
+ } else {
427
+ if (RTEST(result)) {
428
+ return 0;
429
+ } else {
430
+ return 1;
431
+ }
432
+ }
433
+ }
434
+
435
+ static int apply_delta_cb(const git_diff_delta *delta, void *data)
436
+ {
437
+ struct rugged_apply_cb_payload *payload = data;
438
+ VALUE args = rb_ary_new2(2);
439
+ VALUE result;
440
+
441
+ if (NIL_P(payload->delta_cb))
442
+ return 0;
443
+
444
+ VALUE rb_delta = rugged_diff_delta_new(Qnil, delta);
445
+
446
+ rb_ary_push(args, payload->delta_cb);
447
+ rb_ary_push(args, rb_delta);
448
+
449
+ result = rb_protect(rugged__block_yield_splat, args, &payload->exception);
450
+
451
+ return apply_cb_result(payload->exception, result);
452
+ }
453
+
454
+ static int apply_hunk_cb(const git_diff_hunk *hunk, void *data)
455
+ {
456
+ struct rugged_apply_cb_payload *payload = data;
457
+ VALUE args = rb_ary_new2(2);
458
+ VALUE result;
459
+
460
+ if (NIL_P(payload->hunk_cb))
461
+ return 0;
462
+
463
+ VALUE rb_hunk = rugged_diff_hunk_new(Qnil, 0, hunk, 0);
464
+
465
+ rb_ary_push(args, payload->hunk_cb);
466
+ rb_ary_push(args, rb_hunk);
467
+
468
+ result = rb_protect(rugged__block_yield_splat, args, &payload->exception);
469
+
470
+ return apply_cb_result(payload->exception, result);
471
+ }
472
+
473
+ static void rugged_parse_apply_options(git_apply_options *opts, git_apply_location_t *location, VALUE rb_options, struct rugged_apply_cb_payload *payload)
474
+ {
475
+ if (!NIL_P(rb_options)) {
476
+ VALUE rb_value;
477
+ Check_Type(rb_options, T_HASH);
478
+
479
+ rb_value = rb_hash_aref(rb_options, CSTR2SYM("location"));
480
+ if (!NIL_P(rb_value)) {
481
+ ID id_location;
482
+
483
+ Check_Type(rb_value, T_SYMBOL);
484
+ id_location = SYM2ID(rb_value);
485
+
486
+ if (id_location == rb_intern("both")) {
487
+ *location = GIT_APPLY_LOCATION_BOTH;
488
+ } else if (id_location == rb_intern("index")) {
489
+ *location = GIT_APPLY_LOCATION_INDEX;
490
+ } else if (id_location == rb_intern("workdir")) {
491
+ *location = GIT_APPLY_LOCATION_WORKDIR;
492
+ } else {
493
+ rb_raise(rb_eTypeError,
494
+ "Invalid location. Expected `:both`, `:index`, or `:workdir`");
495
+ }
496
+ }
497
+
498
+ opts->payload = payload;
499
+
500
+ payload->delta_cb = rb_hash_aref(rb_options, CSTR2SYM("delta_callback"));
501
+ if (!NIL_P(payload->delta_cb)) {
502
+ CALLABLE_OR_RAISE(payload->delta_cb, "delta_callback");
503
+ opts->delta_cb = apply_delta_cb;
504
+ }
505
+
506
+ payload->hunk_cb = rb_hash_aref(rb_options, CSTR2SYM("hunk_callback"));
507
+ if (!NIL_P(payload->hunk_cb)) {
508
+ CALLABLE_OR_RAISE(payload->hunk_cb, "hunk_callback");
509
+ opts->hunk_cb = apply_hunk_cb;
510
+ }
511
+ }
512
+ }
513
+
399
514
  static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct rugged_remote_cb_payload *remote_payload)
400
515
  {
401
516
  VALUE val;
@@ -788,7 +903,7 @@ static VALUE rb_git_repo_merge_analysis(int argc, VALUE *argv, VALUE self)
788
903
  rb_raise(rb_eArgError, "Expected a Rugged::Commit.");
789
904
  }
790
905
 
791
- Data_Get_Struct(rb_their_commit, git_commit, their_commit);
906
+ TypedData_Get_Struct(rb_their_commit, git_commit, &rugged_object_type, their_commit);
792
907
 
793
908
  error = git_annotated_commit_lookup(&annotated_commit, repo, git_commit_id(their_commit));
794
909
  rugged_exception_check(error);
@@ -856,8 +971,8 @@ static VALUE rb_git_repo_revert_commit(int argc, VALUE *argv, VALUE self)
856
971
  }
857
972
 
858
973
  Data_Get_Struct(self, git_repository, repo);
859
- Data_Get_Struct(rb_revert_commit, git_commit, revert_commit);
860
- Data_Get_Struct(rb_our_commit, git_commit, our_commit);
974
+ TypedData_Get_Struct(rb_revert_commit, git_commit, &rugged_object_type, revert_commit);
975
+ TypedData_Get_Struct(rb_our_commit, git_commit, &rugged_object_type, our_commit);
861
976
 
862
977
  error = git_revert_commit(&index, repo, revert_commit, our_commit, mainline, &opts);
863
978
  if (error == GIT_EMERGECONFLICT)
@@ -868,6 +983,69 @@ static VALUE rb_git_repo_revert_commit(int argc, VALUE *argv, VALUE self)
868
983
  return rugged_index_new(rb_cRuggedIndex, self, index);
869
984
  }
870
985
 
986
+ /*
987
+ * call-seq:
988
+ * repo.apply(diff, options = {}) -> true or false
989
+ *
990
+ * Applies the given diff to the repository.
991
+ * The following options can be passed in the +options+ Hash:
992
+ *
993
+ * :location ::
994
+ * Whether to apply the changes to the workdir (default for non-bare),
995
+ * the index (default for bare) or both. Valid values: +:index+, +:workdir+,
996
+ * +:both+.
997
+ *
998
+ * :delta_callback ::
999
+ * While applying the patch, this callback will be executed per delta (file).
1000
+ * The current +delta+ will be passed to the block. The block's return value
1001
+ * determines further behavior. When the block evaluates to:
1002
+ * - +true+: the hunk will be applied and the apply process will continue.
1003
+ * - +false+: the hunk will be skipped, but the apply process continues.
1004
+ * - +nil+: the hunk is not applied, and the apply process is aborted.
1005
+ *
1006
+ * :hunk_callback ::
1007
+ * While applying the patch, this callback will be executed per hunk.
1008
+ * The current +hunk+ will be passed to the block. The block's return value
1009
+ * determines further behavior, as per +:delta_callback+.
1010
+ *
1011
+ */
1012
+ static VALUE rb_git_repo_apply(int argc, VALUE *argv, VALUE self)
1013
+ {
1014
+ VALUE rb_diff, rb_options;
1015
+ git_diff *diff;
1016
+ git_repository *repo;
1017
+ git_apply_options opts = GIT_APPLY_OPTIONS_INIT;
1018
+ git_apply_location_t location;
1019
+ struct rugged_apply_cb_payload payload = { Qnil, Qnil, 0 };
1020
+ int error;
1021
+
1022
+ Data_Get_Struct(self, git_repository, repo);
1023
+ if (git_repository_is_bare(repo)) {
1024
+ location = GIT_APPLY_LOCATION_INDEX;
1025
+ } else {
1026
+ location = GIT_APPLY_LOCATION_WORKDIR;
1027
+ }
1028
+
1029
+ rb_scan_args(argc, argv, "11", &rb_diff, &rb_options);
1030
+
1031
+ if (!rb_obj_is_kind_of(rb_diff, rb_cRuggedDiff)) {
1032
+ rb_raise(rb_eArgError, "Expected a Rugged::Diff.");
1033
+ }
1034
+
1035
+ if (!NIL_P(rb_options)) {
1036
+ Check_Type(rb_options, T_HASH);
1037
+ rugged_parse_apply_options(&opts, &location, rb_options, &payload);
1038
+ }
1039
+
1040
+ Data_Get_Struct(rb_diff, git_diff, diff);
1041
+
1042
+ error = git_apply(repo, diff, location, &opts);
1043
+
1044
+ rugged_exception_check(error);
1045
+
1046
+ return Qtrue;
1047
+ }
1048
+
871
1049
  /*
872
1050
  * call-seq:
873
1051
  * repo.merge_commits(our_commit, their_commit, options = {}) -> index
@@ -911,8 +1089,8 @@ static VALUE rb_git_repo_merge_commits(int argc, VALUE *argv, VALUE self)
911
1089
  }
912
1090
 
913
1091
  Data_Get_Struct(self, git_repository, repo);
914
- Data_Get_Struct(rb_our_commit, git_commit, our_commit);
915
- Data_Get_Struct(rb_their_commit, git_commit, their_commit);
1092
+ TypedData_Get_Struct(rb_our_commit, git_commit, &rugged_object_type, our_commit);
1093
+ TypedData_Get_Struct(rb_their_commit, git_commit, &rugged_object_type, their_commit);
916
1094
 
917
1095
  error = git_merge_commits(&index, repo, our_commit, their_commit, &opts);
918
1096
  if (error == GIT_EMERGECONFLICT)
@@ -1518,7 +1696,7 @@ static VALUE rb_git_repo_file_status(VALUE self, VALUE rb_path)
1518
1696
 
1519
1697
  static VALUE rb_git_repo_file_each_status(VALUE self)
1520
1698
  {
1521
- int error, exception;
1699
+ int error, exception = 0;
1522
1700
  size_t i, nentries;
1523
1701
  git_repository *repo;
1524
1702
  git_status_list *list;
@@ -2026,7 +2204,7 @@ void rugged_parse_checkout_options(git_checkout_options *opts, VALUE rb_options)
2026
2204
  rb_value = rb_hash_aref(rb_options, CSTR2SYM("baseline"));
2027
2205
  if (!NIL_P(rb_value)) {
2028
2206
  if (rb_obj_is_kind_of(rb_value, rb_cRuggedTree)) {
2029
- Data_Get_Struct(rb_value, git_tree, opts->baseline);
2207
+ TypedData_Get_Struct(rb_value, git_tree, &rugged_object_type, opts->baseline);
2030
2208
  } else {
2031
2209
  rb_raise(rb_eTypeError, "Expected a Rugged::Tree.");
2032
2210
  }
@@ -2190,7 +2368,7 @@ static VALUE rb_git_checkout_tree(int argc, VALUE *argv, VALUE self)
2190
2368
  }
2191
2369
 
2192
2370
  Data_Get_Struct(self, git_repository, repo);
2193
- Data_Get_Struct(rb_treeish, git_object, treeish);
2371
+ TypedData_Get_Struct(rb_treeish, git_object, &rugged_object_type, treeish);
2194
2372
 
2195
2373
  rugged_parse_checkout_options(&opts, rb_options);
2196
2374
 
@@ -2488,7 +2666,7 @@ static VALUE rb_git_repo_cherrypick(int argc, VALUE *argv, VALUE self)
2488
2666
  }
2489
2667
 
2490
2668
  Data_Get_Struct(self, git_repository, repo);
2491
- Data_Get_Struct(rb_commit, git_commit, commit);
2669
+ TypedData_Get_Struct(rb_commit, git_commit, &rugged_object_type, commit);
2492
2670
 
2493
2671
  rugged_parse_cherrypick_options(&opts, rb_options);
2494
2672
 
@@ -2541,8 +2719,8 @@ static VALUE rb_git_repo_cherrypick_commit(int argc, VALUE *argv, VALUE self)
2541
2719
  }
2542
2720
 
2543
2721
  Data_Get_Struct(self, git_repository, repo);
2544
- Data_Get_Struct(rb_commit, git_commit, commit);
2545
- Data_Get_Struct(rb_our_commit, git_commit, our_commit);
2722
+ TypedData_Get_Struct(rb_commit, git_commit, &rugged_object_type, commit);
2723
+ TypedData_Get_Struct(rb_our_commit, git_commit, &rugged_object_type, our_commit);
2546
2724
 
2547
2725
  rugged_parse_merge_options(&opts, rb_options);
2548
2726
 
@@ -2553,6 +2731,29 @@ static VALUE rb_git_repo_cherrypick_commit(int argc, VALUE *argv, VALUE self)
2553
2731
  return rugged_index_new(rb_cRuggedIndex, self, index);
2554
2732
  }
2555
2733
 
2734
+ /*
2735
+ * call-seq: repo.diff_from_buffer(buffer) -> Rugged::Diff object
2736
+ *
2737
+ * Where +buffer+ is a +String+.
2738
+ * Returns A Rugged::Diff object
2739
+ */
2740
+ static VALUE rb_git_diff_from_buffer(VALUE self, VALUE rb_buffer)
2741
+ {
2742
+ git_diff *diff = NULL;
2743
+ const char *buffer;
2744
+ size_t len;
2745
+ int error;
2746
+
2747
+ Check_Type(rb_buffer, T_STRING);
2748
+ buffer = RSTRING_PTR(rb_buffer);
2749
+ len = RSTRING_LEN(rb_buffer);
2750
+
2751
+ error = git_diff_from_buffer(&diff, buffer, len);
2752
+ rugged_exception_check(error);
2753
+
2754
+ return rugged_diff_new(rb_cRuggedDiff, self, diff);
2755
+ }
2756
+
2556
2757
  void Init_rugged_repo(void)
2557
2758
  {
2558
2759
  id_call = rb_intern("call");
@@ -2608,7 +2809,11 @@ void Init_rugged_repo(void)
2608
2809
  rb_define_method(rb_cRuggedRepo, "merge_analysis", rb_git_repo_merge_analysis, -1);
2609
2810
  rb_define_method(rb_cRuggedRepo, "merge_commits", rb_git_repo_merge_commits, -1);
2610
2811
 
2812
+ rb_define_method(rb_cRuggedRepo, "apply", rb_git_repo_apply, -1);
2813
+
2611
2814
  rb_define_method(rb_cRuggedRepo, "revert_commit", rb_git_repo_revert_commit, -1);
2815
+
2816
+ rb_define_method(rb_cRuggedRepo, "diff_from_buffer", rb_git_diff_from_buffer, 1);
2612
2817
 
2613
2818
  rb_define_method(rb_cRuggedRepo, "path_ignored?", rb_git_repo_is_path_ignored, 1);
2614
2819
 
@@ -2630,7 +2835,7 @@ void Init_rugged_repo(void)
2630
2835
  rb_define_method(rb_cRuggedRepo, "cherrypick_commit", rb_git_repo_cherrypick_commit, -1);
2631
2836
  rb_define_method(rb_cRuggedRepo, "fetch_attributes", rb_git_repo_attributes, -1);
2632
2837
 
2633
- rb_cRuggedOdbObject = rb_define_class_under(rb_mRugged, "OdbObject", rb_cObject);
2838
+ rb_cRuggedOdbObject = rb_define_class_under(rb_mRugged, "OdbObject", rb_cData);
2634
2839
  rb_define_method(rb_cRuggedOdbObject, "data", rb_git_odbobj_data, 0);
2635
2840
  rb_define_method(rb_cRuggedOdbObject, "len", rb_git_odbobj_size, 0);
2636
2841
  rb_define_method(rb_cRuggedOdbObject, "type", rb_git_odbobj_type, 0);