rugged 0.16.0 → 0.17.0b1

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 (392) hide show
  1. data/README.md +373 -243
  2. data/Rakefile +22 -0
  3. data/ext/rugged/extconf.rb +9 -6
  4. data/ext/rugged/rugged.c +123 -31
  5. data/ext/rugged/rugged.h +11 -10
  6. data/ext/rugged/rugged_blob.c +181 -18
  7. data/ext/rugged/rugged_commit.c +196 -18
  8. data/ext/rugged/rugged_config.c +94 -5
  9. data/ext/rugged/rugged_object.c +54 -1
  10. data/ext/rugged/rugged_reference.c +203 -15
  11. data/ext/rugged/{remote.c → rugged_remote.c} +35 -10
  12. data/ext/rugged/rugged_repo.c +323 -81
  13. data/ext/rugged/rugged_revwalk.c +57 -4
  14. data/ext/rugged/rugged_signature.c +3 -3
  15. data/ext/rugged/rugged_tag.c +72 -1
  16. data/ext/rugged/rugged_tree.c +70 -2
  17. data/ext/rugged/vendor/libgit2-dist/deps/regex/config.h +7 -0
  18. data/ext/rugged/vendor/libgit2-dist/deps/regex/regcomp.c +3856 -0
  19. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex.c +85 -0
  20. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex.h +582 -0
  21. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex_internal.c +1744 -0
  22. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex_internal.h +810 -0
  23. data/ext/rugged/vendor/libgit2-dist/deps/regex/regexec.c +4369 -0
  24. data/ext/rugged/vendor/libgit2-dist/examples/diff.c +238 -0
  25. data/ext/rugged/vendor/libgit2-dist/examples/general.c +4 -4
  26. data/ext/rugged/vendor/libgit2-dist/examples/network/fetch.c +101 -85
  27. data/ext/rugged/vendor/libgit2-dist/examples/network/git2.c +7 -3
  28. data/ext/rugged/vendor/libgit2-dist/examples/network/index-pack.c +80 -25
  29. data/ext/rugged/vendor/libgit2-dist/examples/network/ls-remote.c +6 -6
  30. data/ext/rugged/vendor/libgit2-dist/include/git2/attr.h +224 -0
  31. data/ext/rugged/vendor/libgit2-dist/include/git2/blob.h +59 -5
  32. data/ext/rugged/vendor/libgit2-dist/include/git2/branch.h +114 -7
  33. data/ext/rugged/vendor/libgit2-dist/include/git2/commit.h +14 -7
  34. data/ext/rugged/vendor/libgit2-dist/include/git2/common.h +4 -3
  35. data/ext/rugged/vendor/libgit2-dist/include/git2/config.h +105 -27
  36. data/ext/rugged/vendor/libgit2-dist/include/git2/diff.h +409 -0
  37. data/ext/rugged/vendor/libgit2-dist/include/git2/errors.h +47 -82
  38. data/ext/rugged/vendor/libgit2-dist/include/git2/index.h +25 -10
  39. data/ext/rugged/vendor/libgit2-dist/include/git2/indexer.h +46 -1
  40. data/ext/rugged/vendor/libgit2-dist/include/git2/merge.h +35 -0
  41. data/ext/rugged/vendor/libgit2-dist/include/git2/net.h +1 -1
  42. data/ext/rugged/vendor/libgit2-dist/include/git2/notes.h +139 -0
  43. data/ext/rugged/vendor/libgit2-dist/include/git2/object.h +5 -5
  44. data/ext/rugged/vendor/libgit2-dist/include/git2/odb.h +13 -13
  45. data/ext/rugged/vendor/libgit2-dist/include/git2/odb_backend.h +8 -8
  46. data/ext/rugged/vendor/libgit2-dist/include/git2/oid.h +14 -9
  47. data/ext/rugged/vendor/libgit2-dist/include/git2/reflog.h +5 -5
  48. data/ext/rugged/vendor/libgit2-dist/include/git2/refs.h +37 -17
  49. data/ext/rugged/vendor/libgit2-dist/include/git2/refspec.h +17 -9
  50. data/ext/rugged/vendor/libgit2-dist/include/git2/remote.h +83 -16
  51. data/ext/rugged/vendor/libgit2-dist/include/git2/repository.h +24 -10
  52. data/ext/rugged/vendor/libgit2-dist/include/git2/reset.h +44 -0
  53. data/ext/rugged/vendor/libgit2-dist/include/git2/revparse.h +36 -0
  54. data/ext/rugged/vendor/libgit2-dist/include/git2/revwalk.h +74 -6
  55. data/ext/rugged/vendor/libgit2-dist/include/git2/signature.h +3 -3
  56. data/ext/rugged/vendor/libgit2-dist/include/git2/status.h +120 -19
  57. data/ext/rugged/vendor/libgit2-dist/include/git2/submodule.h +103 -0
  58. data/ext/rugged/vendor/libgit2-dist/include/git2/tag.h +28 -10
  59. data/ext/rugged/vendor/libgit2-dist/include/git2/threads.h +1 -1
  60. data/ext/rugged/vendor/libgit2-dist/include/git2/tree.h +13 -13
  61. data/ext/rugged/vendor/libgit2-dist/include/git2/types.h +16 -2
  62. data/ext/rugged/vendor/libgit2-dist/include/git2/version.h +3 -3
  63. data/ext/rugged/vendor/libgit2-dist/include/git2/windows.h +1 -1
  64. data/ext/rugged/vendor/libgit2-dist/include/git2.h +7 -2
  65. data/ext/rugged/vendor/libgit2-dist/src/attr.c +677 -0
  66. data/ext/rugged/vendor/libgit2-dist/src/attr.h +56 -0
  67. data/ext/rugged/vendor/libgit2-dist/src/attr_file.c +609 -0
  68. data/ext/rugged/vendor/libgit2-dist/src/attr_file.h +145 -0
  69. data/ext/rugged/vendor/libgit2-dist/src/blob.c +213 -60
  70. data/ext/rugged/vendor/libgit2-dist/src/blob.h +2 -1
  71. data/ext/rugged/vendor/libgit2-dist/src/branch.c +208 -0
  72. data/ext/rugged/vendor/libgit2-dist/src/branch.h +17 -0
  73. data/ext/rugged/vendor/libgit2-dist/src/bswap.h +1 -1
  74. data/ext/rugged/vendor/libgit2-dist/src/buffer.c +395 -46
  75. data/ext/rugged/vendor/libgit2-dist/src/buffer.h +112 -9
  76. data/ext/rugged/vendor/libgit2-dist/src/cache.c +37 -49
  77. data/ext/rugged/vendor/libgit2-dist/src/cache.h +7 -17
  78. data/ext/rugged/vendor/libgit2-dist/src/cc-compat.h +18 -16
  79. data/ext/rugged/vendor/libgit2-dist/src/commit.c +56 -90
  80. data/ext/rugged/vendor/libgit2-dist/src/commit.h +1 -1
  81. data/ext/rugged/vendor/libgit2-dist/src/common.h +12 -5
  82. data/ext/rugged/vendor/libgit2-dist/src/{win32 → compat}/fnmatch.c +1 -1
  83. data/ext/rugged/vendor/libgit2-dist/src/{win32 → compat}/fnmatch.h +3 -3
  84. data/ext/rugged/vendor/libgit2-dist/src/config.c +247 -158
  85. data/ext/rugged/vendor/libgit2-dist/src/config.h +10 -1
  86. data/ext/rugged/vendor/libgit2-dist/src/config_cache.c +94 -0
  87. data/ext/rugged/vendor/libgit2-dist/src/config_file.c +606 -496
  88. data/ext/rugged/vendor/libgit2-dist/src/config_file.h +31 -0
  89. data/ext/rugged/vendor/libgit2-dist/src/crlf.c +228 -0
  90. data/ext/rugged/vendor/libgit2-dist/src/date.c +876 -0
  91. data/ext/rugged/vendor/libgit2-dist/src/delta-apply.c +15 -9
  92. data/ext/rugged/vendor/libgit2-dist/src/delta-apply.h +2 -2
  93. data/ext/rugged/vendor/libgit2-dist/src/diff.c +814 -0
  94. data/ext/rugged/vendor/libgit2-dist/src/diff.h +43 -0
  95. data/ext/rugged/vendor/libgit2-dist/src/diff_output.c +794 -0
  96. data/ext/rugged/vendor/libgit2-dist/src/errors.c +89 -74
  97. data/ext/rugged/vendor/libgit2-dist/src/fetch.c +94 -66
  98. data/ext/rugged/vendor/libgit2-dist/src/fetch.h +5 -4
  99. data/ext/rugged/vendor/libgit2-dist/src/filebuf.c +157 -100
  100. data/ext/rugged/vendor/libgit2-dist/src/filebuf.h +22 -8
  101. data/ext/rugged/vendor/libgit2-dist/src/fileops.c +330 -206
  102. data/ext/rugged/vendor/libgit2-dist/src/fileops.h +82 -51
  103. data/ext/rugged/vendor/libgit2-dist/src/filter.c +165 -0
  104. data/ext/rugged/vendor/libgit2-dist/src/filter.h +119 -0
  105. data/ext/rugged/vendor/libgit2-dist/src/global.c +4 -4
  106. data/ext/rugged/vendor/libgit2-dist/src/global.h +4 -1
  107. data/ext/rugged/vendor/libgit2-dist/src/hash.c +1 -1
  108. data/ext/rugged/vendor/libgit2-dist/src/hash.h +1 -1
  109. data/ext/rugged/vendor/libgit2-dist/src/ignore.c +203 -0
  110. data/ext/rugged/vendor/libgit2-dist/src/ignore.h +38 -0
  111. data/ext/rugged/vendor/libgit2-dist/src/index.c +220 -169
  112. data/ext/rugged/vendor/libgit2-dist/src/index.h +5 -1
  113. data/ext/rugged/vendor/libgit2-dist/src/indexer.c +601 -102
  114. data/ext/rugged/vendor/libgit2-dist/src/iterator.c +748 -0
  115. data/ext/rugged/vendor/libgit2-dist/src/iterator.h +151 -0
  116. data/ext/rugged/vendor/libgit2-dist/src/khash.h +608 -0
  117. data/ext/rugged/vendor/libgit2-dist/src/map.h +6 -1
  118. data/ext/rugged/vendor/libgit2-dist/src/message.c +61 -0
  119. data/ext/rugged/vendor/libgit2-dist/src/message.h +14 -0
  120. data/ext/rugged/vendor/libgit2-dist/src/mwindow.c +27 -29
  121. data/ext/rugged/vendor/libgit2-dist/src/mwindow.h +4 -4
  122. data/ext/rugged/vendor/libgit2-dist/src/netops.c +375 -56
  123. data/ext/rugged/vendor/libgit2-dist/src/netops.h +12 -9
  124. data/ext/rugged/vendor/libgit2-dist/src/notes.c +548 -0
  125. data/ext/rugged/vendor/libgit2-dist/src/notes.h +28 -0
  126. data/ext/rugged/vendor/libgit2-dist/src/object.c +59 -21
  127. data/ext/rugged/vendor/libgit2-dist/src/odb.c +212 -175
  128. data/ext/rugged/vendor/libgit2-dist/src/odb.h +39 -2
  129. data/ext/rugged/vendor/libgit2-dist/src/odb_loose.c +238 -241
  130. data/ext/rugged/vendor/libgit2-dist/src/odb_pack.c +94 -106
  131. data/ext/rugged/vendor/libgit2-dist/src/oid.c +59 -60
  132. data/ext/rugged/vendor/libgit2-dist/src/oidmap.h +42 -0
  133. data/ext/rugged/vendor/libgit2-dist/src/pack.c +198 -170
  134. data/ext/rugged/vendor/libgit2-dist/src/pack.h +16 -9
  135. data/ext/rugged/vendor/libgit2-dist/src/path.c +496 -106
  136. data/ext/rugged/vendor/libgit2-dist/src/path.h +214 -20
  137. data/ext/rugged/vendor/libgit2-dist/src/pkt.c +88 -159
  138. data/ext/rugged/vendor/libgit2-dist/src/pkt.h +9 -5
  139. data/ext/rugged/vendor/libgit2-dist/src/pool.c +294 -0
  140. data/ext/rugged/vendor/libgit2-dist/src/pool.h +125 -0
  141. data/ext/rugged/vendor/libgit2-dist/src/posix.c +38 -16
  142. data/ext/rugged/vendor/libgit2-dist/src/posix.h +20 -2
  143. data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.c +1 -1
  144. data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.h +1 -1
  145. data/ext/rugged/vendor/libgit2-dist/src/pqueue.c +7 -7
  146. data/ext/rugged/vendor/libgit2-dist/src/pqueue.h +1 -1
  147. data/ext/rugged/vendor/libgit2-dist/src/protocol.c +21 -13
  148. data/ext/rugged/vendor/libgit2-dist/src/protocol.h +1 -1
  149. data/ext/rugged/vendor/libgit2-dist/src/reflog.c +125 -103
  150. data/ext/rugged/vendor/libgit2-dist/src/reflog.h +1 -1
  151. data/ext/rugged/vendor/libgit2-dist/src/refs.c +713 -640
  152. data/ext/rugged/vendor/libgit2-dist/src/refs.h +27 -3
  153. data/ext/rugged/vendor/libgit2-dist/src/refspec.c +51 -17
  154. data/ext/rugged/vendor/libgit2-dist/src/refspec.h +13 -1
  155. data/ext/rugged/vendor/libgit2-dist/src/remote.c +307 -119
  156. data/ext/rugged/vendor/libgit2-dist/src/remote.h +3 -2
  157. data/ext/rugged/vendor/libgit2-dist/src/repository.c +593 -442
  158. data/ext/rugged/vendor/libgit2-dist/src/repository.h +80 -2
  159. data/ext/rugged/vendor/libgit2-dist/src/reset.c +103 -0
  160. data/ext/rugged/vendor/libgit2-dist/src/revparse.c +753 -0
  161. data/ext/rugged/vendor/libgit2-dist/src/revwalk.c +434 -158
  162. data/ext/rugged/vendor/libgit2-dist/src/sha1.c +3 -3
  163. data/ext/rugged/vendor/libgit2-dist/src/sha1.h +2 -2
  164. data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.c +3 -2
  165. data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.h +1 -1
  166. data/ext/rugged/vendor/libgit2-dist/src/signature.c +69 -80
  167. data/ext/rugged/vendor/libgit2-dist/src/signature.h +1 -1
  168. data/ext/rugged/vendor/libgit2-dist/src/status.c +184 -638
  169. data/ext/rugged/vendor/libgit2-dist/src/strmap.h +64 -0
  170. data/ext/rugged/vendor/libgit2-dist/src/submodule.c +387 -0
  171. data/ext/rugged/vendor/libgit2-dist/src/tag.c +162 -137
  172. data/ext/rugged/vendor/libgit2-dist/src/tag.h +2 -1
  173. data/ext/rugged/vendor/libgit2-dist/src/thread-utils.c +1 -1
  174. data/ext/rugged/vendor/libgit2-dist/src/thread-utils.h +8 -8
  175. data/ext/rugged/vendor/libgit2-dist/src/transport.c +31 -19
  176. data/ext/rugged/vendor/libgit2-dist/src/transport.h +31 -11
  177. data/ext/rugged/vendor/libgit2-dist/src/transports/git.c +168 -193
  178. data/ext/rugged/vendor/libgit2-dist/src/transports/http.c +192 -241
  179. data/ext/rugged/vendor/libgit2-dist/src/transports/local.c +92 -86
  180. data/ext/rugged/vendor/libgit2-dist/src/tree-cache.c +32 -49
  181. data/ext/rugged/vendor/libgit2-dist/src/tree-cache.h +1 -1
  182. data/ext/rugged/vendor/libgit2-dist/src/tree.c +172 -145
  183. data/ext/rugged/vendor/libgit2-dist/src/tree.h +16 -2
  184. data/ext/rugged/vendor/libgit2-dist/src/tsort.c +16 -14
  185. data/ext/rugged/vendor/libgit2-dist/src/unix/map.c +8 -24
  186. data/ext/rugged/vendor/libgit2-dist/src/unix/posix.h +9 -3
  187. data/ext/rugged/vendor/libgit2-dist/src/util.c +94 -38
  188. data/ext/rugged/vendor/libgit2-dist/src/util.h +119 -13
  189. data/ext/rugged/vendor/libgit2-dist/src/vector.c +84 -31
  190. data/ext/rugged/vendor/libgit2-dist/src/vector.h +37 -4
  191. data/ext/rugged/vendor/libgit2-dist/src/win32/dir.c +81 -41
  192. data/ext/rugged/vendor/libgit2-dist/src/{dir.h → win32/dir.h} +4 -9
  193. data/ext/rugged/vendor/libgit2-dist/src/win32/map.c +19 -35
  194. data/ext/rugged/vendor/libgit2-dist/src/win32/mingw-compat.h +1 -1
  195. data/ext/rugged/vendor/libgit2-dist/src/win32/msvc-compat.h +5 -1
  196. data/ext/rugged/vendor/libgit2-dist/src/win32/posix.h +10 -8
  197. data/ext/rugged/vendor/libgit2-dist/src/win32/posix_w32.c +262 -118
  198. data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.c +12 -9
  199. data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.h +1 -1
  200. data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.c +30 -26
  201. data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.h +2 -1
  202. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiff.h +135 -0
  203. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiffi.c +572 -0
  204. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiffi.h +63 -0
  205. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xemit.c +253 -0
  206. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xemit.h +36 -0
  207. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xhistogram.c +371 -0
  208. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xinclude.h +46 -0
  209. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xmacros.h +54 -0
  210. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xmerge.c +619 -0
  211. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xpatience.c +358 -0
  212. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xprepare.c +483 -0
  213. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xprepare.h +34 -0
  214. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xtypes.h +67 -0
  215. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xutils.c +419 -0
  216. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xutils.h +49 -0
  217. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/attr_expect.h +43 -0
  218. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/file.c +226 -0
  219. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/flags.c +108 -0
  220. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/lookup.c +262 -0
  221. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/repo.c +273 -0
  222. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/buf/basic.c +5 -5
  223. data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_helpers.c +181 -0
  224. data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_libgit2.h +55 -0
  225. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/commit.c +44 -0
  226. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/parse.c +350 -0
  227. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/signature.c +65 -0
  228. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/write.c +140 -0
  229. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/add.c +3 -3
  230. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/multivar.c +151 -0
  231. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/new.c +5 -5
  232. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/read.c +44 -32
  233. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/stress.c +61 -0
  234. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/write.c +20 -5
  235. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/buffer.c +613 -0
  236. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/dirent.c +39 -26
  237. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/env.c +115 -0
  238. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/errors.c +60 -0
  239. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/filebuf.c +4 -18
  240. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/hex.c +22 -0
  241. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/oid.c +6 -6
  242. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/path.c +420 -0
  243. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/pool.c +85 -0
  244. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/rmdir.c +68 -0
  245. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/string.c +1 -1
  246. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/strmap.c +102 -0
  247. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/strtol.c +1 -1
  248. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/vector.c +191 -0
  249. data/ext/rugged/vendor/libgit2-dist/tests-clar/date/date.c +15 -0
  250. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/blob.c +254 -0
  251. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.c +104 -0
  252. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.h +47 -0
  253. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/index.c +92 -0
  254. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/iterator.c +572 -0
  255. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/patch.c +99 -0
  256. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/tree.c +210 -0
  257. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/workdir.c +543 -0
  258. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/read_tree.c +46 -0
  259. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/index/rename.c +2 -12
  260. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/tests.c +246 -0
  261. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/createremotethenload.c +33 -0
  262. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotelocal.c +137 -0
  263. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotes.c +183 -0
  264. data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notes.c +133 -0
  265. data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notesref.c +57 -0
  266. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/filter.c +125 -0
  267. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/fromchunks.c +87 -0
  268. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/write.c +69 -0
  269. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/commit/commitstagedfile.c +126 -0
  270. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/lookup.c +63 -0
  271. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/message.c +171 -0
  272. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/chars.c +3 -14
  273. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/compare.c +4 -4
  274. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/convert.c +10 -10
  275. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/data.h +0 -0
  276. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/fromstr.c +1 -1
  277. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/hash.c +21 -17
  278. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/short.c +1 -1
  279. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/size.c +1 -1
  280. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/type2string.c +14 -14
  281. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/write.c +455 -0
  282. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/peel.c +56 -0
  283. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/read.c +130 -0
  284. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/write.c +192 -0
  285. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/tree/frompath.c +22 -16
  286. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/read.c +75 -0
  287. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/write.c +84 -0
  288. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/loose.c +1 -1
  289. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/loose_data.h +0 -0
  290. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/mixed.c +24 -0
  291. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/pack_data.h +0 -0
  292. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/packed.c +1 -1
  293. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/sorting.c +1 -1
  294. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/create.c +113 -0
  295. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/delete.c +91 -0
  296. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/listall.c +78 -0
  297. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/move.c +72 -0
  298. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/crashes.c +17 -0
  299. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/create.c +149 -0
  300. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/delete.c +85 -0
  301. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/list.c +53 -0
  302. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/listall.c +36 -0
  303. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/lookup.c +42 -0
  304. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/normalize.c +200 -0
  305. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/overwrite.c +136 -0
  306. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/pack.c +67 -0
  307. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/read.c +194 -0
  308. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/reflog.c +123 -0
  309. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/rename.c +339 -0
  310. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/revparse.c +174 -0
  311. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/unicode.c +42 -0
  312. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/discover.c +142 -0
  313. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/repo/getters.c +19 -1
  314. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/init.c +235 -0
  315. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/open.c +282 -0
  316. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/setters.c +80 -0
  317. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/mixed.c +47 -0
  318. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.c +10 -0
  319. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.h +6 -0
  320. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/soft.c +102 -0
  321. data/ext/rugged/vendor/libgit2-dist/{tests/t05-revwalk.c → tests-clar/revwalk/basic.c} +85 -44
  322. data/ext/rugged/vendor/libgit2-dist/tests-clar/revwalk/mergebase.c +148 -0
  323. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/ignore.c +133 -0
  324. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/status/single.c +2 -11
  325. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_data.h +202 -0
  326. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.c +49 -0
  327. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.h +33 -0
  328. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/submodules.c +112 -0
  329. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/worktree.c +649 -0
  330. data/ext/rugged/vendor/libgit2-dist/tests-clar/threads/basic.c +20 -0
  331. data/ext/rugged/vendor/libgit2-dist.tar.gz +0 -0
  332. data/lib/rugged/commit.rb +35 -0
  333. data/lib/rugged/object.rb +7 -0
  334. data/lib/rugged/reference.rb +9 -0
  335. data/lib/rugged/repository.rb +99 -3
  336. data/lib/rugged/tag.rb +22 -0
  337. data/lib/rugged/tree.rb +8 -0
  338. data/lib/rugged/version.rb +1 -1
  339. data/lib/rugged.rb +4 -1
  340. data/test/blob_test.rb +2 -2
  341. data/test/commit_test.rb +27 -13
  342. data/test/config_test.rb +44 -0
  343. data/test/coverage/HEAD.json +1 -1
  344. data/test/fixtures/testrepo.git/config +2 -0
  345. data/test/fixtures/testrepo.git/objects/7f/043268ea43ce18e3540acaabf9e090c91965b0 +0 -0
  346. data/test/lib_test.rb +7 -0
  347. data/test/object_test.rb +3 -3
  348. data/test/reference_test.rb +46 -8
  349. data/test/remote_test.rb +8 -2
  350. data/test/repo_pack_test.rb +3 -3
  351. data/test/repo_test.rb +79 -11
  352. data/test/tag_test.rb +9 -2
  353. data/test/test_helper.rb +21 -0
  354. data/test/tree_test.rb +18 -6
  355. metadata +205 -81
  356. data/ext/rugged/vendor/libgit2-dist/include/git2/zlib.h +0 -40
  357. data/ext/rugged/vendor/libgit2-dist/src/hashtable.c +0 -243
  358. data/ext/rugged/vendor/libgit2-dist/src/hashtable.h +0 -80
  359. data/ext/rugged/vendor/libgit2-dist/tests/t00-core.c +0 -628
  360. data/ext/rugged/vendor/libgit2-dist/tests/t01-data.h +0 -322
  361. data/ext/rugged/vendor/libgit2-dist/tests/t01-rawobj.c +0 -638
  362. data/ext/rugged/vendor/libgit2-dist/tests/t03-data.h +0 -344
  363. data/ext/rugged/vendor/libgit2-dist/tests/t03-objwrite.c +0 -255
  364. data/ext/rugged/vendor/libgit2-dist/tests/t04-commit.c +0 -788
  365. data/ext/rugged/vendor/libgit2-dist/tests/t06-index.c +0 -219
  366. data/ext/rugged/vendor/libgit2-dist/tests/t07-hashtable.c +0 -192
  367. data/ext/rugged/vendor/libgit2-dist/tests/t08-tag.c +0 -357
  368. data/ext/rugged/vendor/libgit2-dist/tests/t09-tree.c +0 -221
  369. data/ext/rugged/vendor/libgit2-dist/tests/t10-refs.c +0 -1294
  370. data/ext/rugged/vendor/libgit2-dist/tests/t12-repo.c +0 -174
  371. data/ext/rugged/vendor/libgit2-dist/tests/t13-threads.c +0 -41
  372. data/ext/rugged/vendor/libgit2-dist/tests/t17-bufs.c +0 -61
  373. data/ext/rugged/vendor/libgit2-dist/tests/t18-status.c +0 -448
  374. data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.c +0 -310
  375. data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.h +0 -83
  376. data/ext/rugged/vendor/libgit2-dist/tests/test_lib.c +0 -198
  377. data/ext/rugged/vendor/libgit2-dist/tests/test_lib.h +0 -54
  378. data/ext/rugged/vendor/libgit2-dist/tests/test_main.c +0 -89
  379. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay.h +0 -187
  380. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_libgit2.h +0 -28
  381. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_main.c +0 -1073
  382. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/stress.c +0 -39
  383. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/path.c +0 -139
  384. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/rmdir.c +0 -50
  385. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/vector.c +0 -66
  386. data/ext/rugged/vendor/libgit2-dist/tests-clay/network/remotes.c +0 -50
  387. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/init.c +0 -104
  388. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/open.c +0 -54
  389. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/status_data.h +0 -48
  390. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/worktree.c +0 -124
  391. data/lib/rugged/objects.rb +0 -45
  392. data/test/fixtures/testrepo.git/refs/heads/new_name +0 -1
