rugged 0.19.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -1
  3. data/README.md +151 -25
  4. data/ext/rugged/extconf.rb +48 -27
  5. data/ext/rugged/rugged.c +107 -35
  6. data/ext/rugged/rugged.h +44 -8
  7. data/ext/rugged/rugged_blame.c +292 -0
  8. data/ext/rugged/rugged_blob.c +84 -31
  9. data/ext/rugged/rugged_branch.c +90 -223
  10. data/ext/rugged/rugged_branch_collection.c +445 -0
  11. data/ext/rugged/rugged_commit.c +190 -9
  12. data/ext/rugged/rugged_config.c +1 -1
  13. data/ext/rugged/rugged_cred.c +125 -0
  14. data/ext/rugged/rugged_diff.c +267 -94
  15. data/ext/rugged/rugged_diff_delta.c +14 -3
  16. data/ext/rugged/rugged_diff_hunk.c +31 -28
  17. data/ext/rugged/rugged_diff_line.c +21 -17
  18. data/ext/rugged/rugged_index.c +326 -6
  19. data/ext/rugged/rugged_note.c +39 -34
  20. data/ext/rugged/rugged_object.c +9 -9
  21. data/ext/rugged/rugged_patch.c +245 -0
  22. data/ext/rugged/rugged_reference.c +67 -332
  23. data/ext/rugged/rugged_reference_collection.c +490 -0
  24. data/ext/rugged/rugged_remote.c +447 -351
  25. data/ext/rugged/rugged_remote_collection.c +285 -0
  26. data/ext/rugged/rugged_repo.c +752 -203
  27. data/ext/rugged/rugged_revwalk.c +119 -27
  28. data/ext/rugged/rugged_settings.c +48 -1
  29. data/ext/rugged/rugged_signature.c +30 -16
  30. data/ext/rugged/rugged_tag.c +86 -191
  31. data/ext/rugged/rugged_tag_collection.c +279 -0
  32. data/ext/rugged/rugged_tree.c +159 -22
  33. data/lib/rugged/branch.rb +8 -17
  34. data/lib/rugged/credentials.rb +43 -0
  35. data/lib/rugged/diff/delta.rb +1 -2
  36. data/lib/rugged/diff/hunk.rb +4 -9
  37. data/lib/rugged/diff/line.rb +23 -3
  38. data/lib/rugged/diff.rb +3 -1
  39. data/lib/rugged/patch.rb +26 -0
  40. data/lib/rugged/reference.rb +1 -3
  41. data/lib/rugged/remote.rb +0 -9
  42. data/lib/rugged/repository.rb +70 -13
  43. data/lib/rugged/tag.rb +23 -18
  44. data/lib/rugged/tree.rb +7 -0
  45. data/lib/rugged/version.rb +1 -1
  46. data/lib/rugged.rb +8 -1
  47. data/vendor/libgit2/AUTHORS +75 -0
  48. data/vendor/libgit2/CMakeLists.txt +490 -0
  49. data/vendor/libgit2/COPYING +920 -0
  50. data/vendor/libgit2/Makefile.embed +25 -7
  51. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +16 -0
  52. data/vendor/libgit2/cmake/Modules/FindHTTP_Parser.cmake +39 -0
  53. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +43 -0
  54. data/vendor/libgit2/cmake/Modules/FindLIBSSH2.cmake +44 -0
  55. data/vendor/libgit2/deps/http-parser/LICENSE-MIT +23 -0
  56. data/vendor/libgit2/deps/regex/regex.c +10 -3
  57. data/vendor/libgit2/include/git2/attr.h +2 -1
  58. data/vendor/libgit2/include/git2/blame.h +213 -0
  59. data/vendor/libgit2/include/git2/blob.h +57 -29
  60. data/vendor/libgit2/include/git2/branch.h +56 -44
  61. data/vendor/libgit2/include/git2/buffer.h +112 -0
  62. data/vendor/libgit2/include/git2/checkout.h +72 -37
  63. data/vendor/libgit2/include/git2/cherrypick.h +87 -0
  64. data/vendor/libgit2/include/git2/clone.h +153 -56
  65. data/vendor/libgit2/include/git2/commit.h +82 -12
  66. data/vendor/libgit2/include/git2/common.h +31 -19
  67. data/vendor/libgit2/include/git2/config.h +124 -19
  68. data/vendor/libgit2/include/git2/cred_helpers.h +1 -1
  69. data/vendor/libgit2/include/git2/diff.h +636 -494
  70. data/vendor/libgit2/include/git2/errors.h +48 -15
  71. data/vendor/libgit2/include/git2/filter.h +149 -0
  72. data/vendor/libgit2/include/git2/graph.h +14 -0
  73. data/vendor/libgit2/include/git2/index.h +95 -54
  74. data/vendor/libgit2/include/git2/indexer.h +15 -9
  75. data/vendor/libgit2/include/git2/merge.h +402 -39
  76. data/vendor/libgit2/include/git2/message.h +9 -14
  77. data/vendor/libgit2/include/git2/net.h +5 -0
  78. data/vendor/libgit2/include/git2/notes.h +6 -6
  79. data/vendor/libgit2/include/git2/object.h +34 -2
  80. data/vendor/libgit2/include/git2/odb.h +77 -14
  81. data/vendor/libgit2/include/git2/odb_backend.h +50 -6
  82. data/vendor/libgit2/include/git2/oid.h +4 -8
  83. data/vendor/libgit2/include/git2/pack.h +58 -4
  84. data/vendor/libgit2/include/git2/patch.h +277 -0
  85. data/vendor/libgit2/include/git2/pathspec.h +263 -0
  86. data/vendor/libgit2/include/git2/push.h +55 -5
  87. data/vendor/libgit2/include/git2/reflog.h +11 -8
  88. data/vendor/libgit2/include/git2/refs.h +219 -33
  89. data/vendor/libgit2/include/git2/refspec.h +3 -4
  90. data/vendor/libgit2/include/git2/remote.h +216 -76
  91. data/vendor/libgit2/include/git2/repository.h +85 -40
  92. data/vendor/libgit2/include/git2/reset.h +15 -4
  93. data/vendor/libgit2/include/git2/revert.h +86 -0
  94. data/vendor/libgit2/include/git2/revparse.h +27 -16
  95. data/vendor/libgit2/include/git2/revwalk.h +44 -6
  96. data/vendor/libgit2/include/git2/signature.h +17 -3
  97. data/vendor/libgit2/include/git2/stash.h +8 -12
  98. data/vendor/libgit2/include/git2/status.h +67 -18
  99. data/vendor/libgit2/include/git2/submodule.h +100 -85
  100. data/vendor/libgit2/include/git2/sys/commit.h +38 -4
  101. data/vendor/libgit2/include/git2/sys/config.h +44 -3
  102. data/vendor/libgit2/include/git2/sys/diff.h +91 -0
  103. data/vendor/libgit2/include/git2/sys/filter.h +301 -0
  104. data/vendor/libgit2/include/git2/sys/index.h +0 -2
  105. data/vendor/libgit2/include/git2/sys/mempack.h +85 -0
  106. data/vendor/libgit2/include/git2/sys/odb_backend.h +33 -11
  107. data/vendor/libgit2/include/git2/sys/refdb_backend.h +51 -5
  108. data/vendor/libgit2/include/git2/sys/reflog.h +21 -0
  109. data/vendor/libgit2/include/git2/sys/refs.h +2 -2
  110. data/vendor/libgit2/include/git2/sys/repository.h +19 -1
  111. data/vendor/libgit2/include/git2/transport.h +216 -75
  112. data/vendor/libgit2/include/git2/tree.h +32 -11
  113. data/vendor/libgit2/include/git2/types.h +124 -10
  114. data/vendor/libgit2/include/git2/version.h +4 -2
  115. data/vendor/libgit2/include/git2.h +41 -40
  116. data/vendor/libgit2/libgit2.pc.in +10 -0
  117. data/vendor/libgit2/src/array.h +16 -8
  118. data/vendor/libgit2/src/attr.c +140 -402
  119. data/vendor/libgit2/src/attr.h +1 -33
  120. data/vendor/libgit2/src/attr_file.c +298 -135
  121. data/vendor/libgit2/src/attr_file.h +61 -22
  122. data/vendor/libgit2/src/attrcache.c +449 -0
  123. data/vendor/libgit2/src/attrcache.h +38 -6
  124. data/vendor/libgit2/src/bitvec.h +75 -0
  125. data/vendor/libgit2/src/blame.c +488 -0
  126. data/vendor/libgit2/src/blame.h +93 -0
  127. data/vendor/libgit2/src/blame_git.c +624 -0
  128. data/vendor/libgit2/src/blame_git.h +20 -0
  129. data/vendor/libgit2/src/blob.c +137 -92
  130. data/vendor/libgit2/src/blob.h +9 -0
  131. data/vendor/libgit2/src/branch.c +175 -156
  132. data/vendor/libgit2/src/buf_text.c +29 -14
  133. data/vendor/libgit2/src/buf_text.h +5 -4
  134. data/vendor/libgit2/src/buffer.c +158 -15
  135. data/vendor/libgit2/src/buffer.h +33 -20
  136. data/vendor/libgit2/src/cc-compat.h +8 -2
  137. data/vendor/libgit2/src/checkout.c +1081 -287
  138. data/vendor/libgit2/src/checkout.h +1 -1
  139. data/vendor/libgit2/src/cherrypick.c +226 -0
  140. data/vendor/libgit2/src/clone.c +297 -245
  141. data/vendor/libgit2/src/{compress.h → clone.h} +4 -8
  142. data/vendor/libgit2/src/commit.c +313 -101
  143. data/vendor/libgit2/src/commit.h +6 -3
  144. data/vendor/libgit2/src/commit_list.c +3 -3
  145. data/vendor/libgit2/src/commit_list.h +1 -1
  146. data/vendor/libgit2/src/common.h +74 -1
  147. data/vendor/libgit2/src/config.c +570 -145
  148. data/vendor/libgit2/src/config.h +39 -6
  149. data/vendor/libgit2/src/config_cache.c +32 -18
  150. data/vendor/libgit2/src/config_file.c +711 -424
  151. data/vendor/libgit2/src/config_file.h +4 -3
  152. data/vendor/libgit2/src/crlf.c +149 -109
  153. data/vendor/libgit2/src/date.c +35 -7
  154. data/vendor/libgit2/src/delta.c +1 -1
  155. data/vendor/libgit2/src/diff.c +719 -414
  156. data/vendor/libgit2/src/diff.h +52 -7
  157. data/vendor/libgit2/src/diff_driver.c +183 -85
  158. data/vendor/libgit2/src/diff_driver.h +1 -1
  159. data/vendor/libgit2/src/diff_file.c +65 -84
  160. data/vendor/libgit2/src/diff_file.h +12 -10
  161. data/vendor/libgit2/src/diff_patch.c +274 -333
  162. data/vendor/libgit2/src/diff_patch.h +10 -9
  163. data/vendor/libgit2/src/diff_print.c +381 -179
  164. data/vendor/libgit2/src/diff_stats.c +336 -0
  165. data/vendor/libgit2/src/diff_tform.c +393 -215
  166. data/vendor/libgit2/src/diff_xdiff.c +117 -42
  167. data/vendor/libgit2/src/errors.c +59 -4
  168. data/vendor/libgit2/src/fetch.c +40 -34
  169. data/vendor/libgit2/src/fetch.h +2 -5
  170. data/vendor/libgit2/src/fetchhead.c +14 -7
  171. data/vendor/libgit2/src/filebuf.c +13 -24
  172. data/vendor/libgit2/src/filebuf.h +3 -3
  173. data/vendor/libgit2/src/fileops.c +104 -296
  174. data/vendor/libgit2/src/fileops.h +23 -94
  175. data/vendor/libgit2/src/filter.c +642 -43
  176. data/vendor/libgit2/src/filter.h +7 -66
  177. data/vendor/libgit2/src/fnmatch.c +46 -3
  178. data/vendor/libgit2/src/fnmatch.h +24 -3
  179. data/vendor/libgit2/src/global.c +158 -42
  180. data/vendor/libgit2/src/global.h +9 -0
  181. data/vendor/libgit2/src/graph.c +34 -20
  182. data/vendor/libgit2/src/hash/hash_generic.h +0 -1
  183. data/vendor/libgit2/src/hash/hash_openssl.h +0 -1
  184. data/vendor/libgit2/src/hash/hash_win32.c +14 -29
  185. data/vendor/libgit2/src/hash.h +0 -2
  186. data/vendor/libgit2/src/hashsig.c +97 -117
  187. data/vendor/libgit2/src/ident.c +125 -0
  188. data/vendor/libgit2/src/ignore.c +159 -110
  189. data/vendor/libgit2/src/ignore.h +13 -3
  190. data/vendor/libgit2/src/index.c +803 -445
  191. data/vendor/libgit2/src/index.h +43 -6
  192. data/vendor/libgit2/src/indexer.c +475 -157
  193. data/vendor/libgit2/src/iterator.c +198 -55
  194. data/vendor/libgit2/src/iterator.h +28 -4
  195. data/vendor/libgit2/src/map.h +1 -0
  196. data/vendor/libgit2/src/merge.c +849 -142
  197. data/vendor/libgit2/src/merge.h +11 -4
  198. data/vendor/libgit2/src/merge_file.c +183 -78
  199. data/vendor/libgit2/src/merge_file.h +0 -57
  200. data/vendor/libgit2/src/message.c +4 -28
  201. data/vendor/libgit2/src/mwindow.c +117 -8
  202. data/vendor/libgit2/src/mwindow.h +9 -1
  203. data/vendor/libgit2/src/netops.c +164 -59
  204. data/vendor/libgit2/src/netops.h +37 -1
  205. data/vendor/libgit2/src/notes.c +9 -18
  206. data/vendor/libgit2/src/notes.h +1 -1
  207. data/vendor/libgit2/src/object.c +78 -2
  208. data/vendor/libgit2/src/odb.c +191 -59
  209. data/vendor/libgit2/src/odb.h +2 -1
  210. data/vendor/libgit2/src/odb_loose.c +66 -51
  211. data/vendor/libgit2/src/odb_mempack.c +182 -0
  212. data/vendor/libgit2/src/odb_pack.c +151 -61
  213. data/vendor/libgit2/src/oid.c +30 -19
  214. data/vendor/libgit2/src/oid.h +13 -10
  215. data/vendor/libgit2/src/pack-objects.c +198 -147
  216. data/vendor/libgit2/src/pack-objects.h +7 -0
  217. data/vendor/libgit2/src/pack.c +272 -101
  218. data/vendor/libgit2/src/pack.h +15 -1
  219. data/vendor/libgit2/src/path.c +359 -117
  220. data/vendor/libgit2/src/path.h +110 -20
  221. data/vendor/libgit2/src/pathspec.c +583 -57
  222. data/vendor/libgit2/src/pathspec.h +36 -15
  223. data/vendor/libgit2/src/pool.c +4 -5
  224. data/vendor/libgit2/src/posix.c +45 -2
  225. data/vendor/libgit2/src/posix.h +13 -5
  226. data/vendor/libgit2/src/pqueue.c +73 -119
  227. data/vendor/libgit2/src/pqueue.h +35 -82
  228. data/vendor/libgit2/src/push.c +116 -48
  229. data/vendor/libgit2/src/push.h +5 -0
  230. data/vendor/libgit2/src/refdb.c +45 -6
  231. data/vendor/libgit2/src/refdb.h +13 -3
  232. data/vendor/libgit2/src/refdb_fs.c +1130 -551
  233. data/vendor/libgit2/src/reflog.c +36 -327
  234. data/vendor/libgit2/src/reflog.h +6 -1
  235. data/vendor/libgit2/src/refs.c +345 -142
  236. data/vendor/libgit2/src/refs.h +9 -2
  237. data/vendor/libgit2/src/refspec.c +90 -62
  238. data/vendor/libgit2/src/refspec.h +7 -24
  239. data/vendor/libgit2/src/remote.c +815 -415
  240. data/vendor/libgit2/src/remote.h +3 -4
  241. data/vendor/libgit2/src/repository.c +360 -207
  242. data/vendor/libgit2/src/repository.h +16 -10
  243. data/vendor/libgit2/src/reset.c +28 -13
  244. data/vendor/libgit2/src/revert.c +228 -0
  245. data/vendor/libgit2/src/revparse.c +29 -30
  246. data/vendor/libgit2/src/revwalk.c +141 -96
  247. data/vendor/libgit2/src/revwalk.h +6 -1
  248. data/vendor/libgit2/src/settings.c +140 -0
  249. data/vendor/libgit2/src/sha1_lookup.c +71 -0
  250. data/vendor/libgit2/src/sha1_lookup.h +5 -0
  251. data/vendor/libgit2/src/signature.c +38 -10
  252. data/vendor/libgit2/src/sortedcache.c +378 -0
  253. data/vendor/libgit2/src/sortedcache.h +178 -0
  254. data/vendor/libgit2/src/stash.c +98 -116
  255. data/vendor/libgit2/src/status.c +88 -60
  256. data/vendor/libgit2/src/status.h +2 -2
  257. data/vendor/libgit2/src/strmap.c +32 -0
  258. data/vendor/libgit2/src/strmap.h +14 -1
  259. data/vendor/libgit2/src/strnlen.h +23 -0
  260. data/vendor/libgit2/src/submodule.c +1073 -615
  261. data/vendor/libgit2/src/submodule.h +89 -21
  262. data/vendor/libgit2/src/sysdir.c +252 -0
  263. data/vendor/libgit2/src/sysdir.h +101 -0
  264. data/vendor/libgit2/src/tag.c +31 -20
  265. data/vendor/libgit2/src/thread-utils.h +98 -17
  266. data/vendor/libgit2/src/trace.h +0 -2
  267. data/vendor/libgit2/src/transport.c +76 -6
  268. data/vendor/libgit2/src/transports/cred.c +164 -61
  269. data/vendor/libgit2/src/transports/git.c +41 -48
  270. data/vendor/libgit2/src/transports/http.c +65 -109
  271. data/vendor/libgit2/src/transports/local.c +88 -65
  272. data/vendor/libgit2/src/transports/smart.c +91 -19
  273. data/vendor/libgit2/src/transports/smart.h +13 -5
  274. data/vendor/libgit2/src/transports/smart_pkt.c +24 -14
  275. data/vendor/libgit2/src/transports/smart_protocol.c +268 -113
  276. data/vendor/libgit2/src/transports/ssh.c +284 -186
  277. data/vendor/libgit2/src/transports/winhttp.c +279 -198
  278. data/vendor/libgit2/src/tree-cache.c +21 -23
  279. data/vendor/libgit2/src/tree-cache.h +1 -0
  280. data/vendor/libgit2/src/tree.c +109 -92
  281. data/vendor/libgit2/src/tree.h +2 -3
  282. data/vendor/libgit2/src/unix/map.c +7 -1
  283. data/vendor/libgit2/src/unix/posix.h +0 -1
  284. data/vendor/libgit2/src/userdiff.h +208 -0
  285. data/vendor/libgit2/src/util.c +16 -112
  286. data/vendor/libgit2/src/util.h +107 -3
  287. data/vendor/libgit2/src/vector.c +72 -17
  288. data/vendor/libgit2/src/vector.h +32 -5
  289. data/vendor/libgit2/src/win32/dir.c +15 -40
  290. data/vendor/libgit2/src/win32/dir.h +3 -2
  291. data/vendor/libgit2/src/win32/error.c +5 -31
  292. data/vendor/libgit2/src/win32/findfile.c +47 -66
  293. data/vendor/libgit2/src/win32/findfile.h +1 -12
  294. data/vendor/libgit2/src/win32/git2.rc +40 -0
  295. data/vendor/libgit2/src/win32/map.c +7 -1
  296. data/vendor/libgit2/src/win32/mingw-compat.h +3 -0
  297. data/vendor/libgit2/src/win32/posix.h +17 -11
  298. data/vendor/libgit2/src/win32/posix_w32.c +424 -292
  299. data/vendor/libgit2/src/win32/precompiled.h +6 -2
  300. data/vendor/libgit2/src/win32/pthread.c +141 -18
  301. data/vendor/libgit2/src/win32/pthread.h +50 -8
  302. data/vendor/libgit2/src/win32/reparse.h +57 -0
  303. data/vendor/libgit2/src/win32/utf-conv.c +117 -60
  304. data/vendor/libgit2/src/win32/utf-conv.h +81 -6
  305. data/vendor/libgit2/src/win32/version.h +21 -4
  306. data/vendor/libgit2/src/win32/w32_util.c +139 -0
  307. data/vendor/libgit2/src/win32/w32_util.h +54 -0
  308. data/vendor/libgit2/src/zstream.c +156 -0
  309. data/vendor/libgit2/src/zstream.h +39 -0
  310. metadata +84 -167
  311. data/Rakefile +0 -61
  312. data/ext/rugged/rugged_diff_patch.c +0 -169
  313. data/lib/rugged/diff/patch.rb +0 -28
  314. data/test/blob_test.rb +0 -341
  315. data/test/branch_test.rb +0 -199
  316. data/test/commit_test.rb +0 -104
  317. data/test/config_test.rb +0 -45
  318. data/test/coverage/cover.rb +0 -133
  319. data/test/diff_test.rb +0 -777
  320. data/test/errors_test.rb +0 -34
  321. data/test/fixtures/alternate/objects/14/6ae76773c91e3b1d00cf7a338ec55ae58297e2 +0 -0
  322. data/test/fixtures/alternate/objects/14/9c32d47e99d0a3572ff1e70a2e0051bbf347a9 +0 -0
  323. data/test/fixtures/alternate/objects/14/fb3108588f9421bf764041e5e3ac305eb6277f +0 -0
  324. data/test/fixtures/archive.tar.gz +0 -0
  325. data/test/fixtures/attr/attr0 +0 -1
  326. data/test/fixtures/attr/attr1 +0 -29
  327. data/test/fixtures/attr/attr2 +0 -21
  328. data/test/fixtures/attr/attr3 +0 -4
  329. data/test/fixtures/attr/binfile +0 -1
  330. data/test/fixtures/attr/dir/file +0 -0
  331. data/test/fixtures/attr/file +0 -1
  332. data/test/fixtures/attr/gitattributes +0 -29
  333. data/test/fixtures/attr/gitignore +0 -2
  334. data/test/fixtures/attr/ign +0 -1
  335. data/test/fixtures/attr/macro_bad +0 -1
  336. data/test/fixtures/attr/macro_test +0 -1
  337. data/test/fixtures/attr/root_test1 +0 -1
  338. data/test/fixtures/attr/root_test2 +0 -6
  339. data/test/fixtures/attr/root_test3 +0 -19
  340. data/test/fixtures/attr/root_test4.txt +0 -14
  341. data/test/fixtures/attr/sub/abc +0 -37
  342. data/test/fixtures/attr/sub/dir/file +0 -0
  343. data/test/fixtures/attr/sub/file +0 -1
  344. data/test/fixtures/attr/sub/ign/file +0 -1
  345. data/test/fixtures/attr/sub/ign/sub/file +0 -1
  346. data/test/fixtures/attr/sub/sub/dir +0 -0
  347. data/test/fixtures/attr/sub/sub/file +0 -1
  348. data/test/fixtures/attr/sub/sub/subsub.txt +0 -1
  349. data/test/fixtures/attr/sub/subdir_test1 +0 -2
  350. data/test/fixtures/attr/sub/subdir_test2.txt +0 -1
  351. data/test/fixtures/diff/another.txt +0 -38
  352. data/test/fixtures/diff/readme.txt +0 -36
  353. data/test/fixtures/mergedrepo/conflicts-one.txt +0 -5
  354. data/test/fixtures/mergedrepo/conflicts-two.txt +0 -5
  355. data/test/fixtures/mergedrepo/one.txt +0 -10
  356. data/test/fixtures/mergedrepo/two.txt +0 -12
  357. data/test/fixtures/status/current_file +0 -1
  358. data/test/fixtures/status/ignored_file +0 -1
  359. data/test/fixtures/status/modified_file +0 -2
  360. data/test/fixtures/status/new_file +0 -1
  361. data/test/fixtures/status/staged_changes +0 -2
  362. data/test/fixtures/status/staged_changes_modified_file +0 -3
  363. data/test/fixtures/status/staged_delete_modified_file +0 -1
  364. data/test/fixtures/status/staged_new_file +0 -1
  365. data/test/fixtures/status/staged_new_file_modified_file +0 -2
  366. data/test/fixtures/status/subdir/current_file +0 -1
  367. data/test/fixtures/status/subdir/modified_file +0 -2
  368. data/test/fixtures/status/subdir/new_file +0 -1
  369. data/test/fixtures/status/subdir.txt +0 -2
  370. data/test/fixtures/status//350/277/231 +0 -1
  371. data/test/fixtures/testrepo.git/HEAD +0 -1
  372. data/test/fixtures/testrepo.git/config +0 -13
  373. data/test/fixtures/testrepo.git/description +0 -1
  374. data/test/fixtures/testrepo.git/index +0 -0
  375. data/test/fixtures/testrepo.git/info/exclude +0 -6
  376. data/test/fixtures/testrepo.git/logs/HEAD +0 -3
  377. data/test/fixtures/testrepo.git/logs/refs/heads/master +0 -3
  378. data/test/fixtures/testrepo.git/logs/refs/notes/commits +0 -1
  379. data/test/fixtures/testrepo.git/objects/0c/37a5391bbff43c37f0d0371823a5509eed5b1d +0 -0
  380. data/test/fixtures/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +0 -0
  381. data/test/fixtures/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +0 -0
  382. data/test/fixtures/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd +0 -0
  383. data/test/fixtures/testrepo.git/objects/2d/2eff63372b08adf0a9eb84109ccf7d19e2f3a2 +0 -0
  384. data/test/fixtures/testrepo.git/objects/36/060c58702ed4c2a40832c51758d5344201d89a +0 -2
  385. data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +0 -1
  386. data/test/fixtures/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
  387. data/test/fixtures/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 +0 -2
  388. data/test/fixtures/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 +0 -2
  389. data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
  390. data/test/fixtures/testrepo.git/objects/61/9f9935957e010c419cb9d15621916ddfcc0b96 +0 -0
  391. data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +0 -1
  392. data/test/fixtures/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +0 -0
  393. data/test/fixtures/testrepo.git/objects/77/71329dfa3002caf8c61a0ceb62a31d09023f37 +0 -0
  394. data/test/fixtures/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +0 -0
  395. data/test/fixtures/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +0 -0
  396. data/test/fixtures/testrepo.git/objects/94/eca2de348d5f672faf56b0decafa5937e3235e +0 -0
  397. data/test/fixtures/testrepo.git/objects/9b/7384fe1676186192842f5d3e129457b62db9e3 +0 -0
  398. data/test/fixtures/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a +0 -3
  399. data/test/fixtures/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f +0 -2
  400. data/test/fixtures/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +0 -0
  401. data/test/fixtures/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +0 -0
  402. data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +0 -3
  403. data/test/fixtures/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 +0 -3
  404. data/test/fixtures/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd +0 -3
  405. data/test/fixtures/testrepo.git/objects/c4/dc1555e4d4fa0e0c9c3fc46734c7c35b3ce90b +0 -0
  406. data/test/fixtures/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  407. data/test/fixtures/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +0 -0
  408. data/test/fixtures/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +0 -0
  409. data/test/fixtures/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 +0 -0
  410. data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx +0 -0
  411. data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack +0 -0
  412. data/test/fixtures/testrepo.git/packed-refs +0 -2
  413. data/test/fixtures/testrepo.git/refs/heads/master +0 -1
  414. data/test/fixtures/testrepo.git/refs/notes/commits +0 -1
  415. data/test/fixtures/testrepo.git/refs/tags/v0.9 +0 -1
  416. data/test/fixtures/testrepo.git/refs/tags/v1.0 +0 -1
  417. data/test/fixtures/text_file.md +0 -464
  418. data/test/fixtures/unsymlinked.git/HEAD +0 -1
  419. data/test/fixtures/unsymlinked.git/config +0 -6
  420. data/test/fixtures/unsymlinked.git/description +0 -1
  421. data/test/fixtures/unsymlinked.git/info/exclude +0 -2
  422. data/test/fixtures/unsymlinked.git/objects/08/8b64704e0d6b8bd061dea879418cb5442a3fbf +0 -0
  423. data/test/fixtures/unsymlinked.git/objects/13/a5e939bca25940c069fd2169d993dba328e30b +0 -0
  424. data/test/fixtures/unsymlinked.git/objects/19/bf568e59e3a0b363cafb4106226e62d4a4c41c +0 -0
  425. data/test/fixtures/unsymlinked.git/objects/58/1fadd35b4cf320d102a152f918729011604773 +0 -0
  426. data/test/fixtures/unsymlinked.git/objects/5c/87b6791e8b13da658a14d1ef7e09b5dc3bac8c +0 -0
  427. data/test/fixtures/unsymlinked.git/objects/6f/e5f5398af85fb3de8a6aba0339b6d3bfa26a27 +0 -0
  428. data/test/fixtures/unsymlinked.git/objects/7f/ccd75616ec188b8f1b23d67506a334cc34a49d +0 -0
  429. data/test/fixtures/unsymlinked.git/objects/80/6999882bf91d24241e4077906b9017605eb1f3 +0 -0
  430. data/test/fixtures/unsymlinked.git/objects/83/7d176303c5005505ec1e4a30231c40930c0230 +0 -0
  431. data/test/fixtures/unsymlinked.git/objects/a8/595ccca04f40818ae0155c8f9c77a230e597b6 +0 -2
  432. data/test/fixtures/unsymlinked.git/objects/cf/8f1cf5cce859c438d6cc067284cb5e161206e7 +0 -0
  433. data/test/fixtures/unsymlinked.git/objects/d5/278d05c8607ec420bfee4cf219fbc0eeebfd6a +0 -0
  434. data/test/fixtures/unsymlinked.git/objects/f4/e16fb76536591a41454194058d048d8e4dd2e9 +0 -0
  435. data/test/fixtures/unsymlinked.git/objects/f9/e65619d93fdf2673882e0a261c5e93b1a84006 +0 -0
  436. data/test/fixtures/unsymlinked.git/refs/heads/exe-file +0 -1
  437. data/test/fixtures/unsymlinked.git/refs/heads/master +0 -1
  438. data/test/fixtures/unsymlinked.git/refs/heads/reg-file +0 -1
  439. data/test/index_test.rb +0 -333
  440. data/test/lib_test.rb +0 -127
  441. data/test/note_test.rb +0 -158
  442. data/test/object_test.rb +0 -43
  443. data/test/reference_test.rb +0 -207
  444. data/test/remote_test.rb +0 -324
  445. data/test/repo_pack_test.rb +0 -24
  446. data/test/repo_reset_test.rb +0 -82
  447. data/test/repo_test.rb +0 -402
  448. data/test/tag_test.rb +0 -68
  449. data/test/test_helper.rb +0 -92
  450. data/test/tree_test.rb +0 -91
  451. data/test/walker_test.rb +0 -88
  452. data/vendor/libgit2/src/amiga/map.c +0 -48
  453. data/vendor/libgit2/src/compress.c +0 -53
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b0356879d784d17079ccdae0dfef24d5841c0774
4
+ data.tar.gz: 2a4d772157bcc8b25f61a7745d1694507bc56ca4
5
+ SHA512:
6
+ metadata.gz: d6f0d49db816f5337decf934efda9529ddbf8beaf6edfa72737f661e7b5759afd7b4f27f21734de0098e101bc7b714b90aad674c450344d7cd7865de5fe73e3b
7
+ data.tar.gz: cf7dca7617881507c212c4c813bd41494d31ed1c3d8579092dc138a5b449d89af5264c9b673cf938f39a8781c000c768bcf498bd82136afb167e950d617b88bc
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2013 GitHub, Inc
3
+ Copyright (c) 2014 GitHub, Inc
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -17,7 +17,9 @@ Rugged is a self-contained gem. You can install it by running:
17
17
 
