rugged 0.28.4.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (391) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/rugged/extconf.rb +3 -1
  4. data/ext/rugged/rugged.c +35 -31
  5. data/ext/rugged/rugged.h +13 -0
  6. data/ext/rugged/rugged_blob.c +11 -9
  7. data/ext/rugged/rugged_commit.c +17 -15
  8. data/ext/rugged/rugged_config.c +1 -1
  9. data/ext/rugged/rugged_diff.c +4 -26
  10. data/ext/rugged/rugged_index.c +4 -2
  11. data/ext/rugged/rugged_note.c +5 -3
  12. data/ext/rugged/rugged_object.c +57 -10
  13. data/ext/rugged/rugged_rebase.c +3 -1
  14. data/ext/rugged/rugged_remote.c +32 -8
  15. data/ext/rugged/rugged_repo.c +232 -17
  16. data/ext/rugged/rugged_tag.c +8 -6
  17. data/ext/rugged/rugged_tree.c +18 -16
  18. data/lib/rugged/commit.rb +1 -2
  19. data/lib/rugged/repository.rb +5 -6
  20. data/lib/rugged/submodule_collection.rb +4 -4
  21. data/lib/rugged/version.rb +1 -1
  22. data/vendor/libgit2/AUTHORS +1 -0
  23. data/vendor/libgit2/CMakeLists.txt +39 -19
  24. data/vendor/libgit2/COPYING +28 -0
  25. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +5 -1
  26. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +2 -2
  27. data/vendor/libgit2/cmake/Modules/FindGSSAPI.cmake +1 -1
  28. data/vendor/libgit2/cmake/Modules/FindGSSFramework.cmake +28 -0
  29. data/vendor/libgit2/cmake/Modules/FindPCRE.cmake +38 -0
  30. data/vendor/libgit2/cmake/Modules/FindPCRE2.cmake +37 -0
  31. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +2 -2
  32. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +6 -0
  33. data/vendor/libgit2/cmake/Modules/PkgBuildConfig.cmake +77 -0
  34. data/vendor/libgit2/cmake/Modules/SanitizeBool.cmake +20 -0
  35. data/vendor/libgit2/cmake/Modules/SelectGSSAPI.cmake +56 -0
  36. data/vendor/libgit2/cmake/Modules/SelectHTTPSBackend.cmake +127 -0
  37. data/vendor/libgit2/cmake/Modules/SelectHashes.cmake +69 -0
  38. data/vendor/libgit2/deps/http-parser/http_parser.c +11 -6
  39. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +23 -0
  40. data/vendor/libgit2/deps/ntlmclient/compat.h +55 -0
  41. data/vendor/libgit2/deps/ntlmclient/crypt.h +64 -0
  42. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +120 -0
  43. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +18 -0
  44. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +145 -0
  45. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +18 -0
  46. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +130 -0
  47. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +21 -0
  48. data/vendor/libgit2/deps/ntlmclient/ntlm.c +1422 -0
  49. data/vendor/libgit2/deps/ntlmclient/ntlm.h +174 -0
  50. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +320 -0
  51. data/vendor/libgit2/deps/ntlmclient/unicode.h +36 -0
  52. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +445 -0
  53. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +201 -0
  54. data/vendor/libgit2/deps/ntlmclient/utf8.h +1257 -0
  55. data/vendor/libgit2/deps/ntlmclient/util.c +21 -0
  56. data/vendor/libgit2/deps/ntlmclient/util.h +14 -0
  57. data/vendor/libgit2/deps/pcre/CMakeLists.txt +140 -0
  58. data/vendor/libgit2/deps/pcre/COPYING +5 -0
  59. data/vendor/libgit2/deps/pcre/cmake/COPYING-CMAKE-SCRIPTS +22 -0
  60. data/vendor/libgit2/deps/pcre/cmake/FindEditline.cmake +17 -0
  61. data/vendor/libgit2/deps/pcre/cmake/FindPackageHandleStandardArgs.cmake +58 -0
  62. data/vendor/libgit2/deps/pcre/cmake/FindReadline.cmake +29 -0
  63. data/vendor/libgit2/deps/pcre/config.h.in +57 -0
  64. data/vendor/libgit2/deps/pcre/pcre.h +641 -0
  65. data/vendor/libgit2/deps/pcre/pcre_byte_order.c +319 -0
  66. data/vendor/libgit2/deps/pcre/pcre_chartables.c +198 -0
  67. data/vendor/libgit2/deps/pcre/pcre_compile.c +9800 -0
  68. data/vendor/libgit2/deps/pcre/pcre_config.c +190 -0
  69. data/vendor/libgit2/deps/pcre/pcre_dfa_exec.c +3676 -0
  70. data/vendor/libgit2/deps/pcre/pcre_exec.c +7173 -0
  71. data/vendor/libgit2/deps/pcre/pcre_fullinfo.c +245 -0
  72. data/vendor/libgit2/deps/pcre/pcre_get.c +669 -0
  73. data/vendor/libgit2/deps/pcre/pcre_globals.c +86 -0
  74. data/vendor/libgit2/deps/pcre/pcre_internal.h +2787 -0
  75. data/vendor/libgit2/deps/pcre/pcre_jit_compile.c +11913 -0
  76. data/vendor/libgit2/deps/pcre/pcre_maketables.c +156 -0
  77. data/vendor/libgit2/deps/pcre/pcre_newline.c +210 -0
  78. data/vendor/libgit2/deps/pcre/pcre_ord2utf8.c +94 -0
  79. data/vendor/libgit2/deps/pcre/pcre_printint.c +834 -0
  80. data/vendor/libgit2/deps/pcre/pcre_refcount.c +92 -0
  81. data/vendor/libgit2/deps/pcre/pcre_string_utils.c +211 -0
  82. data/vendor/libgit2/deps/pcre/pcre_study.c +1686 -0
  83. data/vendor/libgit2/deps/pcre/pcre_tables.c +727 -0
  84. data/vendor/libgit2/deps/pcre/pcre_ucd.c +3644 -0
  85. data/vendor/libgit2/deps/pcre/pcre_valid_utf8.c +301 -0
  86. data/vendor/libgit2/deps/pcre/pcre_version.c +98 -0
  87. data/vendor/libgit2/deps/pcre/pcre_xclass.c +268 -0
  88. data/vendor/libgit2/deps/pcre/pcreposix.c +421 -0
  89. data/vendor/libgit2/deps/pcre/pcreposix.h +117 -0
  90. data/vendor/libgit2/deps/pcre/ucp.h +224 -0
  91. data/vendor/libgit2/deps/zlib/adler32.c +0 -7
  92. data/vendor/libgit2/deps/zlib/crc32.c +0 -7
  93. data/vendor/libgit2/include/git2.h +2 -0
  94. data/vendor/libgit2/include/git2/apply.h +22 -2
  95. data/vendor/libgit2/include/git2/attr.h +23 -13
  96. data/vendor/libgit2/include/git2/blame.h +2 -2
  97. data/vendor/libgit2/include/git2/blob.h +44 -12
  98. data/vendor/libgit2/include/git2/branch.h +74 -57
  99. data/vendor/libgit2/include/git2/buffer.h +20 -14
  100. data/vendor/libgit2/include/git2/cert.h +135 -0
  101. data/vendor/libgit2/include/git2/checkout.h +46 -14
  102. data/vendor/libgit2/include/git2/cherrypick.h +3 -3
  103. data/vendor/libgit2/include/git2/clone.h +2 -2
  104. data/vendor/libgit2/include/git2/commit.h +23 -1
  105. data/vendor/libgit2/include/git2/common.h +15 -6
  106. data/vendor/libgit2/include/git2/config.h +12 -12
  107. data/vendor/libgit2/include/git2/cred_helpers.h +4 -42
  108. data/vendor/libgit2/include/git2/credential.h +314 -0
  109. data/vendor/libgit2/include/git2/credential_helpers.h +52 -0
  110. data/vendor/libgit2/include/git2/deprecated.h +321 -3
  111. data/vendor/libgit2/include/git2/describe.h +4 -4
  112. data/vendor/libgit2/include/git2/diff.h +16 -14
  113. data/vendor/libgit2/include/git2/errors.h +4 -2
  114. data/vendor/libgit2/include/git2/filter.h +8 -0
  115. data/vendor/libgit2/include/git2/index.h +2 -1
  116. data/vendor/libgit2/include/git2/indexer.h +48 -4
  117. data/vendor/libgit2/include/git2/merge.h +6 -10
  118. data/vendor/libgit2/include/git2/net.h +0 -5
  119. data/vendor/libgit2/include/git2/object.h +2 -14
  120. data/vendor/libgit2/include/git2/odb.h +3 -2
  121. data/vendor/libgit2/include/git2/odb_backend.h +5 -4
  122. data/vendor/libgit2/include/git2/oid.h +11 -6
  123. data/vendor/libgit2/include/git2/pack.h +12 -1
  124. data/vendor/libgit2/include/git2/proxy.h +6 -4
  125. data/vendor/libgit2/include/git2/rebase.h +46 -2
  126. data/vendor/libgit2/include/git2/refs.h +19 -0
  127. data/vendor/libgit2/include/git2/remote.h +40 -15
  128. data/vendor/libgit2/include/git2/repository.h +29 -6
  129. data/vendor/libgit2/include/git2/revert.h +1 -1
  130. data/vendor/libgit2/include/git2/revwalk.h +7 -3
  131. data/vendor/libgit2/include/git2/stash.h +4 -4
  132. data/vendor/libgit2/include/git2/status.h +25 -16
  133. data/vendor/libgit2/include/git2/submodule.h +20 -3
  134. data/vendor/libgit2/include/git2/sys/alloc.h +9 -9
  135. data/vendor/libgit2/include/git2/sys/cred.h +15 -0
  136. data/vendor/libgit2/include/git2/sys/credential.h +90 -0
  137. data/vendor/libgit2/include/git2/sys/index.h +4 -2
  138. data/vendor/libgit2/include/git2/sys/mempack.h +2 -1
  139. data/vendor/libgit2/include/git2/sys/merge.h +1 -1
  140. data/vendor/libgit2/include/git2/sys/odb_backend.h +48 -4
  141. data/vendor/libgit2/include/git2/sys/refdb_backend.h +164 -21
  142. data/vendor/libgit2/include/git2/sys/repository.h +17 -6
  143. data/vendor/libgit2/include/git2/sys/transport.h +4 -4
  144. data/vendor/libgit2/include/git2/tag.h +11 -2
  145. data/vendor/libgit2/include/git2/trace.h +2 -2
  146. data/vendor/libgit2/include/git2/transport.h +11 -340
  147. data/vendor/libgit2/include/git2/tree.h +5 -3
  148. data/vendor/libgit2/include/git2/types.h +4 -89
  149. data/vendor/libgit2/include/git2/version.h +5 -5
  150. data/vendor/libgit2/include/git2/worktree.h +5 -5
  151. data/vendor/libgit2/src/CMakeLists.txt +99 -236
  152. data/vendor/libgit2/src/alloc.c +2 -14
  153. data/vendor/libgit2/src/{stdalloc.c → allocators/stdalloc.c} +3 -4
  154. data/vendor/libgit2/src/{stdalloc.h → allocators/stdalloc.h} +4 -4
  155. data/vendor/libgit2/src/allocators/win32_crtdbg.c +118 -0
  156. data/vendor/libgit2/src/{transports/cred.h → allocators/win32_crtdbg.h} +5 -4
  157. data/vendor/libgit2/src/apply.c +60 -30
  158. data/vendor/libgit2/src/attr.c +70 -64
  159. data/vendor/libgit2/src/attr_file.c +189 -96
  160. data/vendor/libgit2/src/attr_file.h +9 -9
  161. data/vendor/libgit2/src/attrcache.c +48 -48
  162. data/vendor/libgit2/src/attrcache.h +2 -1
  163. data/vendor/libgit2/src/blame.c +17 -5
  164. data/vendor/libgit2/src/blame.h +1 -1
  165. data/vendor/libgit2/src/blame_git.c +21 -7
  166. data/vendor/libgit2/src/blob.c +81 -17
  167. data/vendor/libgit2/src/blob.h +2 -2
  168. data/vendor/libgit2/src/branch.c +60 -32
  169. data/vendor/libgit2/src/buffer.c +19 -7
  170. data/vendor/libgit2/src/buffer.h +1 -0
  171. data/vendor/libgit2/src/cache.c +33 -36
  172. data/vendor/libgit2/src/cache.h +1 -1
  173. data/vendor/libgit2/src/cc-compat.h +5 -0
  174. data/vendor/libgit2/src/checkout.c +26 -16
  175. data/vendor/libgit2/src/cherrypick.c +9 -3
  176. data/vendor/libgit2/src/clone.c +29 -7
  177. data/vendor/libgit2/src/clone.h +4 -0
  178. data/vendor/libgit2/src/commit.c +70 -22
  179. data/vendor/libgit2/src/commit.h +6 -0
  180. data/vendor/libgit2/src/commit_list.c +28 -76
  181. data/vendor/libgit2/src/commit_list.h +2 -2
  182. data/vendor/libgit2/src/common.h +3 -75
  183. data/vendor/libgit2/src/config.c +31 -40
  184. data/vendor/libgit2/src/config.h +7 -6
  185. data/vendor/libgit2/src/config_backend.h +12 -0
  186. data/vendor/libgit2/src/config_cache.c +39 -39
  187. data/vendor/libgit2/src/config_entries.c +69 -99
  188. data/vendor/libgit2/src/config_entries.h +1 -0
  189. data/vendor/libgit2/src/config_file.c +346 -380
  190. data/vendor/libgit2/src/config_mem.c +12 -16
  191. data/vendor/libgit2/src/config_parse.c +49 -29
  192. data/vendor/libgit2/src/config_parse.h +13 -12
  193. data/vendor/libgit2/src/config_snapshot.c +206 -0
  194. data/vendor/libgit2/src/crlf.c +14 -14
  195. data/vendor/libgit2/src/describe.c +21 -20
  196. data/vendor/libgit2/src/diff.c +43 -58
  197. data/vendor/libgit2/src/diff.h +4 -3
  198. data/vendor/libgit2/src/diff_driver.c +37 -38
  199. data/vendor/libgit2/src/diff_file.c +12 -10
  200. data/vendor/libgit2/src/diff_file.h +2 -2
  201. data/vendor/libgit2/src/diff_generate.c +148 -98
  202. data/vendor/libgit2/src/diff_generate.h +2 -2
  203. data/vendor/libgit2/src/diff_parse.c +1 -1
  204. data/vendor/libgit2/src/diff_print.c +25 -13
  205. data/vendor/libgit2/src/diff_stats.c +1 -1
  206. data/vendor/libgit2/src/diff_tform.c +11 -11
  207. data/vendor/libgit2/src/errors.c +21 -25
  208. data/vendor/libgit2/src/errors.h +81 -0
  209. data/vendor/libgit2/src/features.h.in +9 -2
  210. data/vendor/libgit2/src/fetch.c +7 -2
  211. data/vendor/libgit2/src/fetchhead.c +36 -4
  212. data/vendor/libgit2/src/filebuf.c +6 -10
  213. data/vendor/libgit2/src/filebuf.h +2 -2
  214. data/vendor/libgit2/src/filter.c +16 -8
  215. data/vendor/libgit2/src/{fileops.c → futils.c} +21 -17
  216. data/vendor/libgit2/src/{fileops.h → futils.h} +5 -5
  217. data/vendor/libgit2/src/global.c +12 -40
  218. data/vendor/libgit2/src/global.h +0 -2
  219. data/vendor/libgit2/src/hash.c +61 -0
  220. data/vendor/libgit2/src/hash.h +19 -21
  221. data/vendor/libgit2/src/hash/sha1.h +38 -0
  222. data/vendor/libgit2/src/hash/{hash_collisiondetect.h → sha1/collisiondetect.c} +14 -17
  223. data/vendor/libgit2/src/{sha1_lookup.h → hash/sha1/collisiondetect.h} +8 -8
  224. data/vendor/libgit2/src/hash/{hash_common_crypto.h → sha1/common_crypto.c} +15 -19
  225. data/vendor/libgit2/src/hash/sha1/common_crypto.h +19 -0
  226. data/vendor/libgit2/src/hash/{hash_generic.c → sha1/generic.c} +22 -10
  227. data/vendor/libgit2/src/hash/{hash_generic.h → sha1/generic.h} +4 -14
  228. data/vendor/libgit2/src/hash/{hash_mbedtls.c → sha1/mbedtls.c} +15 -7
  229. data/vendor/libgit2/src/hash/{hash_mbedtls.h → sha1/mbedtls.h} +6 -11
  230. data/vendor/libgit2/src/hash/{hash_openssl.h → sha1/openssl.c} +14 -18
  231. data/vendor/libgit2/src/hash/sha1/openssl.h +19 -0
  232. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.c +14 -3
  233. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/sha1.h +0 -0
  234. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.c +0 -0
  235. data/vendor/libgit2/src/hash/{sha1dc → sha1/sha1dc}/ubc_check.h +0 -0
  236. data/vendor/libgit2/src/hash/{hash_win32.c → sha1/win32.c} +34 -24
  237. data/vendor/libgit2/src/hash/{hash_win32.h → sha1/win32.h} +6 -19
  238. data/vendor/libgit2/src/hashsig.c +1 -1
  239. data/vendor/libgit2/src/idxmap.c +91 -65
  240. data/vendor/libgit2/src/idxmap.h +151 -15
  241. data/vendor/libgit2/src/ignore.c +32 -38
  242. data/vendor/libgit2/src/index.c +105 -83
  243. data/vendor/libgit2/src/index.h +1 -1
  244. data/vendor/libgit2/src/indexer.c +71 -72
  245. data/vendor/libgit2/src/integer.h +39 -4
  246. data/vendor/libgit2/src/iterator.c +40 -35
  247. data/vendor/libgit2/src/iterator.h +8 -8
  248. data/vendor/libgit2/src/map.h +1 -1
  249. data/vendor/libgit2/src/merge.c +78 -51
  250. data/vendor/libgit2/src/merge.h +2 -2
  251. data/vendor/libgit2/src/merge_driver.c +5 -5
  252. data/vendor/libgit2/src/merge_file.c +1 -1
  253. data/vendor/libgit2/src/mwindow.c +18 -23
  254. data/vendor/libgit2/src/mwindow.h +4 -4
  255. data/vendor/libgit2/src/net.c +411 -0
  256. data/vendor/libgit2/src/net.h +57 -0
  257. data/vendor/libgit2/src/netops.c +6 -193
  258. data/vendor/libgit2/src/netops.h +1 -34
  259. data/vendor/libgit2/src/notes.c +8 -5
  260. data/vendor/libgit2/src/object.c +3 -3
  261. data/vendor/libgit2/src/object.h +2 -0
  262. data/vendor/libgit2/src/odb.c +41 -23
  263. data/vendor/libgit2/src/odb.h +3 -2
  264. data/vendor/libgit2/src/odb_loose.c +17 -10
  265. data/vendor/libgit2/src/odb_mempack.c +13 -24
  266. data/vendor/libgit2/src/odb_pack.c +4 -5
  267. data/vendor/libgit2/src/offmap.c +43 -55
  268. data/vendor/libgit2/src/offmap.h +102 -24
  269. data/vendor/libgit2/src/oid.c +19 -8
  270. data/vendor/libgit2/src/oidmap.c +39 -57
  271. data/vendor/libgit2/src/oidmap.h +99 -19
  272. data/vendor/libgit2/src/pack-objects.c +28 -33
  273. data/vendor/libgit2/src/pack-objects.h +1 -1
  274. data/vendor/libgit2/src/pack.c +117 -129
  275. data/vendor/libgit2/src/pack.h +15 -18
  276. data/vendor/libgit2/src/parse.c +10 -0
  277. data/vendor/libgit2/src/parse.h +3 -3
  278. data/vendor/libgit2/src/patch.c +1 -1
  279. data/vendor/libgit2/src/patch_generate.c +2 -2
  280. data/vendor/libgit2/src/patch_parse.c +130 -33
  281. data/vendor/libgit2/src/path.c +43 -6
  282. data/vendor/libgit2/src/path.h +2 -0
  283. data/vendor/libgit2/src/pathspec.c +14 -14
  284. data/vendor/libgit2/src/pool.c +26 -22
  285. data/vendor/libgit2/src/pool.h +7 -7
  286. data/vendor/libgit2/src/posix.c +7 -7
  287. data/vendor/libgit2/src/posix.h +12 -1
  288. data/vendor/libgit2/src/proxy.c +7 -2
  289. data/vendor/libgit2/src/push.c +13 -7
  290. data/vendor/libgit2/src/reader.c +2 -2
  291. data/vendor/libgit2/src/rebase.c +87 -28
  292. data/vendor/libgit2/src/refdb.c +12 -0
  293. data/vendor/libgit2/src/refdb_fs.c +219 -167
  294. data/vendor/libgit2/src/reflog.c +11 -13
  295. data/vendor/libgit2/src/refs.c +39 -23
  296. data/vendor/libgit2/src/refs.h +8 -1
  297. data/vendor/libgit2/src/refspec.c +9 -16
  298. data/vendor/libgit2/src/regexp.c +221 -0
  299. data/vendor/libgit2/src/regexp.h +97 -0
  300. data/vendor/libgit2/src/remote.c +57 -55
  301. data/vendor/libgit2/src/remote.h +2 -2
  302. data/vendor/libgit2/src/repository.c +187 -154
  303. data/vendor/libgit2/src/repository.h +49 -40
  304. data/vendor/libgit2/src/revert.c +8 -3
  305. data/vendor/libgit2/src/revparse.c +18 -19
  306. data/vendor/libgit2/src/revwalk.c +72 -34
  307. data/vendor/libgit2/src/revwalk.h +20 -0
  308. data/vendor/libgit2/src/settings.c +13 -1
  309. data/vendor/libgit2/src/sortedcache.c +12 -26
  310. data/vendor/libgit2/src/sortedcache.h +1 -1
  311. data/vendor/libgit2/src/stash.c +47 -67
  312. data/vendor/libgit2/src/status.c +17 -11
  313. data/vendor/libgit2/src/streams/openssl.c +54 -2
  314. data/vendor/libgit2/src/streams/socket.c +2 -2
  315. data/vendor/libgit2/src/strmap.c +37 -84
  316. data/vendor/libgit2/src/strmap.h +105 -33
  317. data/vendor/libgit2/src/submodule.c +151 -126
  318. data/vendor/libgit2/src/submodule.h +1 -1
  319. data/vendor/libgit2/src/sysdir.c +11 -1
  320. data/vendor/libgit2/src/tag.c +10 -2
  321. data/vendor/libgit2/src/trace.c +1 -1
  322. data/vendor/libgit2/src/trace.h +3 -3
  323. data/vendor/libgit2/src/trailer.c +46 -32
  324. data/vendor/libgit2/src/transaction.c +10 -9
  325. data/vendor/libgit2/src/transports/auth.c +16 -15
  326. data/vendor/libgit2/src/transports/auth.h +18 -11
  327. data/vendor/libgit2/src/transports/auth_negotiate.c +64 -33
  328. data/vendor/libgit2/src/transports/auth_negotiate.h +2 -2
  329. data/vendor/libgit2/src/transports/auth_ntlm.c +223 -0
  330. data/vendor/libgit2/src/transports/auth_ntlm.h +38 -0
  331. data/vendor/libgit2/src/transports/credential.c +476 -0
  332. data/vendor/libgit2/src/transports/{cred_helpers.c → credential_helpers.c} +21 -8
  333. data/vendor/libgit2/src/transports/git.c +11 -16
  334. data/vendor/libgit2/src/transports/http.c +488 -1248
  335. data/vendor/libgit2/src/transports/http.h +4 -1
  336. data/vendor/libgit2/src/transports/httpclient.c +1549 -0
  337. data/vendor/libgit2/src/transports/httpclient.h +190 -0
  338. data/vendor/libgit2/src/transports/local.c +10 -10
  339. data/vendor/libgit2/src/transports/smart.c +19 -19
  340. data/vendor/libgit2/src/transports/smart.h +3 -3
  341. data/vendor/libgit2/src/transports/smart_pkt.c +1 -1
  342. data/vendor/libgit2/src/transports/smart_protocol.c +40 -64
  343. data/vendor/libgit2/src/transports/ssh.c +77 -59
  344. data/vendor/libgit2/src/transports/winhttp.c +272 -242
  345. data/vendor/libgit2/src/tree-cache.c +14 -7
  346. data/vendor/libgit2/src/tree.c +16 -26
  347. data/vendor/libgit2/src/unix/map.c +1 -1
  348. data/vendor/libgit2/src/unix/posix.h +2 -12
  349. data/vendor/libgit2/src/userdiff.h +3 -1
  350. data/vendor/libgit2/src/util.c +51 -53
  351. data/vendor/libgit2/src/util.h +16 -21
  352. data/vendor/libgit2/src/wildmatch.c +320 -0
  353. data/vendor/libgit2/src/wildmatch.h +23 -0
  354. data/vendor/libgit2/src/win32/map.c +3 -5
  355. data/vendor/libgit2/src/win32/path_w32.c +40 -3
  356. data/vendor/libgit2/src/win32/path_w32.h +15 -29
  357. data/vendor/libgit2/src/win32/posix.h +1 -4
  358. data/vendor/libgit2/src/win32/posix_w32.c +47 -5
  359. data/vendor/libgit2/src/win32/precompiled.h +0 -2
  360. data/vendor/libgit2/src/win32/thread.c +5 -10
  361. data/vendor/libgit2/src/win32/w32_buffer.c +7 -3
  362. data/vendor/libgit2/src/win32/w32_common.h +39 -0
  363. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +0 -93
  364. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -2
  365. data/vendor/libgit2/src/win32/w32_stack.c +4 -9
  366. data/vendor/libgit2/src/win32/w32_stack.h +3 -3
  367. data/vendor/libgit2/src/win32/w32_util.c +31 -0
  368. data/vendor/libgit2/src/win32/w32_util.h +6 -32
  369. data/vendor/libgit2/src/worktree.c +79 -49
  370. data/vendor/libgit2/src/xdiff/xdiffi.c +1 -1
  371. data/vendor/libgit2/src/xdiff/xmerge.c +12 -0
  372. data/vendor/libgit2/src/xdiff/xpatience.c +3 -0
  373. data/vendor/libgit2/src/zstream.c +5 -0
  374. data/vendor/libgit2/src/zstream.h +1 -0
  375. metadata +108 -41
  376. data/vendor/libgit2/deps/regex/CMakeLists.txt +0 -2
  377. data/vendor/libgit2/deps/regex/COPYING +0 -502
  378. data/vendor/libgit2/deps/regex/config.h +0 -7
  379. data/vendor/libgit2/deps/regex/regcomp.c +0 -3857
  380. data/vendor/libgit2/deps/regex/regex.c +0 -92
  381. data/vendor/libgit2/deps/regex/regex.h +0 -582
  382. data/vendor/libgit2/deps/regex/regex_internal.c +0 -1744
  383. data/vendor/libgit2/deps/regex/regex_internal.h +0 -819
  384. data/vendor/libgit2/deps/regex/regexec.c +0 -4369
  385. data/vendor/libgit2/include/git2/inttypes.h +0 -309
  386. data/vendor/libgit2/include/git2/sys/time.h +0 -31
  387. data/vendor/libgit2/libgit2.pc.in +0 -13
  388. data/vendor/libgit2/src/fnmatch.c +0 -248
  389. data/vendor/libgit2/src/fnmatch.h +0 -48
  390. data/vendor/libgit2/src/sha1_lookup.c +0 -35
  391. data/vendor/libgit2/src/transports/cred.c +0 -390