@@ -2,17 +2,17 @@
2
2
  * The MIT License
3
3
  *
4
4
  * Copyright (c) 2011 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
8
8
  * in the Software without restriction, including without limitation the rights
9
9
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
10
  * copies of the Software, and to permit persons to whom the Software is
11
11
  * furnished to do so, subject to the following conditions:
12
- *
12
+ *
13
13
  * The above copyright notice and this permission notice shall be included in
14
14
  * all copies or substantial portions of the Software.
15
- *
15
+ *
16
16
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
17
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
18
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -32,40 +32,33 @@ extern VALUE rb_cRuggedBackend;
32
32
  VALUE rb_cRuggedRepo;
33
33
  VALUE rb_cRuggedOdbObject;
34
34
 
35
- git_otype rugged_get_otype(VALUE self)
36
- {
37
- git_otype type;
38
-
39
- if (NIL_P(self))
40
- return GIT_OBJ_ANY;
41
-
42
- switch (TYPE(self)) {
43
- case T_STRING:
44
- type = git_object_string2type(StringValueCStr(self));
45
- break;
46
-
47
- case T_FIXNUM:
48
- type = FIX2INT(self);
49
- break;
50
-
51
- default:
52
- type = GIT_OBJ_BAD;
53
- break;
54
- }
55
-
56
- if (!git_object_typeisloose(type))
57
- rb_raise(rb_eTypeError, "Invalid Git object type specifier");
58
-
59
- return type;
60
- }
61
-
62
- static VALUE rb_git_odbobj_hash(VALUE self)
35
+ /*
36
+ * call-seq:
37
+ * odb_obj.oid -> hex_oid
38
+ *
39
+ * Return the Object ID (a 40 character SHA1 hash) for this raw
40
+ * object.
41
+ *
42
+ * odb_obj.oid #=> "d8786bfc97485e8d7b19b21fb88c8ef1f199fc3f"
43
+ */
44
+ static VALUE rb_git_odbobj_oid(VALUE self)
63
45
  {
64
46
  git_odb_object *obj;
65
47
  Data_Get_Struct(self, git_odb_object, obj);
66
48
  return rugged_create_oid(git_odb_object_id(obj));
67
49
  }