18
18
  $ gem install rugged
19
19
 
20
- If you're using bundler and want to bundle libgit2 with rugged, you can use the `:submodules` option:
20
+ You need to have CMake installed on your system to be able to build the included version of `libgit2`. If you want to build Rugged with HTTPS and SSH support, check out the list of optional [libgit2 dependencies](https://github.com/libgit2/libgit2#optional-dependencies).
21
+
22
+ If you're using bundler and want to bundle `libgit2` with Rugged, you can use the `:submodules` option:
21
23
 
22
24
  ```ruby
23
25
  gem 'rugged', git: 'git://github.com/libgit2/rugged.git', branch: 'development', submodules: true
@@ -29,6 +31,24 @@ To load Rugged, you'll usually want to add something like this:
29
31
  require 'rugged'
30
32
  ```
31
33
 
34
+ ### Use the system provided libgit2
35
+
36
+ By default, Rugged builds and uses a bundled version of libgit2. If you
37
+ want to use the system library instead, you can install rugged as follows:
38
+
39
+ ```
40
+ gem install rugged -- --use-system-libraries
41
+ ```
42
+
43
+ Or if you are using bundler:
44
+
45
+ ```
46
+ bundle config build.rugged --use-system-libraries
47
+ bundle install
48
+ ```
49
+
50
+ However, note that Rugged does only support specific versions of libgit2.
51
+
32
52
  ## Usage
33
53
 
34
54
  Rugged gives you access to the many parts of a Git repository. You can read and
@@ -122,7 +142,8 @@ more high-level, so it may be preferable:
122
142
 
123
143
  ```ruby
124
144
  oid = repo.write("This is a blob.", :blob)
125
- index = Rugged::Index.new
145
+ index = repo.index
146
+ index.read_tree(repo.head.target.tree)
126
147
  index.add(:path => "README.md", :oid => oid, :mode => 0100644)
127
148
 
128
149
  options = {}
@@ -254,6 +275,46 @@ options[:update_ref] = 'HEAD'
254
275
  Rugged::Commit.create(repo, options)
255
276
  ```
256
277
 
278
+ ### Blob Objects
279
+
280
+ Blob objects represent the data in the files of a Tree Object.
281
+
282
+ ```ruby
283
+ blob = repo.lookup('e1253910439ea902cf49be8a9f02f3c08d89ac73')
284
+ blob.content # => Gives you the content of the blob.
285
+ ```
286
+
287
+ #### Streaming Blob Objects
288
+
289
+ There is currently no way to stream data from a blob, because `libgit2` itself does not (yet) support
290
+ streaming blobs out of the git object database. While there are hooks and interfaces for supporting it,
291
+ the default file system backend always loads the entire blob contents into memory.
292
+
293
+ If you need to access a Blob object through an IO-like API, you can wrap it with the `StringIO` class.
294
+ Note that the only advantage here is a stream-compatible interface, the complete blob object will still
295
+ be loaded into memory. Below is an example for streaming a Blob using the Sinatra framework:
296
+
297
+ ```ruby
298
+ # Sinatra endpoint
299
+ get "/blobs/:sha" do
300
+ repo = Rugged::Repository.new(my_repo_path)
301
+ blob = repo.lookup params[:sha]
302
+
303
+ headers({
304
+ "Vary" => "Accept",
305
+ "Connection" => "keep-alive",
306
+ "Transfer-Encoding" => "chunked",
307
+ "Content-Type" => "application/octet-stream",
308
+ })
309
+
310
+ stream do |out|
311
+ StringIO.new(blob.content).each(8000) do |chunk|
312
+ out << chunk
313
+ end
314
+ end
315
+ end
316
+ ```
317
+
257
318
  ---
258
319
 
259
320
  ### Commit Walker
@@ -315,29 +376,28 @@ index.add(path)
315
376
 
316
377
  ### Refs
317
378
 
318
- The `Rugged::Reference` class allows you to list, create and delete packed and loose refs.
379
+ You can access references through the `Rugged::ReferenceCollection` object returned by `Repository#references`.
319
380
 
320
381
  ```ruby
321
- ref = repo.head # or...
322
- ref = Rugged::Reference.lookup(repo, "refs/heads/master")
382
+ ref = repo.references["refs/heads/master"]
323
383
 
324
- sha = ref.target
384
+ sha = ref.target_id
325
385
  str = ref.type # :direct
326
386
  str = ref.name # "refs/heads/master"
327
387
  ```
328
388
 
329
- You can also easily get an array of references:
389
+ You can also easily iterate over all references:
330
390
 
331
391
  ```ruby
332
- repo.refs.each do |ref|
392
+ repo.references.each do |ref|
333
393
  puts ref.name
334
394
  end
335
395
  ```
336
396
 
337
- Or use a pattern (regex):
397
+ Or only over references that match the given pattern (glob):
338
398
 
339
399
  ```ruby
340
- repo.refs(/tags/).each do |ref|
400
+ repo.references.each("refs/tags/*") do |ref|
341
401
  puts ref.name
342
402
  end
343
403
  ```
@@ -345,19 +405,22 @@ end
345
405
  It is also easy to create, update, rename or delete a reference:
346
406
 
347
407
  ```ruby
348
- ref = Rugged::Reference.create(repo, "refs/heads/unit_test", some_commit_sha)
408
+ ref = repo.references.create("refs/heads/unit_test", some_commit_sha)
349
409
 
350
- ref.set_target(new_sha)
410
+ repo.references.update(ref, new_sha) # or...
411
+ repo.references.update("refs/heads/unit_test", new_sha)
351
412
 
352
- ref.rename("refs/heads/blead")
413
+ repo.references.rename(ref, "refs/heads/blead") # or...
414
+ repo.references.rename("refs/heads/unit_test", "refs/heads/blead")
353
415
 
354
- ref.delete!
416
+ repo.references.delete(ref) # or...
417
+ repo.references.delete("refs/heads/unit_test") # or...
355
418
  ```
356
419
 
357
420
  Finally, you can access the reflog for any branch:
358
421
 
359
422
  ```ruby
360
- ref = Rugged::Reference.lookup(repo, "refs/heads/master")
423
+ ref = repo.references["refs/heads/master"]
361
424
  entry = ref.log.first
362
425
  sha = entry[:id_old]
363
426
  sha = entry[:id_new]
@@ -369,42 +432,99 @@ prsn = entry[:committer]
369
432
 
370
433
  ### Branches
371
434
 
372
- `Rugged::Branch` will help you with all of your branch-related needs.
435
+ The `Rugged::BranchCollection` object returned by `Repository#branches` will help
436
+ you with all of your branch-related needs.
373
437
 
374
438
  Iterate over all branches:
375
439
 
376
440
  ```ruby
377
- Rugged::Branch.each_name(repo).sort
441
+ repo.branches.each_name().sort
378
442
  # => ["master", "origin/HEAD", "origin/master", "origin/packed"]
379
443
 
380
- Rugged::Branch.each_name(repo, :local).sort
444
+ repo.branches.each_name(:local).sort
381
445
  # => ["master"]
382
446
 
383
- Rugged::Branch.each_name(repo, :remote).sort
447
+ repo.branches.each_name(:remote).sort
384
448
  # => ["origin/HEAD", "origin/master", "origin/packed"]
385
449
  ```
386
450
 
387
451
  Look up branches and get attributes:
388
452
 
389
453
  ```ruby
390
- branch = Rugged::Branch.lookup(repo, "master")
454
+ branch = repo.branches["master"]
391
455
  branch.name # => 'master'
392
456
  branch.canonical_name # => 'refs/heads/master'
393
457
  ```
394
458
 
395
- Look up the oid for the tip of a branch:
459
+ Look up the id for the target of a branch:
396
460
 
397
461
  ```ruby
398
- Rugged::Branch.lookup(repo, "master").tip.oid
462
+ repo.branches["master"].target_id
399
463
  # => "36060c58702ed4c2a40832c51758d5344201d89a"
400
464
  ```
401
465
 
402
466
  Creation and deletion:
403
467
 
404
468
  ```ruby
405
- branch = repo.create_branch("test_branch")
406
- branch.move("new_branch")
407
- branch.delete!
469
+ branch = repo.branches.create("test_branch", "HEAD")
470
+
471
+ repo.branches.rename("test_branch", "new_branch") # or...
472
+ repo.branches.rename("refs/heads/test_branch", "new_branch") # or...
473
+ repo.branches.rename(ref, "new_branch") # or...
474
+
475
+ repo.branches.delete("test_branch") # or...
476
+ repo.branches.delete("refs/heads/test_branch") # or...
477
+ repo.branches.delete(ref) # or...
478
+ ```
479
+
480
+ ---
481
+
482
+ ### Diffs
483
+
484
+ There are various ways to get hands on diffs:
485
+
486
+ ```ruby
487
+ # Diff between two subsequent commits
488
+ diff_commits = commit_object.parents[0].diff(commit_object)
489
+
490
+ # Diff between two tree objects
491
+ diff_trees = tree_object_a.diff(tree_object_b)
492
+
493
+ # Diff between index/staging and current working directory
494
+ diff_index = repository.index.diff
495
+
496
+ # Diff between index/staging and another diffable (commit/tree/index)
497
+ diff_index_diffable = repository.index.diff(some_diffable)
498
+ ```
499
+
500
+ When you already have a diff object, you can examine it:
501
+
502
+ ```ruby
503
+ # Get patch
504
+ diff.patch
505
+ => "diff --git a/foo1 b/foo1\nnew file mode 100644\nindex 0000000..81b68f0\n--- /dev/null\n+++ b/foo1\n@@ -0,0 +1,2 @@\n+abc\n+add line1\ndiff --git a/txt1 b/txt1\ndeleted file mode 100644\nindex 81b68f0..0000000\n--- a/txt1\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-abc\n-add line1\ndiff --git a/txt2 b/txt2\nindex a7bb42f..a357de7 100644\n--- a/txt2\n+++ b/txt2\n@@ -1,2 +1,3 @@\n abc2\n add line2-1\n+add line2-2\n"
506
+
507
+ # Get delta (faster, if you only need information on what files changed)
508
+ diff.each_delta{ |d| puts d.inspect }
509
+ #<Rugged::Diff::Delta:70144372137380 {old_file: {:oid=>"0000000000000000000000000000000000000000", :path=>"foo1", :size=>0, :flags=>6, :mode=>0}, new_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"foo1", :size=>14, :flags=>6, :mode=>33188}, similarity: 0, status: :added>
510
+ #<Rugged::Diff::Delta:70144372136540 {old_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"txt1", :size=>14, :flags=>6, :mode=>33188}, new_file: {:oid=>"0000000000000000000000000000000000000000", :path=>"txt1", :size=>0, :flags=>6, :mode=>0}, similarity: 0, status: :deleted>
511
+ #<Rugged::Diff::Delta:70144372135780 {old_file: {:oid=>"a7bb42f71183c162efea5e4c80597437d716c62b", :path=>"txt2", :size=>17, :flags=>6, :mode=>33188}, new_file: {:oid=>"a357de7d870823acc3953f1b2471f9c18d0d56ea", :path=>"txt2", :size=>29, :flags=>6, :mode=>33188}, similarity: 0, status: :modified>
512
+
513
+ # Detect renamed files
514
+ # Note that the status field changed from :added/:deleted to :renamed
515
+ diff.find_similar!
516
+ diff.each_delta{ |d| puts d.inspect }
517
+ #<Rugged::Diff::Delta:70144372230920 {old_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"txt1", :size=>14, :flags=>6, :mode=>33188}, new_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"foo1", :size=>14, :flags=>6, :mode=>33188}, similarity: 100, status: :renamed>
518
+ #<Rugged::Diff::Delta:70144372230140 {old_file: {:oid=>"a7bb42f71183c162efea5e4c80597437d716c62b", :path=>"txt2", :size=>17, :flags=>6, :mode=>33188}, new_file: {:oid=>"a357de7d870823acc3953f1b2471f9c18d0d56ea", :path=>"txt2", :size=>29, :flags=>6, :mode=>33188}, similarity: 0, status: :modified>
519
+
520
+ # Merge one diff into another (mutating the first one)
521
+ diff1.merge!(diff2)
522
+
523
+ # Write a patch into a file (or any other object responding to write)
524
+ # Note that the patch as in diff.patch will be written, it won't be applied
525
+ file = File.open('/some/file', 'w')
526
+ diff.write_patch(file)
527
+ file.close
408
528
  ```
409
529
 
410
530
  ---
@@ -458,11 +578,17 @@ Simply clone and install:
458
578
  $ rake compile
459
579
  $ rake test
460
580
 
581
+ ## Support
582
+
583
+ We encourage you to use StackOverflow for any questions or concerns regarding Rugged. Please tag your questions with the [rugged](http://stackoverflow.com/questions/tagged/rugged) keyword.
584
+
585
+ For bug reports, please open a ticket on the GitHub [issue tracker](https://github.com/libgit2/rugged/issues).
461
586
 
462
587
  ## Authors
463
588
 
464
589
  * Vicent Marti <tanoku@gmail.com>
465
590
  * Scott Chacon <schacon@gmail.com>
591
+ * Arthur Schreiber <schreiber.arthur@gmail.com>
466
592
 
467
593
 
468
594
  ## License
@@ -4,11 +4,8 @@ RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
4
4
 
5
5
  $CFLAGS << " #{ENV["CFLAGS"]}"
6
6
  $CFLAGS << " -g"
7
-
8
- if RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc|clang/
9
- $CFLAGS << " -O3" unless $CFLAGS[/-O\d/]
10
- $CFLAGS << " -Wall"
11
- end
7
+ $CFLAGS << " -O3" unless $CFLAGS[/-O\d/]
8
+ $CFLAGS << " -Wall -Wno-comment"
12
9
 
13
10
  def sys(cmd)
14
11
  puts " -- #{cmd}"
@@ -18,39 +15,63 @@ def sys(cmd)
18
15
  ret
19
16
  end
20
17
 
21
- MAKE_PROGRAM = find_executable('gmake') || find_executable('make')
18
+ if !find_executable('cmake')
19
+ abort "ERROR: CMake is required to build Rugged."
20
+ end
22
21
 
23
- if MAKE_PROGRAM.nil?
24
- STDERR.puts "ERROR: GNU make is required to build Rugged"
25
- exit(1)
22
+ if !(MAKE = find_executable('gmake') || find_executable('make'))
23
+ abort "ERROR: GNU make is required to build Rugged."
26
24
  end
27
25
 
28
- if p = ENV['LIBGIT2_PATH']
29
- $INCFLAGS[0,0] = " -I#{File.join(p, 'include')} "
30
- $LDFLAGS << " -L#{p} "
31
- unless have_library 'git2' and have_header 'git2.h'
32
- STDERR.puts "ERROR: Invalid `LIBGIT2_PATH` environment"
33
- exit(1)
34
- end
26
+ if !find_executable('pkg-config')
27
+ abort "ERROR: pkg-config is required to build Rugged."
28
+ end
29
+
30
+ if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES'])
31
+ puts "Building Rugged using system libraries.\n"
32
+
33
+ dir_config('git2').any? or pkg_config('libgit2')
34
+
35
+ try_compile(<<-SRC) or abort "libgit2 version is not compatible"
36
+ #include <git2/version.h>
37
+
38
+ #if LIBGIT2_SOVERSION != 21
39
+ #error libgit2 version is not compatible
40
+ #endif
41
+ SRC
35
42
  else
36
43
  CWD = File.expand_path(File.dirname(__FILE__))
37
44
  LIBGIT2_DIR = File.join(CWD, '..', '..', 'vendor', 'libgit2')
38
- LIBGIT2_LIB_PATH = "#{CWD}/libgit2_embed.a"
39
45
 
40
- if !File.exists?(LIBGIT2_LIB_PATH)
41
- Dir.chdir(LIBGIT2_DIR) do
42
- sys("#{MAKE_PROGRAM} -f Makefile.embed")
43
- FileUtils.cp 'libgit2.a', LIBGIT2_LIB_PATH
46
+ Dir.chdir(LIBGIT2_DIR) do
47
+ Dir.mkdir("build") if !Dir.exists?("build")
48
+
49
+ Dir.chdir("build") do
50
+ sys("cmake .. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo")
51
+ sys(MAKE)
52
+
53
+ pcfile = File.join(LIBGIT2_DIR, "build", "libgit2.pc")
54
+ $LDFLAGS << " " + `pkg-config --libs --static #{pcfile}`.strip
44
55
  end
45
56
  end
46
57
 
47
- $INCFLAGS[0,0] = " -I#{LIBGIT2_DIR}/include "
48
- $LDFLAGS << " -L#{CWD} "
58
+ # Prepend the vendored libgit2 build dir to the $DEFLIBPATH.
59
+ #
60
+ # By default, $DEFLIBPATH includes $(libpath), which usually points
61
+ # to something like /usr/lib for system ruby versions (not those
62
+ # installed through rbenv or rvm).
63
+ #
64
+ # This was causing system-wide libgit2 installations to be preferred
65
+ # over of our vendored libgit2 version when building rugged.
66
+ #
67
+ # By putting the path to the vendored libgit2 library at the front of
68
+ # $DEFLIBPATH, we can ensure that our bundled version is always used.
69
+ $DEFLIBPATH.unshift("#{LIBGIT2_DIR}/build")
70
+ dir_config('git2', "#{LIBGIT2_DIR}/include", "#{LIBGIT2_DIR}/build")
71
+ end
49
72
 
50
- unless have_library 'git2_embed' and have_header 'git2.h'
51
- STDERR.puts "ERROR: Failed to build libgit2"
52
- exit(1)
53
- end
73
+ unless have_library 'git2' and have_header 'git2.h'
74
+ abort "ERROR: Failed to build libgit2"
54
75
  end
55
76
 
56
77
  create_makefile("rugged/rugged")
data/ext/rugged/rugged.c CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * The MIT License
3
3
  *
4
- * Copyright (c) 2013 GitHub, Inc
4
+ * Copyright (c) 2014 GitHub, Inc
5
5
  *
6
6
  * Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  * of this software and associated documentation files (the "Software"), to deal
@@ -25,6 +25,7 @@
25
25
  #include "rugged.h"
26
26
 
27
27
  const char *RUGGED_ERROR_NAMES[] = {
28
+ "None", /* GITERR_NONE */
28
29
  "NoMemError", /* GITERR_NOMEMORY, */
29
30
  "OSError", /* GITERR_OS, */
30
31
  "InvalidError", /* GITERR_INVALID, */
@@ -47,6 +48,8 @@ const char *RUGGED_ERROR_NAMES[] = {
47
48
  "CheckoutError", /* GITERR_CHECKOUT, */
48
49
  "FetchheadError", /* GITERR_FETCHHEAD, */
49
50
  "MergeError", /* GITERR_MERGE, */
51
+ "SshError", /* GITERR_SSH, */
52
+ "FilterError" /* GITERR_FILTER, */
50
53
  };
51
54
 
52
55
  #define RUGGED_ERROR_COUNT (int)((sizeof(RUGGED_ERROR_NAMES)/sizeof(RUGGED_ERROR_NAMES[0])))
@@ -81,29 +84,28 @@ static VALUE rb_git_libgit2_version(VALUE self)
81
84
 
82
85
  /*
83
86
  * call-seq:
84
- * Rugged.capabilities -> capabilities
87
+ * Rugged.features -> [feature, ...]
85
88
  *
86
- * Returns an array representing the 'capabilities' that libgit2 was compiled
87
- * with — this includes GIT_CAP_THREADS (thread support) and GIT_CAP_HTTPS (https).
88
- * This is implemented in libgit2 with simple bitwise ops; we offer Rubyland an array
89
- * of symbols representing the capabilities.
89
+ * Returns an array representing the features that libgit2 was compiled
90
+ * with — this includes `:threads` (thread support), `:https` and `:ssh`.
90
91
  *
91
- * The possible capabilities are "threads" and "https".
92
- *
93
- * Rugged.capabilities #=> [:threads, :https]
92
+ * Rugged.features #=> [:threads, :https]
94
93
  */
95
- static VALUE rb_git_capabilities(VALUE self)
94
+ static VALUE rb_git_features(VALUE self)
96
95
  {
97
96
  VALUE ret_arr = rb_ary_new();
98
97
 
99
- int caps = git_libgit2_capabilities();
98
+ int caps = git_libgit2_features();
100
99
 
101
- if (caps & GIT_CAP_THREADS)
100
+ if (caps & GIT_FEATURE_THREADS)
102
101
  rb_ary_push(ret_arr, CSTR2SYM("threads"));
103
102
 
104
- if (caps & GIT_CAP_HTTPS)
103
+ if (caps & GIT_FEATURE_HTTPS)
105
104
  rb_ary_push(ret_arr, CSTR2SYM("https"));
106
105
 
106
+ if (caps & GIT_FEATURE_SSH)
107
+ rb_ary_push(ret_arr, CSTR2SYM("ssh"));
108
+
107
109
  return ret_arr;
108
110
  }
109
111
 
@@ -155,28 +157,49 @@ static VALUE rb_git_raw_to_hex(VALUE self, VALUE raw)
155
157
 
156
158
  /*
157
159
  * call-seq:
158
- * Rugged.prettify_message(message, strip_comments) -> clean_message
160
+ * Rugged.prettify_message(message, strip_comments = '#') -> clean_message
159
161
  *
160
162
  * Process a commit or tag message into standard form, by stripping trailing spaces and
161
163
  * comments, and making sure that the message has a proper header line.
162
164
  */
163
- static VALUE rb_git_prettify_message(VALUE self, VALUE rb_message, VALUE rb_strip_comments)
165
+ static VALUE rb_git_prettify_message(int argc, VALUE *argv, VALUE self)
164
166
  {
165
- char *message;
166
- int strip_comments, message_len;
167
- VALUE result;
167
+ char comment_char = '#';
168
+ int strip_comments = 1;
169
+
170
+ git_buf message = { NULL };
171
+ VALUE rb_message, rb_strip;
172
+ int error;
173
+ VALUE result = Qnil;
174
+
175
+ rb_scan_args(argc, argv, "11", &rb_message, &rb_strip);
168
176
 
169
177
  Check_Type(rb_message, T_STRING);
170
- strip_comments = rugged_parse_bool(rb_strip_comments);
178
+
179
+ switch (TYPE(rb_strip)) {
180
+ case T_FALSE:
181
+ strip_comments = 0;
182
+ break;
183
+
184
+ case T_STRING:
185
+ if (RSTRING_LEN(rb_strip) > 0)
186
+ comment_char = RSTRING_PTR(rb_strip)[0];
187
+ break;
188
+
189
+ case T_TRUE:
190
+ case T_NIL:
191
+ default:
192
+ break;
193
+ }
171
194
 
172
- message_len = (int)RSTRING_LEN(rb_message) + 2;
173
- message = xmalloc(message_len);
195
+ error = git_message_prettify(&message,
196
+ StringValueCStr(rb_message), strip_comments, comment_char);
174
197
 
175
- message_len = git_message_prettify(message, message_len, StringValueCStr(rb_message), strip_comments);
176
- rugged_exception_check(message_len);
198
+ if (!error)
199
+ result = rb_enc_str_new(message.ptr, message.size, rb_utf8_encoding());
177
200
 
178
- result = rb_enc_str_new(message, message_len - 1, rb_utf8_encoding());
179
- xfree(message);
201
+ git_buf_free(&message);
202
+ rugged_exception_check(error);
180
203
 
181
204
  return result;
182
205
  }
@@ -300,6 +323,25 @@ void rugged_exception_raise(void)
300
323
  rb_exc_raise(err_obj);
301
324
  }
302
325
 
326
+ VALUE rugged__block_yield_splat(VALUE args) {
327
+ VALUE block = rb_ary_shift(args);
328
+ int n = RARRAY_LENINT(args);
329
+
330
+ if (n == 0) {
331
+ return rb_funcall(block, rb_intern("call"), 0);
332
+ } else {
333
+ int i;
334
+ VALUE *argv;
335
+ argv = ALLOCA_N(VALUE, n);
336
+
337
+ for (i=0; i < n; i++) {
338
+ argv[i] = rb_ary_entry(args, i);
339
+ }
340
+
341
+ return rb_funcall2(block, rb_intern("call"), n, argv);
342
+ }
343
+ }
344
+
303
345
  /*
304
346
  * call-seq:
305
347
  * Rugged.__cache_usage__ -> [current, max]
@@ -377,39 +419,69 @@ void Init_rugged(void)
377
419
  }
378
420
 
379
421
  rb_define_module_function(rb_mRugged, "libgit2_version", rb_git_libgit2_version, 0);
380
- rb_define_module_function(rb_mRugged, "capabilities", rb_git_capabilities, 0);
422
+ rb_define_module_function(rb_mRugged, "features", rb_git_features, 0);
381
423
  rb_define_module_function(rb_mRugged, "hex_to_raw", rb_git_hex_to_raw, 1);
382
424
  rb_define_module_function(rb_mRugged, "raw_to_hex", rb_git_raw_to_hex, 1);
383
425
  rb_define_module_function(rb_mRugged, "minimize_oid", rb_git_minimize_oid, -1);
384
- rb_define_module_function(rb_mRugged, "prettify_message", rb_git_prettify_message, 2);
426
+ rb_define_module_function(rb_mRugged, "prettify_message", rb_git_prettify_message, -1);
385
427
  rb_define_module_function(rb_mRugged, "__cache_usage__", rb_git_cache_usage, 0);
386
428
 
429
+ Init_rugged_reference();
430
+ Init_rugged_reference_collection();
431
+
387
432
  Init_rugged_object();
388
433
  Init_rugged_commit();
389
434
  Init_rugged_tree();
390
435
  Init_rugged_tag();
436
+ Init_rugged_tag_collection();
391
437
  Init_rugged_blob();
392
438
 
393
439
  Init_rugged_index();
394
440
  Init_rugged_repo();
395
441
  Init_rugged_revwalk();
396
- Init_rugged_reference();
397
442
  Init_rugged_branch();
443
+ Init_rugged_branch_collection();
398
444
  Init_rugged_config();
399
445
  Init_rugged_remote();
446
+ Init_rugged_remote_collection();
400
447
  Init_rugged_notes();
401
448
  Init_rugged_settings();
402
449
  Init_rugged_diff();
403
- Init_rugged_diff_patch();
450
+ Init_rugged_patch();
404
451
  Init_rugged_diff_delta();
405
452
  Init_rugged_diff_hunk();
406
453
  Init_rugged_diff_line();
407
-
408
- /* Constants */
409
- rb_define_const(rb_mRugged, "SORT_NONE", INT2FIX(0));
410
- rb_define_const(rb_mRugged, "SORT_TOPO", INT2FIX(1));
411
- rb_define_const(rb_mRugged, "SORT_DATE", INT2FIX(2));
412
- rb_define_const(rb_mRugged, "SORT_REVERSE", INT2FIX(4));
454
+ Init_rugged_blame();
455
+ Init_rugged_cred();
456
+
457
+ /*
458
+ * Sort the repository contents in no particular ordering;
459
+ * this sorting is arbitrary, implementation-specific
460
+ * and subject to change at any time.
461
+ * This is the default sorting for new walkers.
462
+ */
463
+ rb_define_const(rb_mRugged, "SORT_NONE", INT2FIX(GIT_SORT_NONE));
464
+
465
+ /*
466
+ * Sort the repository contents in topological order
467
+ * (parents before children); this sorting mode
468
+ * can be combined with time sorting.
469
+ */
470
+ rb_define_const(rb_mRugged, "SORT_TOPO", INT2FIX(GIT_SORT_TOPOLOGICAL));
471
+
472
+ /*
473
+ * Sort the repository contents by commit time;
474
+ * this sorting mode can be combined with
475
+ * topological sorting.
476
+ */
477
+ rb_define_const(rb_mRugged, "SORT_DATE", INT2FIX(GIT_SORT_TIME));
478
+
479
+ /*
480
+ * Iterate through the repository contents in reverse
481
+ * order; this sorting mode can be combined with
482
+ * any of the above.
483
+ */
484
+ rb_define_const(rb_mRugged, "SORT_REVERSE", INT2FIX(GIT_SORT_REVERSE));
413
485
 
414
486
  /* Initialize libgit2 */
415
487
  git_threads_init();