@@ -10,6 +10,8 @@
10
10
  extern VALUE rb_cRuggedRepo;
11
11
  extern VALUE rb_cRuggedObject;
12
12
 
13
+ extern const rb_data_type_t rugged_object_type;
14
+
13
15
  static VALUE rugged_git_note_message(const git_note *note)
14
16
  {
15
17
  const char *message;
@@ -59,7 +61,7 @@ static VALUE rb_git_note_lookup(int argc, VALUE *argv, VALUE self)
59
61
  notes_ref = StringValueCStr(rb_notes_ref);
60
62
  }
61
63
 
62
- Data_Get_Struct(self, git_object, object);
64
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, object);
63
65
 
64
66
  owner = rugged_owner(self);
65
67
  Data_Get_Struct(owner, git_repository, repo);
@@ -124,7 +126,7 @@ static VALUE rb_git_note_create(VALUE self, VALUE rb_data)
124
126
 
125
127
  Check_Type(rb_data, T_HASH);
126
128
 
127
- Data_Get_Struct(self, git_object, target);
129
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, target);
128
130
 
129
131
  owner = rugged_owner(self);
130
132
  Data_Get_Struct(owner, git_repository, repo);
@@ -207,7 +209,7 @@ static VALUE rb_git_note_remove(int argc, VALUE *argv, VALUE self)
207
209
  VALUE rb_committer = Qnil;