68
50
 
51
+ /*
52
+ * call-seq:
53
+ * odb_obj.data -> buffer
54
+ *
55
+ * Return an ASCII buffer with the raw bytes that form the Git object.
56
+ *
57
+ * odb_obj.data #=> "tree 87ebee8367f9cc5ac04858b3bd5610ca74f04df9\n"
58
+ * #=> "parent 68d041ee999cb07c6496fbdd4f384095de6ca9e1\n"
59
+ * #=> "author Vicent Martí <tanoku@gmail.com> 1326863045 -0800\n"
60
+ * #=> ...
61
+ */
69
62
  static VALUE rb_git_odbobj_data(VALUE self)
70
63
  {
71
64
  git_odb_object *obj;
@@ -73,6 +66,15 @@ static VALUE rb_git_odbobj_data(VALUE self)
73
66
  return rugged_str_ascii(git_odb_object_data(obj), git_odb_object_size(obj));
74
67
  }
75
68
 
69
+ /*
70
+ * call-seq:
71
+ * odb_obj.size -> size
72
+ *
73
+ * Return the size in bytes of the Git object after decompression. This is
74
+ * also the size of the +obj.data+ buffer.
75
+ *
76
+ * odb_obj.size #=> 231
77
+ */
76
78
  static VALUE rb_git_odbobj_size(VALUE self)
77
79
  {
78
80
  git_odb_object *obj;
@@ -80,11 +82,20 @@ static VALUE rb_git_odbobj_size(VALUE self)
80
82
  return INT2FIX(git_odb_object_size(obj));
81
83
  }
82
84
 
85
+ /*
86
+ * call-seq:
87
+ * odb_obj.type -> Symbol
88
+ *
89
+ * Return a Ruby symbol representing the basic Git type of this object.
90
+ * Possible values are +:tree+, +:blob+, +:commit+ and +:tag+
91
+ *
92
+ * odb_obj.type #=> :tag
93
+ */
83
94
  static VALUE rb_git_odbobj_type(VALUE self)
84
95
  {
85
96
  git_odb_object *obj;
86
97
  Data_Get_Struct(self, git_odb_object, obj);
87
- return INT2FIX(git_odb_object_type(obj));
98
+ return rugged_otype_new(git_odb_object_type(obj));
88
99
  }
89
100
 
90
101
  void rb_git__odbobj_free(void *obj)
@@ -128,6 +139,21 @@ static VALUE rugged_repo_new(VALUE klass, git_repository *repo)
128
139
  return rb_repo;
129
140
  }
130
141
 
142
+ /*
143
+ * call-seq:
144
+ * Rugged::Repository.new(path) -> repository
145
+ *
146
+ * Open a Git repository in the given +path+ and return a +Repository+ object
147
+ * representing it. An exception will be thrown if +path+ doesn't point to a
148
+ * valid repository. If you need to create a repository from scratch, use
149
+ * +Rugged::Repository.init+ instead.
150
+ *
151
+ * The +path+ must point to the actual folder (+.git+) of a Git repository.
152
+ * If you're unsure of where is this located, use +Rugged::Repository.discover+
153
+ * instead.
154
+ *
155
+ * Rugged::Repository.new('~/test/.git') #=> #<Rugged::Repository:0x108849488>
156
+ */
131
157
  static VALUE rb_git_repo_new(VALUE klass, VALUE rb_path)