208
210
  VALUE owner;
209
211
 
210
- Data_Get_Struct(self, git_object, target);
212
+ TypedData_Get_Struct(self, git_object, &rugged_object_type, target);
211
213
 
212
214
  owner = rugged_owner(self);
213
215
  Data_Get_Struct(owner, git_repository, repo);
@@ -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,
@@ -213,6 +207,18 @@ static void init_custom_headers(VALUE rb_options, git_strarray *custom_headers)
213
207
  }
214
208
  }
215
209
 
210
+ static void init_proxy_options(VALUE rb_options, git_proxy_options *proxy_options)
211
+ {
212
+ if (NIL_P(rb_options)) return;
213
+
214
+ VALUE val = rb_hash_aref(rb_options, CSTR2SYM("proxy_url"));
215
+ if (!NIL_P(val)) {
216
+ Check_Type(val, T_STRING);
217
+ proxy_options->type = GIT_PROXY_SPECIFIED;
218
+ proxy_options->url = StringValueCStr(val);
219
+ }
220
+ }
221
+
216
222
  static int parse_prune_type(VALUE rb_prune_type)
217
223
  {
218
224
  if (rb_prune_type == Qtrue) {
@@ -289,11 +295,15 @@ static VALUE rugged_rhead_new(const git_remote_head *head)
289
295
  *
290
296
  * :headers ::
291
297
  * Extra HTTP headers to include with the request (only applies to http:// or https:// remotes)
298
+ *
299
+ * :proxy_url ::
300
+ * The url of an http proxy to use to access the remote repository.
292
301
  */
293
302
  static VALUE rb_git_remote_ls(int argc, VALUE *argv, VALUE self)
294
303
  {
295
304
  git_remote *remote;
296
305
  git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
306
+ git_proxy_options proxy_options = GIT_PROXY_OPTIONS_INIT;
297
307
  git_strarray custom_headers = {0};
298
308
  const git_remote_head **heads;
299
309
 
@@ -310,8 +320,9 @@ static VALUE rb_git_remote_ls(int argc, VALUE *argv, VALUE self)
310
320
 
311
321
  rugged_remote_init_callbacks_and_payload_from_options(rb_options, &callbacks, &payload);
312
322
  init_custom_headers(rb_options, &custom_headers);
323
+ init_proxy_options(rb_options, &proxy_options);
313
324
 
314
- if ((error = git_remote_connect(remote, GIT_DIRECTION_FETCH, &callbacks, NULL, &custom_headers)) ||
325
+ if ((error = git_remote_connect(remote, GIT_DIRECTION_FETCH, &callbacks, &proxy_options, &custom_headers)) ||
315
326
  (error = git_remote_ls(&heads, &heads_len, remote)))
316
327
  goto cleanup;
317
328
 
@@ -480,6 +491,9 @@ static VALUE rb_git_remote_push_refspecs(VALUE self)
480
491
  * :headers ::
481
492
  * Extra HTTP headers to include with the request (only applies to http:// or https:// remotes)
482
493
  *
494
+ * :proxy_url ::
495
+ * The url of an http proxy to use to access the remote repository.
496
+ *
483
497
  * Example:
484
498
  *
485
499
  * remote = repo.remotes["origin"]
@@ -490,6 +504,7 @@ static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
490
504
  {
491
505
  git_remote *remote;
492
506
  git_remote_callbacks callbacks = GIT_REMOTE_CALLBACKS_INIT;
507
+ git_proxy_options proxy_options = GIT_PROXY_OPTIONS_INIT;
493
508
  git_strarray custom_headers = {0};
494
509
  struct rugged_remote_cb_payload payload = { Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, Qnil, 0 };
495
510
  VALUE rb_direction, rb_options;
@@ -510,8 +525,9 @@ static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
510
525
 
511
526
  rugged_remote_init_callbacks_and_payload_from_options(rb_options, &callbacks, &payload);
512
527
  init_custom_headers(rb_options, &custom_headers);
528
+ init_proxy_options(rb_options, &proxy_options);
513
529
 
514
- error = git_remote_connect(remote, direction, &callbacks, NULL, &custom_headers);
530
+ error = git_remote_connect(remote, direction, &callbacks, &proxy_options, &custom_headers);
515
531
  git_remote_disconnect(remote);
516
532
 
517
533
  xfree(custom_headers.strings);
@@ -569,6 +585,9 @@ static VALUE rb_git_remote_check_connection(int argc, VALUE *argv, VALUE self)
569
585
  * Specifies the prune mode for the fetch. +true+ remove any remote-tracking references that
570
586
  * no longer exist, +false+ do not prune, +nil+ use configured settings Defaults to "nil".
571
587
  *
588
+ * :proxy_url ::
589
+ * The url of an http proxy to use to access the remote repository.
590
+ *
572
591
  * Example:
573
592
  *
574
593
  * remote = Rugged::Remote.lookup(@repo, 'origin')
@@ -599,6 +618,7 @@ static VALUE rb_git_remote_fetch(int argc, VALUE *argv, VALUE self)
599
618
 
600
619
  rugged_remote_init_callbacks_and_payload_from_options(rb_options, &opts.callbacks, &payload);
601
620
  init_custom_headers(rb_options, &opts.custom_headers);
621
+ init_proxy_options(rb_options, &opts.proxy_opts);
602
622
 
603
623
  if (!NIL_P(rb_options)) {
604
624
  VALUE rb_prune_type;
@@ -660,6 +680,9 @@ static VALUE rb_git_remote_fetch(int argc, VALUE *argv, VALUE self)
660
680
  * :headers ::
661
681
  * Extra HTTP headers to include with the push (only applies to http:// or https:// remotes)
662
682
  *
683
+ * :proxy_url ::
684
+ * The url of an http proxy to use to access the remote repository.
685
+ *
663
686
  * Example:
664
687
  *
665
688
  * remote = Rugged::Remote.lookup(@repo, 'origin')
@@ -685,6 +708,7 @@ static VALUE rb_git_remote_push(int argc, VALUE *argv, VALUE self)
685
708
 
686
709
  rugged_remote_init_callbacks_and_payload_from_options(rb_options, &opts.callbacks, &payload);
687
710
  init_custom_headers(rb_options, &opts.custom_headers);
711
+ init_proxy_options(rb_options, &opts.proxy_opts);
688
712
 
689
713
  error = git_remote_push(remote, &refspecs, &opts);
690
714
 
@@ -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;
@@ -413,6 +528,13 @@ static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct
413
528
  ret->checkout_branch = StringValueCStr(val);
414
529
  }
415
530
 
531
+ val = rb_hash_aref(rb_options, CSTR2SYM("proxy_url"));
532
+ if (!NIL_P(val)) {
533
+ Check_Type(val, T_STRING);
534
+ ret->fetch_opts.proxy_opts.type = GIT_PROXY_SPECIFIED;
535
+ ret->fetch_opts.proxy_opts.url = StringValueCStr(val);
536
+ }
537
+
416
538
  rugged_remote_init_callbacks_and_payload_from_options(rb_options, &ret->fetch_opts.callbacks, remote_payload);
417
539
  }
418
540
 
@@ -437,6 +559,9 @@ static void parse_clone_options(git_clone_options *ret, VALUE rb_options, struct
437
559
  * :ignore_cert_errors ::
438
560
  * If set to +true+, errors while validating the remote's host certificate will be ignored.
439
561
  *
562
+ * :proxy_url ::
563
+ * The url of an http proxy to use to access the remote repository.
564
+ *
440
565
  * :credentials ::
441
566
  * The credentials to use for the clone operation. Can be either an instance of one
442
567
  * of the Rugged::Credentials types, or a proc returning one of the former.
@@ -788,7 +913,7 @@ static VALUE rb_git_repo_merge_analysis(int argc, VALUE *argv, VALUE self)
788
913
  rb_raise(rb_eArgError, "Expected a Rugged::Commit.");
789
914
  }
790
915
 
791
- Data_Get_Struct(rb_their_commit, git_commit, their_commit);
916
+ TypedData_Get_Struct(rb_their_commit, git_commit, &rugged_object_type, their_commit);
792
917
 
793
918
  error = git_annotated_commit_lookup(&annotated_commit, repo, git_commit_id(their_commit));
794
919
  rugged_exception_check(error);
@@ -856,8 +981,8 @@ static VALUE rb_git_repo_revert_commit(int argc, VALUE *argv, VALUE self)
856
981
  }
857
982
 
858
983
  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);
984
+ TypedData_Get_Struct(rb_revert_commit, git_commit, &rugged_object_type, revert_commit);
985
+ TypedData_Get_Struct(rb_our_commit, git_commit, &rugged_object_type, our_commit);
861
986
 
862
987
  error = git_revert_commit(&index, repo, revert_commit, our_commit, mainline, &opts);
863
988
  if (error == GIT_EMERGECONFLICT)
@@ -868,6 +993,69 @@ static VALUE rb_git_repo_revert_commit(int argc, VALUE *argv, VALUE self)
868
993
  return rugged_index_new(rb_cRuggedIndex, self, index);
869
994
  }
870
995
 
996
+ /*
997
+ * call-seq:
998
+ * repo.apply(diff, options = {}) -> true or false
999
+ *
1000
+ * Applies the given diff to the repository.
1001
+ * The following options can be passed in the +options+ Hash:
1002
+ *
1003
+ * :location ::
1004
+ * Whether to apply the changes to the workdir (default for non-bare),
1005
+ * the index (default for bare) or both. Valid values: +:index+, +:workdir+,
1006
+ * +:both+.
1007
+ *
1008
+ * :delta_callback ::
1009
+ * While applying the patch, this callback will be executed per delta (file).
1010
+ * The current +delta+ will be passed to the block. The block's return value
1011
+ * determines further behavior. When the block evaluates to:
1012
+ * - +true+: the hunk will be applied and the apply process will continue.
1013
+ * - +false+: the hunk will be skipped, but the apply process continues.
1014
+ * - +nil+: the hunk is not applied, and the apply process is aborted.
1015
+ *
1016
+ * :hunk_callback ::
1017
+ * While applying the patch, this callback will be executed per hunk.
1018
+ * The current +hunk+ will be passed to the block. The block's return value
1019
+ * determines further behavior, as per +:delta_callback+.
1020
+ *
1021
+ */
1022
+ static VALUE rb_git_repo_apply(int argc, VALUE *argv, VALUE self)
1023
+ {
1024
+ VALUE rb_diff, rb_options;
1025
+ git_diff *diff;
1026
+ git_repository *repo;
1027
+ git_apply_options opts = GIT_APPLY_OPTIONS_INIT;
1028
+ git_apply_location_t location;
1029
+ struct rugged_apply_cb_payload payload = { Qnil, Qnil, 0 };
1030
+ int error;
1031
+
1032
+ Data_Get_Struct(self, git_repository, repo);
1033
+ if (git_repository_is_bare(repo)) {
1034
+ location = GIT_APPLY_LOCATION_INDEX;
1035
+ } else {
1036
+ location = GIT_APPLY_LOCATION_WORKDIR;
1037
+ }
1038
+
1039
+ rb_scan_args(argc, argv, "11", &rb_diff, &rb_options);
1040
+
1041
+ if (!rb_obj_is_kind_of(rb_diff, rb_cRuggedDiff)) {
1042
+ rb_raise(rb_eArgError, "Expected a Rugged::Diff.");
1043
+ }
1044
+
1045
+ if (!NIL_P(rb_options)) {
1046
+ Check_Type(rb_options, T_HASH);
1047
+ rugged_parse_apply_options(&opts, &location, rb_options, &payload);
1048
+ }
1049
+
1050
+ Data_Get_Struct(rb_diff, git_diff, diff);
1051
+
1052
+ error = git_apply(repo, diff, location, &opts);
1053
+
1054
+ rugged_exception_check(error);
1055
+
1056
+ return Qtrue;
1057
+ }
1058
+
871
1059
  /*
872
1060
  * call-seq:
873
1061
  * repo.merge_commits(our_commit, their_commit, options = {}) -> index
@@ -911,8 +1099,8 @@ static VALUE rb_git_repo_merge_commits(int argc, VALUE *argv, VALUE self)
911
1099
  }
912
1100
 
913
1101
  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);
1102
+ TypedData_Get_Struct(rb_our_commit, git_commit, &rugged_object_type, our_commit);
1103
+ TypedData_Get_Struct(rb_their_commit, git_commit, &rugged_object_type, their_commit);
916
1104
 
917
1105
  error = git_merge_commits(&index, repo, our_commit, their_commit, &opts);
918
1106
  if (error == GIT_EMERGECONFLICT)
@@ -1518,7 +1706,7 @@ static VALUE rb_git_repo_file_status(VALUE self, VALUE rb_path)
1518
1706
 
1519
1707
  static VALUE rb_git_repo_file_each_status(VALUE self)
1520
1708
  {
1521
- int error, exception;
1709
+ int error, exception = 0;
1522
1710
  size_t i, nentries;
1523
1711
  git_repository *repo;
1524
1712
  git_status_list *list;
@@ -2026,7 +2214,7 @@ void rugged_parse_checkout_options(git_checkout_options *opts, VALUE rb_options)
2026
2214
  rb_value = rb_hash_aref(rb_options, CSTR2SYM("baseline"));
2027
2215
  if (!NIL_P(rb_value)) {
2028
2216
  if (rb_obj_is_kind_of(rb_value, rb_cRuggedTree)) {
2029
- Data_Get_Struct(rb_value, git_tree, opts->baseline);
2217
+ TypedData_Get_Struct(rb_value, git_tree, &rugged_object_type, opts->baseline);
2030
2218
  } else {
2031
2219
  rb_raise(rb_eTypeError, "Expected a Rugged::Tree.");
2032
2220
  }
@@ -2190,7 +2378,7 @@ static VALUE rb_git_checkout_tree(int argc, VALUE *argv, VALUE self)
2190
2378
  }
2191
2379
 
2192
2380
  Data_Get_Struct(self, git_repository, repo);
2193
- Data_Get_Struct(rb_treeish, git_object, treeish);
2381
+ TypedData_Get_Struct(rb_treeish, git_object, &rugged_object_type, treeish);
2194
2382
 
2195
2383
  rugged_parse_checkout_options(&opts, rb_options);
2196
2384
 
@@ -2488,7 +2676,7 @@ static VALUE rb_git_repo_cherrypick(int argc, VALUE *argv, VALUE self)
2488
2676
  }
2489
2677
 
2490
2678
  Data_Get_Struct(self, git_repository, repo);
2491
- Data_Get_Struct(rb_commit, git_commit, commit);
2679
+ TypedData_Get_Struct(rb_commit, git_commit, &rugged_object_type, commit);
2492
2680
 
2493
2681
  rugged_parse_cherrypick_options(&opts, rb_options);
2494
2682
 
@@ -2541,8 +2729,8 @@ static VALUE rb_git_repo_cherrypick_commit(int argc, VALUE *argv, VALUE self)
2541
2729
  }
2542
2730
 
2543
2731
  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);
2732
+ TypedData_Get_Struct(rb_commit, git_commit, &rugged_object_type, commit);
2733
+ TypedData_Get_Struct(rb_our_commit, git_commit, &rugged_object_type, our_commit);
2546
2734
 
2547
2735
  rugged_parse_merge_options(&opts, rb_options);
2548
2736
 
@@ -2553,6 +2741,29 @@ static VALUE rb_git_repo_cherrypick_commit(int argc, VALUE *argv, VALUE self)
2553
2741
  return rugged_index_new(rb_cRuggedIndex, self, index);
2554
2742
  }
2555
2743
 
2744
+ /*
2745
+ * call-seq: repo.diff_from_buffer(buffer) -> Rugged::Diff object
2746
+ *
2747
+ * Where +buffer+ is a +String+.
2748
+ * Returns A Rugged::Diff object
2749
+ */
2750
+ static VALUE rb_git_diff_from_buffer(VALUE self, VALUE rb_buffer)
2751
+ {
2752
+ git_diff *diff = NULL;
2753
+ const char *buffer;
2754
+ size_t len;
2755
+ int error;
2756
+
2757
+ Check_Type(rb_buffer, T_STRING);
2758
+ buffer = RSTRING_PTR(rb_buffer);
2759
+ len = RSTRING_LEN(rb_buffer);
2760
+
2761
+ error = git_diff_from_buffer(&diff, buffer, len);
2762
+ rugged_exception_check(error);
2763
+
2764
+ return rugged_diff_new(rb_cRuggedDiff, self, diff);
2765
+ }
2766
+
2556
2767
  void Init_rugged_repo(void)
2557
2768
  {
2558
2769
  id_call = rb_intern("call");
@@ -2608,7 +2819,11 @@ void Init_rugged_repo(void)
2608
2819
  rb_define_method(rb_cRuggedRepo, "merge_analysis", rb_git_repo_merge_analysis, -1);
2609
2820
  rb_define_method(rb_cRuggedRepo, "merge_commits", rb_git_repo_merge_commits, -1);
2610
2821
 
2822
+ rb_define_method(rb_cRuggedRepo, "apply", rb_git_repo_apply, -1);
2823
+
2611
2824
  rb_define_method(rb_cRuggedRepo, "revert_commit", rb_git_repo_revert_commit, -1);
2825
+
2826
+ rb_define_method(rb_cRuggedRepo, "diff_from_buffer", rb_git_diff_from_buffer, 1);
2612
2827
 
2613
2828
  rb_define_method(rb_cRuggedRepo, "path_ignored?", rb_git_repo_is_path_ignored, 1);
2614
2829
 
@@ -2630,7 +2845,7 @@ void Init_rugged_repo(void)
2630
2845
  rb_define_method(rb_cRuggedRepo, "cherrypick_commit", rb_git_repo_cherrypick_commit, -1);
2631
2846
  rb_define_method(rb_cRuggedRepo, "fetch_attributes", rb_git_repo_attributes, -1);
2632
2847
 
2633
- rb_cRuggedOdbObject = rb_define_class_under(rb_mRugged, "OdbObject", rb_cObject);
2848
+ rb_cRuggedOdbObject = rb_define_class_under(rb_mRugged, "OdbObject", rb_cData);
2634
2849
  rb_define_method(rb_cRuggedOdbObject, "data", rb_git_odbobj_data, 0);
2635
2850
  rb_define_method(rb_cRuggedOdbObject, "len", rb_git_odbobj_size, 0);
2636
2851
  rb_define_method(rb_cRuggedOdbObject, "type", rb_git_odbobj_type, 0);