132
158
  {
133
159
  git_repository *repo;
@@ -141,6 +167,21 @@ static VALUE rb_git_repo_new(VALUE klass, VALUE rb_path)
141
167
  return rugged_repo_new(klass, repo);
142
168
  }
143
169
 
170
+ /*
171
+ * call-seq:
172
+ * Rugged::Repository.init_at(path, is_bare) -> repository
173
+ *
174
+ * Initialize a Git repository in +path+. This implies creating all the
175
+ * necessary files on the FS, or re-initializing an already existing
176
+ * repository if the files have already been created.
177
+ *
178
+ * The +is_bare+ attribute specifies whether the Repository should be
179
+ * created on disk as bare or not. Bare repositories have no working
180
+ * directory and are created in the root of +path+. Non-bare repositories
181
+ * are created in a +.git+ folder and use +path+ as working directory.
182
+ *
183
+ * Rugged::Repository.init_at('~/repository') #=> #<Rugged::Repository:0x108849488>
184
+ */
144
185
  static VALUE rb_git_repo_init_at(VALUE klass, VALUE path, VALUE rb_is_bare)
145
186
  {
146
187
  git_repository *repo;
@@ -155,49 +196,95 @@ static VALUE rb_git_repo_init_at(VALUE klass, VALUE path, VALUE rb_is_bare)
155
196
  return rugged_repo_new(klass, repo);
156
197
  }
157
198
 
158
- #define RB_GIT_REPO_OWNED_ATTR(_klass, _object) \
159
- static VALUE rb_git_repo_get_##_object(VALUE self) \
160
- { \
161
- VALUE rb_data = rb_iv_get(self, "@" #_object); \
162
- if (NIL_P(rb_data)) { \
163
- git_repository *repo; \
164
- git_##_object *data; \
165
- int error; \
166
- Data_Get_Struct(self, git_repository, repo); \
167
- error = git_repository_##_object(&data, repo); \
168
- rugged_exception_check(error); \
169
- rb_data = rugged_##_object##_new(_klass, self, data); \
170
- rb_iv_set(self, "@" #_object, rb_data); \
171
- } \
172
- return rb_data; \
173
- }\
174
- static VALUE rb_git_repo_set_##_object(VALUE self, VALUE rb_data) \
175
- { \
176
- VALUE rb_old_data; \
199
+ #define RB_GIT_REPO_OWNED_GET(_klass, _object) \
200
+ VALUE rb_data = rb_iv_get(self, "@" #_object); \
201
+ if (NIL_P(rb_data)) { \
177
202
  git_repository *repo; \
178
203
  git_##_object *data; \
179
- if (!rb_obj_is_kind_of(rb_data, _klass))\
180
- rb_raise(rb_eTypeError, \
181
- "The given object is not a Rugged::" #_object); \
182
- if (!NIL_P(rugged_owner(rb_data))) \
183
- rb_raise(rb_eRuntimeError, \
184
- "The given object is already owned by another repository"); \
204
+ int error; \
185
205
  Data_Get_Struct(self, git_repository, repo); \
186
- Data_Get_Struct(rb_data, git_##_object, data); \
187
- git_repository_set_##_object(repo, data); \
188
- rb_old_data = rb_iv_get(self, "@" #_object); \
189
- if (!NIL_P(rb_old_data)) rugged_set_owner(rb_old_data, Qnil); \
190
- rugged_set_owner(rb_data, self); \
206
+ error = git_repository_##_object(&data, repo); \
207
+ rugged_exception_check(error); \
208
+ rb_data = rugged_##_object##_new(_klass, self, data); \
191
209
  rb_iv_set(self, "@" #_object, rb_data); \
192
- return Qnil; \
193
- }
210
+ } \
211
+ return rb_data; \
194
212
 
195
- /* git_repository_index, git_repository_set_index */
196
- RB_GIT_REPO_OWNED_ATTR(rb_cRuggedIndex, index);
213
+ #define RB_GIT_REPO_OWNED_SET(_klass, _object) \
214
+ VALUE rb_old_data; \
215
+ git_repository *repo; \
216
+ git_##_object *data; \
217
+ if (!rb_obj_is_kind_of(rb_data, _klass))\
218
+ rb_raise(rb_eTypeError, \
219
+ "The given object is not a Rugged::" #_object); \
220
+ if (!NIL_P(rugged_owner(rb_data))) \
221
+ rb_raise(rb_eRuntimeError, \
222
+ "The given object is already owned by another repository"); \
223
+ Data_Get_Struct(self, git_repository, repo); \
224
+ Data_Get_Struct(rb_data, git_##_object, data); \
225
+ git_repository_set_##_object(repo, data); \
226
+ rb_old_data = rb_iv_get(self, "@" #_object); \
227
+ if (!NIL_P(rb_old_data)) rugged_set_owner(rb_old_data, Qnil); \
228
+ rugged_set_owner(rb_data, self); \
229
+ rb_iv_set(self, "@" #_object, rb_data); \
230
+ return Qnil; \
197
231
 
198
- /* git_repository_config, git_repository_set_config */
199
- RB_GIT_REPO_OWNED_ATTR(rb_cRuggedConfig, config);
200
232
 
233
+ /*
234
+ * call-seq:
235
+ * repo.index = idx
236
+ *
237
+ * Set the index for this +Repository+. +idx+ must be a instance of
238
+ * +Rugged::Index+. This index will be used internally by all
239
+ * operations that use the Git index on +repo+.
240
+ *
241
+ * Note that it's not necessary to set the +index+ for any repository;
242
+ * by default repositories are loaded with the index file that can be
243
+ * located on the +.git+ folder in the filesystem.
244
+ */
245
+ static VALUE rb_git_repo_set_index(VALUE self, VALUE rb_data)
246
+ {
247
+ RB_GIT_REPO_OWNED_SET(rb_cRuggedIndex, index);
248
+ }
249
+
250
+ static VALUE rb_git_repo_get_index(VALUE self)
251
+ {
252
+ RB_GIT_REPO_OWNED_GET(rb_cRuggedIndex, index);
253
+ }
254
+
255
+ /*
256
+ * call-seq:
257
+ * repo.config = cfg
258
+ *
259
+ * Set the configuration file for this +Repository+. +cfg+ must be a instance of
260
+ * +Rugged::Config+. This config file will be used internally by all
261
+ * operations that need to lookup configuration settings on +repo+.
262
+ *
263
+ * Note that it's not necessary to set the +config+ for any repository;
264
+ * by default repositories are loaded with their relevant config files
265
+ * on the filesystem, and the corresponding global and system files if
266
+ * they can be found.
267
+ */
268
+ static VALUE rb_git_repo_set_config(VALUE self, VALUE rb_data)
269
+ {
270
+ RB_GIT_REPO_OWNED_SET(rb_cRuggedConfig, config);
271
+ }
272
+
273
+ static VALUE rb_git_repo_get_config(VALUE self)
274
+ {
275
+ RB_GIT_REPO_OWNED_GET(rb_cRuggedConfig, config);
276
+ }
277
+
278
+ /*
279
+ * call-seq:
280
+ * repo.include?(oid) -> true or false
281
+ * repo.exists?(oid) -> true or false
282
+ *
283
+ * Return whether an object with the given SHA1 OID (represented as
284
+ * a 40-character string) exists in the repository.
285
+ *
286
+ * repo.include?("d8786bfc97485e8d7b19b21fb88c8ef1f199fc3f") #=> true
287
+ */
201
288
  static VALUE rb_git_repo_exists(VALUE self, VALUE hex)
202
289
  {
203
290
  git_repository *repo;
@@ -236,6 +323,18 @@ static VALUE rb_git_repo_read(VALUE self, VALUE hex)
236
323
  return rugged_raw_read(repo, &oid);
237
324
  }
238
325
 
326
+ /*
327
+ * call-seq:
328
+ * Repository.hash(buffer, type) -> oid
329
+ *
330
+ * Hash the contents of +buffer+ as raw bytes (ignoring any encoding
331
+ * information) and adding the relevant header corresponding to +type+,
332
+ * and return a hex string representing the result from the hash.
333
+ *
334
+ * Repository.hash('hello world', :commit) #=> "de5ba987198bcf2518885f0fc1350e5172cded78"
335
+ *
336
+ * Repository.hash('hello_world', :tag) #=> "9d09060c850defbc7711d08b57def0d14e742f4e"
337
+ */
239
338
  static VALUE rb_git_repo_hash(VALUE self, VALUE rb_buffer, VALUE rb_type)
240
339
  {
241
340
  int error;
@@ -246,13 +345,25 @@ static VALUE rb_git_repo_hash(VALUE self, VALUE rb_buffer, VALUE rb_type)
246
345
  error = git_odb_hash(&oid,
247
346
  RSTRING_PTR(rb_buffer),
248
347
  RSTRING_LEN(rb_buffer),
249
- rugged_get_otype(rb_type)
348
+ rugged_otype_get(rb_type)
250
349
  );
251
350
  rugged_exception_check(error);
252
351
 
253
352
  return rugged_create_oid(&oid);
254
353
  }
255
354
 
355
+ /*
356
+ * call-seq:
357
+ * Repository.hash_file(path, type) -> oid
358
+ *
359
+ * Hash the contents of the file pointed at by +path+, assuming
360
+ * that it'd be stored in the ODB with the given +type+, and return
361
+ * a hex string representing the SHA1 OID resulting from the hash.
362
+ *
363
+ * Repository.hash_file('foo.txt', :commit) #=> "de5ba987198bcf2518885f0fc1350e5172cded78"
364
+ *
365
+ * Repository.hash_file('foo.txt', :tag) #=> "9d09060c850defbc7711d08b57def0d14e742f4e"
366
+ */
256
367
  static VALUE rb_git_repo_hashfile(VALUE self, VALUE rb_path, VALUE rb_type)
257
368
  {
258
369
  int error;
@@ -262,7 +373,7 @@ static VALUE rb_git_repo_hashfile(VALUE self, VALUE rb_path, VALUE rb_type)
262
373
 
263
374
  error = git_odb_hashfile(&oid,
264
375
  StringValueCStr(rb_path),
265
- rugged_get_otype(rb_type)
376
+ rugged_otype_get(rb_type)
266
377
  );
267
378
  rugged_exception_check(error);
268
379
 
@@ -285,7 +396,7 @@ static VALUE rb_git_repo_write(VALUE self, VALUE rb_buffer, VALUE rub_type)
285
396
  error = git_repository_odb(&odb, repo);
286
397
  rugged_exception_check(error);
287
398
 
288
- type = rugged_get_otype(rub_type);
399
+ type = rugged_otype_get(rub_type);
289
400
 
290
401
  error = git_odb_open_wstream(&stream, odb, RSTRING_LEN(rb_buffer), type);
291
402
  rugged_exception_check(error);
@@ -301,22 +412,70 @@ static VALUE rb_git_repo_write(VALUE self, VALUE rb_buffer, VALUE rub_type)
301
412
  return rugged_create_oid(&oid);
302
413
  }
303
414
 
304
- #define GIT_REPO_GETTER(method) \
305
- static VALUE rb_git_repo_##method(VALUE self) \
306
- { \
415
+ #define RB_GIT_REPO_GETTER(method) \
307
416
  git_repository *repo; \
308
417
  int error; \
309
418
  Data_Get_Struct(self, git_repository, repo); \
310
419
  error = git_repository_##method(repo); \
311
420
  rugged_exception_check(error); \
312
421
  return error ? Qtrue : Qfalse; \
422
+
423
+ /*
424
+ * call-seq:
425
+ * repo.bare? -> true or false
426
+ *
427
+ * Return whether a repository is bare or not. A bare repository has no
428
+ * working directory.
429
+ */
430
+ static VALUE rb_git_repo_is_bare(VALUE self)
431
+ {
432
+ RB_GIT_REPO_GETTER(is_bare);
313
433
  }
314
434
 
315
- GIT_REPO_GETTER(is_bare); /* git_repository_is_bare */
316
- GIT_REPO_GETTER(is_empty); /* git_repository_is_empty */
317
- GIT_REPO_GETTER(head_detached); /* git_repository_head_detached */
318
- GIT_REPO_GETTER(head_orphan); /* git_repository_head_orphan */
319
435
 
436
+ /*
437
+ * call-seq:
438
+ * repo.empty? -> true or false
439
+ *
440
+ * Return whether a repository is empty or not. An empty repository has just
441
+ * been initialized and has no commits yet.
442
+ */
443
+ static VALUE rb_git_repo_is_empty(VALUE self)
444
+ {
445
+ RB_GIT_REPO_GETTER(is_empty);
446
+ }
447
+
448
+ /*
449
+ * call-seq:
450
+ * repo.head_detached? -> true or false
451
+ *
452
+ * Return whether the +HEAD+ of a repository is detached or not.
453
+ */
454
+ static VALUE rb_git_repo_head_detached(VALUE self)
455
+ {
456
+ RB_GIT_REPO_GETTER(head_detached);
457
+ }
458
+
459
+ /*
460
+ * call-seq:
461
+ * repo.head_orphan? -> true or false
462
+ *
463
+ * Return whether the +HEAD+ of a repository is orphaned or not.
464
+ */
465
+ static VALUE rb_git_repo_head_orphan(VALUE self)
466
+ {
467
+ RB_GIT_REPO_GETTER(head_orphan);
468
+ }
469
+
470
+ /*
471
+ * call-seq:
472
+ * repo.path -> path
473
+ *
474
+ * Return the full, normalized path to this repository. For non-bare repositories,
475
+ * this is the path of the actual +.git+ folder, not the working directory.
476
+ *
477
+ * repo.path #=> "/home/foo/workthing/.git"
478
+ */
320
479
  static VALUE rb_git_repo_path(VALUE self)
321
480
  {
322
481
  git_repository *repo;
@@ -324,6 +483,19 @@ static VALUE rb_git_repo_path(VALUE self)
324
483
  return rugged_str_new2(git_repository_path(repo), NULL);
325
484
  }
326
485
 
486
+ /*
487
+ * call-seq:
488
+ * repo.workdir -> path or nil
489
+ *
490
+ * Return the working directory for this repository, or +nil+ if
491
+ * the repository is bare.
492
+ *
493
+ * repo1.bare? #=> false
494
+ * repo1.workdir # => "/home/foo/workthing/"
495
+ *
496
+ * repo2.bare? #=> true
497
+ * repo2.workdir #=> nil
498
+ */
327
499
  static VALUE rb_git_repo_workdir(VALUE self)
328
500
  {
329
501
  git_repository *repo;
@@ -335,6 +507,22 @@ static VALUE rb_git_repo_workdir(VALUE self)
335
507
  return workdir ? rugged_str_new2(workdir, NULL) : Qnil;
336
508
  }
337
509
 
510
+ /*
511
+ * call-seq:
512
+ * repo.workdir = path
513
+ *
514
+ * Sets the working directory of +repo+ to +path+. All internal
515
+ * operations on +repo+ that affect the working directory will
516
+ * instead use +path+.
517
+ *
518
+ * The +workdir+ can be set on bare repositories to temporarily
519
+ * turn them into normal repositories.
520
+ *
521
+ * repo.bare? #=> true
522
+ * repo.workdir = "/tmp/workdir"
523
+ * repo.bare? #=> false
524
+ * repo.checkout
525
+ */
338
526
  static VALUE rb_git_repo_set_workdir(VALUE self, VALUE rb_workdir)
339
527
  {
340
528
  git_repository *repo;
@@ -349,6 +537,21 @@ static VALUE rb_git_repo_set_workdir(VALUE self, VALUE rb_workdir)
349
537
  return Qnil;
350
538
  }
351
539
 
540
+ /*
541
+ * call-seq:
542
+ * Repository.discover(path = nil, across_fs = true) -> repository
543
+ *
544
+ * Traverse +path+ upwards until a Git working directory with a +.git+
545
+ * folder has been found, open it and return it as a +Repository+
546
+ * object.
547
+ *
548
+ * If +path+ is +nil+, the current working directory will be used as
549
+ * a starting point.
550
+ *
551
+ * If +across_fs+ is +true+, the traversal won't stop when reaching
552
+ * a different device than the one that contained +path+ (only applies
553
+ * to UNIX-based OSses).
554
+ */
352
555
  static VALUE rb_git_repo_discover(int argc, VALUE *argv, VALUE self)
353
556
  {
354
557
  VALUE rb_path, rb_across_fs;
@@ -411,9 +614,45 @@ static int rugged__status_cb(const char *path, unsigned int flags, void *payload
411
614
  flags_to_rb(flags)
412
615
  );
413
616
 
414
- return GIT_SUCCESS;
617
+ return GIT_OK;
415
618
  }
416
619
 
620
+ /*
621
+ * call-seq:
622
+ * repo.status { |status_data| block }
623
+ * repo.status(path) -> status_data
624
+ *
625
+ * Returns the status for one or more files in the working directory
626
+ * of the repository. This is equivalent to the +git status+ command.
627
+ *
628
+ * The returned +status_data+ is always an array containing one or more
629
+ * status flags as Ruby symbols. Possible flags are:
630
+ *
631
+ * - +:index_new+: the file is new in the index
632
+ * - +:index_modified+: the file has been modified in the index
633
+ * - +:index_deleted+: the file has been deleted from the index
634
+ * - +:worktree_new+: the file is new in the working directory
635
+ * - +:worktree_modified+: the file has been modified in the working directory
636
+ * - +:worktree_deleted+: the file has been deleted from the working directory
637
+ *
638
+ * If a +block+ is given, status information will be gathered for every
639
+ * single file on the working dir. The +block+ will be called with the
640
+ * status data for each file.
641
+ *
642
+ * repo.status { |status_data| puts status_data.inspect }
643
+ *
644
+ * results in, for example:
645
+ *
646
+ * [:index_new, :worktree_new]
647
+ * [:worktree_modified]
648
+ *
649
+ * If a +path+ is given instead, the function will return the +status_data+ for
650
+ * the file pointed to by path, or raise an exception if the path doesn't exist.
651
+ *
652
+ * +path+ must be relative to the repository's working directory.
653
+ *
654
+ * repo.status('src/diff.c') #=> [:index_new, :worktree_new]
655
+ */
417
656
  static VALUE rb_git_repo_status(int argc, VALUE *argv, VALUE self)
418
657
  {
419
658
  int error;
@@ -456,7 +695,9 @@ void Init_rugged_repo()
456
695
  rb_define_singleton_method(rb_cRuggedRepo, "init_at", rb_git_repo_init_at, 2);
457
696
  rb_define_singleton_method(rb_cRuggedRepo, "discover", rb_git_repo_discover, -1);
458
697
 
459
- rb_define_method(rb_cRuggedRepo, "exists", rb_git_repo_exists, 1);
698
+ rb_define_method(rb_cRuggedRepo, "exists?", rb_git_repo_exists, 1);
699
+ rb_define_method(rb_cRuggedRepo, "include?", rb_git_repo_exists, 1);
700
+
460
701
  rb_define_method(rb_cRuggedRepo, "read", rb_git_repo_read, 1);
461
702
  rb_define_method(rb_cRuggedRepo, "write", rb_git_repo_write, 2);
462
703
  rb_define_method(rb_cRuggedRepo, "path", rb_git_repo_path, 0);
@@ -471,6 +712,7 @@ void Init_rugged_repo()
471
712
 
472
713
  rb_define_method(rb_cRuggedRepo, "bare?", rb_git_repo_is_bare, 0);
473
714
  rb_define_method(rb_cRuggedRepo, "empty?", rb_git_repo_is_empty, 0);
715
+
474
716
  rb_define_method(rb_cRuggedRepo, "head_detached?", rb_git_repo_head_detached, 0);
475
717
  rb_define_method(rb_cRuggedRepo, "head_orphan?", rb_git_repo_head_orphan, 0);
476
718
 
@@ -478,5 +720,5 @@ void Init_rugged_repo()
478
720
  rb_define_method(rb_cRuggedOdbObject, "data", rb_git_odbobj_data, 0);
479
721
  rb_define_method(rb_cRuggedOdbObject, "len", rb_git_odbobj_size, 0);
480
722
  rb_define_method(rb_cRuggedOdbObject, "type", rb_git_odbobj_type, 0);
481
- rb_define_method(rb_cRuggedOdbObject, "hash", rb_git_odbobj_hash, 0);
723
+ rb_define_method(rb_cRuggedOdbObject, "oid", rb_git_odbobj_oid, 0);
482
724
  }
@@ -2,17 +2,17 @@
2
2
  * The MIT License
3
3
  *
4
4
  * Copyright (c) 2011 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
8
8
  * in the Software without restriction, including without limitation the rights
9
9
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
10
  * copies of the Software, and to permit persons to whom the Software is
11
11
  * furnished to do so, subject to the following conditions:
12
- *
12
+ *
13
13
  * The above copyright notice and this permission notice shall be included in
14
14
  * all copies or substantial portions of the Software.
15
- *
15
+ *
16
16
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
17
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
18
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -39,6 +39,13 @@ VALUE rugged_walker_new(VALUE klass, VALUE owner, git_revwalk *walk)
39
39
  return rb_walk;
40
40
  }
41
41
 
42
+ /*
43
+ * call-seq:
44
+ * Walker.new(repository) -> walker
45
+ *
46
+ * Create a new +Walker+ instance able to walk commits found
47
+ * in +repository+, which is a <tt>Rugged::Repository</tt> instance.
48
+ */
42
49
  static VALUE rb_git_walker_new(VALUE klass, VALUE rb_repo)
43
50
  {
44
51
  git_repository *repo;
@@ -53,6 +60,31 @@ static VALUE rb_git_walker_new(VALUE klass, VALUE rb_repo)
53
60
  return rugged_walker_new(klass, rb_repo, walk);;
54
61
  }
55
62
 
63
+ /*
64
+ * call-seq:
65
+ * walker.each { |commit| block }
66
+ * walker.each -> Iterator
67
+ *
68
+ * Perform the walk through the repository, yielding each
69
+ * one of the commits found as a <tt>Rugged::Commit</tt> instance
70
+ * to +block+.
71
+ *
72
+ * If no +block+ is given, an +Iterator+ will be returned.
73
+ *
74
+ * The walker must have been previously set-up before a walk can be performed
75
+ * (i.e. at least one commit must have been pushed).
76
+ *
77
+ * walker.push("92b22bbcb37caf4f6f53d30292169e84f5e4283b")
78
+ * walker.each { |commit| puts commit.oid }
79
+ *
80
+ * generates:
81
+ *
82
+ * 92b22bbcb37caf4f6f53d30292169e84f5e4283b
83
+ * 6b750d5800439b502de669465b385e5f469c78b6
84
+ * ef9207141549f4ffcd3c4597e270d32e10d0a6bc
85
+ * cb75e05f0f8ac3407fb3bd0ebd5ff07573b16c9f
86
+ * ...
87
+ */
56
88
  static VALUE rb_git_walker_each(VALUE self)
57
89
  {
58
90
  git_revwalk *walk;
@@ -74,12 +106,28 @@ static VALUE rb_git_walker_each(VALUE self)
74
106
  rb_yield(rugged_object_new(rugged_owner(self), (git_object *)commit));
75
107
  }
76
108
 
77
- if (error != GIT_EREVWALKOVER)
109
+ if (error != GIT_REVWALKOVER)
78
110
  rugged_exception_check(error);
79
111
 
80
112
  return Qnil;
81
113
  }
82
114
 
115
+ /*
116
+ * call-seq:
117
+ * walker.push(commit)
118
+ *
119
+ * Push one new +commit+ to start the walk from. +commit+ must be a
120
+ * +String+ with the OID of a commit in the repository, or a <tt>Rugged::Commit</tt>
121
+ * instance.
122
+ *
123
+ * More than one commit may be pushed to the walker (to walk several
124
+ * branches simulataneously).
125
+ *
126
+ * Duplicate pushed commits will be ignored; at least one commit must have been
127
+ * pushed as a starting point before the walk can begin.
128
+ *
129
+ * walker.push("92b22bbcb37caf4f6f53d30292169e84f5e4283b")
130
+ */
83
131
  static VALUE rb_git_walker_push(VALUE self, VALUE rb_commit)
84
132
  {
85
133
  git_revwalk *walk;
@@ -94,6 +142,11 @@ static VALUE rb_git_walker_push(VALUE self, VALUE rb_commit)
94
142
  return Qnil;
95
143
  }
96
144
 
145
+ /*
146
+ * call-seq:
147
+ * walker.hide(commit)
148
+ *
149
+ */
97
150
  static VALUE rb_git_walker_hide(VALUE self, VALUE rb_commit)
98
151
  {
99
152
  git_revwalk *walk;
@@ -55,9 +55,9 @@ git_signature *rugged_signature_get(VALUE rb_sig)
55
55
 
56
56
  Check_Type(rb_sig, T_HASH);
57
57
 
58
- rb_name = rb_hash_aref(rb_sig, rb_intern("name"));
59
- rb_email = rb_hash_aref(rb_sig, rb_intern("email"));
60
- rb_time = rb_hash_aref(rb_sig, rb_intern("time"));
58
+ rb_name = rb_hash_aref(rb_sig, CSTR2SYM("name"));
59
+ rb_email = rb_hash_aref(rb_sig, CSTR2SYM("email"));
60
+ rb_time = rb_hash_aref(rb_sig, CSTR2SYM("time"));
61
61
 
62
62
  Check_Type(rb_name, T_STRING);
63
63
  Check_Type(rb_email, T_STRING);