rugged 0.17.0.b7 → 0.18.0.b1

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 (310) hide show
  1. data/LICENSE +1 -1
  2. data/README.md +88 -32
  3. data/ext/rugged/extconf.rb +4 -2
  4. data/ext/rugged/rugged.c +72 -10
  5. data/ext/rugged/rugged.h +14 -10
  6. data/ext/rugged/rugged_blob.c +8 -10
  7. data/ext/rugged/rugged_branch.c +11 -14
  8. data/ext/rugged/rugged_commit.c +31 -24
  9. data/ext/rugged/rugged_config.c +2 -2
  10. data/ext/rugged/rugged_index.c +133 -198
  11. data/ext/rugged/rugged_note.c +372 -0
  12. data/ext/rugged/rugged_object.c +50 -22
  13. data/ext/rugged/rugged_reference.c +122 -130
  14. data/ext/rugged/rugged_remote.c +72 -29
  15. data/ext/rugged/rugged_repo.c +402 -20
  16. data/ext/rugged/rugged_revwalk.c +7 -3
  17. data/ext/rugged/rugged_settings.c +110 -0
  18. data/ext/rugged/rugged_signature.c +23 -7
  19. data/ext/rugged/rugged_tag.c +32 -16
  20. data/ext/rugged/rugged_tree.c +44 -15
  21. data/lib/rugged.rb +1 -0
  22. data/lib/rugged/index.rb +8 -0
  23. data/lib/rugged/remote.rb +13 -0
  24. data/lib/rugged/repository.rb +3 -3
  25. data/lib/rugged/version.rb +1 -1
  26. data/test/blob_test.rb +13 -15
  27. data/test/branch_test.rb +32 -67
  28. data/test/commit_test.rb +50 -12
  29. data/test/config_test.rb +12 -11
  30. data/test/coverage/HEAD.json +1 -1
  31. data/test/coverage/cover.rb +40 -21
  32. data/test/errors_test.rb +34 -0
  33. data/test/fixtures/alternate/objects/14/6ae76773c91e3b1d00cf7a338ec55ae58297e2 +0 -0
  34. data/test/fixtures/alternate/objects/14/9c32d47e99d0a3572ff1e70a2e0051bbf347a9 +0 -0
  35. data/test/fixtures/alternate/objects/14/fb3108588f9421bf764041e5e3ac305eb6277f +0 -0
  36. data/test/fixtures/testrepo.git/logs/refs/notes/commits +1 -0
  37. data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +1 -0
  38. data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
  39. data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +1 -0
  40. data/test/fixtures/testrepo.git/objects/94/eca2de348d5f672faf56b0decafa5937e3235e +0 -0
  41. data/test/fixtures/testrepo.git/objects/9b/7384fe1676186192842f5d3e129457b62db9e3 +0 -0
  42. data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +3 -0
  43. data/test/fixtures/testrepo.git/refs/notes/commits +1 -0
  44. data/test/index_test.rb +65 -69
  45. data/test/lib_test.rb +76 -11
  46. data/test/note_test.rb +158 -0
  47. data/test/object_test.rb +8 -11
  48. data/test/reference_test.rb +77 -85
  49. data/test/remote_test.rb +86 -8
  50. data/test/repo_pack_test.rb +9 -7
  51. data/test/repo_reset_test.rb +80 -0
  52. data/test/repo_test.rb +176 -53
  53. data/test/tag_test.rb +44 -7
  54. data/test/test_helper.rb +63 -35
  55. data/test/tree_test.rb +34 -13
  56. data/test/walker_test.rb +14 -14
  57. data/vendor/libgit2/Makefile.embed +1 -1
  58. data/vendor/libgit2/deps/http-parser/http_parser.c +974 -578
  59. data/vendor/libgit2/deps/http-parser/http_parser.h +106 -70
  60. data/vendor/libgit2/deps/regex/regcomp.c +7 -6
  61. data/vendor/libgit2/deps/regex/regex_internal.c +1 -1
  62. data/vendor/libgit2/deps/regex/regex_internal.h +12 -3
  63. data/vendor/libgit2/deps/regex/regexec.c +5 -5
  64. data/vendor/libgit2/include/git2.h +5 -1
  65. data/vendor/libgit2/include/git2/attr.h +4 -2
  66. data/vendor/libgit2/include/git2/blob.h +39 -12
  67. data/vendor/libgit2/include/git2/branch.h +123 -35
  68. data/vendor/libgit2/include/git2/checkout.h +206 -48
  69. data/vendor/libgit2/include/git2/clone.h +72 -27
  70. data/vendor/libgit2/include/git2/commit.h +20 -17
  71. data/vendor/libgit2/include/git2/common.h +67 -1
  72. data/vendor/libgit2/include/git2/config.h +81 -60
  73. data/vendor/libgit2/include/git2/cred_helpers.h +53 -0
  74. data/vendor/libgit2/include/git2/diff.h +459 -150
  75. data/vendor/libgit2/include/git2/errors.h +9 -1
  76. data/vendor/libgit2/include/git2/graph.h +41 -0
  77. data/vendor/libgit2/include/git2/ignore.h +7 -6
  78. data/vendor/libgit2/include/git2/index.h +323 -97
  79. data/vendor/libgit2/include/git2/indexer.h +27 -59
  80. data/vendor/libgit2/include/git2/inttypes.h +4 -0
  81. data/vendor/libgit2/include/git2/merge.h +13 -3
  82. data/vendor/libgit2/include/git2/message.h +14 -8
  83. data/vendor/libgit2/include/git2/net.h +9 -7
  84. data/vendor/libgit2/include/git2/notes.h +88 -29
  85. data/vendor/libgit2/include/git2/object.h +16 -6
  86. data/vendor/libgit2/include/git2/odb.h +80 -17
  87. data/vendor/libgit2/include/git2/odb_backend.h +47 -11
  88. data/vendor/libgit2/include/git2/oid.h +26 -17
  89. data/vendor/libgit2/include/git2/pack.h +62 -8
  90. data/vendor/libgit2/include/git2/push.h +131 -0
  91. data/vendor/libgit2/include/git2/refdb.h +103 -0
  92. data/vendor/libgit2/include/git2/refdb_backend.h +109 -0
  93. data/vendor/libgit2/include/git2/reflog.h +30 -21
  94. data/vendor/libgit2/include/git2/refs.h +215 -193
  95. data/vendor/libgit2/include/git2/refspec.h +22 -2
  96. data/vendor/libgit2/include/git2/remote.h +158 -37
  97. data/vendor/libgit2/include/git2/repository.h +150 -31
  98. data/vendor/libgit2/include/git2/reset.h +43 -9
  99. data/vendor/libgit2/include/git2/revparse.h +48 -4
  100. data/vendor/libgit2/include/git2/revwalk.h +25 -10
  101. data/vendor/libgit2/include/git2/signature.h +20 -12
  102. data/vendor/libgit2/include/git2/stash.h +121 -0
  103. data/vendor/libgit2/include/git2/status.h +122 -53
  104. data/vendor/libgit2/include/git2/strarray.h +17 -11
  105. data/vendor/libgit2/include/git2/submodule.h +42 -7
  106. data/vendor/libgit2/include/git2/tag.h +72 -59
  107. data/vendor/libgit2/include/git2/threads.h +4 -2
  108. data/vendor/libgit2/include/git2/trace.h +68 -0
  109. data/vendor/libgit2/include/git2/transport.h +328 -0
  110. data/vendor/libgit2/include/git2/tree.h +149 -120
  111. data/vendor/libgit2/include/git2/types.h +13 -12
  112. data/vendor/libgit2/include/git2/version.h +3 -3
  113. data/vendor/libgit2/src/amiga/map.c +2 -2
  114. data/vendor/libgit2/src/attr.c +58 -48
  115. data/vendor/libgit2/src/attr.h +4 -18
  116. data/vendor/libgit2/src/attr_file.c +30 -6
  117. data/vendor/libgit2/src/attr_file.h +6 -8
  118. data/vendor/libgit2/src/attrcache.h +24 -0
  119. data/vendor/libgit2/src/blob.c +30 -7
  120. data/vendor/libgit2/src/blob.h +1 -1
  121. data/vendor/libgit2/src/branch.c +361 -68
  122. data/vendor/libgit2/src/branch.h +17 -0
  123. data/vendor/libgit2/src/bswap.h +1 -1
  124. data/vendor/libgit2/src/buf_text.c +291 -0
  125. data/vendor/libgit2/src/buf_text.h +122 -0
  126. data/vendor/libgit2/src/buffer.c +27 -101
  127. data/vendor/libgit2/src/buffer.h +54 -39
  128. data/vendor/libgit2/src/cache.c +15 -6
  129. data/vendor/libgit2/src/cache.h +1 -1
  130. data/vendor/libgit2/src/cc-compat.h +3 -1
  131. data/vendor/libgit2/src/checkout.c +1165 -222
  132. data/vendor/libgit2/src/checkout.h +24 -0
  133. data/vendor/libgit2/src/clone.c +171 -86
  134. data/vendor/libgit2/src/commit.c +44 -45
  135. data/vendor/libgit2/src/commit.h +3 -3
  136. data/vendor/libgit2/src/commit_list.c +194 -0
  137. data/vendor/libgit2/src/commit_list.h +49 -0
  138. data/vendor/libgit2/src/common.h +44 -10
  139. data/vendor/libgit2/src/compress.c +1 -1
  140. data/vendor/libgit2/src/compress.h +1 -1
  141. data/vendor/libgit2/src/config.c +211 -124
  142. data/vendor/libgit2/src/config.h +23 -4
  143. data/vendor/libgit2/src/config_cache.c +2 -2
  144. data/vendor/libgit2/src/config_file.c +129 -53
  145. data/vendor/libgit2/src/config_file.h +10 -8
  146. data/vendor/libgit2/src/crlf.c +66 -67
  147. data/vendor/libgit2/src/date.c +12 -12
  148. data/vendor/libgit2/src/delta-apply.c +14 -1
  149. data/vendor/libgit2/src/delta-apply.h +18 -1
  150. data/vendor/libgit2/src/delta.c +40 -107
  151. data/vendor/libgit2/src/delta.h +19 -17
  152. data/vendor/libgit2/src/diff.c +347 -496
  153. data/vendor/libgit2/src/diff.h +27 -1
  154. data/vendor/libgit2/src/diff_output.c +564 -249
  155. data/vendor/libgit2/src/diff_output.h +15 -8
  156. data/vendor/libgit2/src/diff_tform.c +687 -0
  157. data/vendor/libgit2/src/errors.c +27 -36
  158. data/vendor/libgit2/src/fetch.c +13 -351
  159. data/vendor/libgit2/src/fetch.h +13 -3
  160. data/vendor/libgit2/src/fetchhead.c +295 -0
  161. data/vendor/libgit2/src/fetchhead.h +34 -0
  162. data/vendor/libgit2/src/filebuf.c +42 -15
  163. data/vendor/libgit2/src/filebuf.h +4 -2
  164. data/vendor/libgit2/src/fileops.c +466 -113
  165. data/vendor/libgit2/src/fileops.h +154 -28
  166. data/vendor/libgit2/src/filter.c +3 -75
  167. data/vendor/libgit2/src/filter.h +1 -29
  168. data/vendor/libgit2/src/fnmatch.c +1 -1
  169. data/vendor/libgit2/src/fnmatch.h +1 -1
  170. data/vendor/libgit2/src/global.c +54 -10
  171. data/vendor/libgit2/src/global.h +10 -1
  172. data/vendor/libgit2/src/graph.c +178 -0
  173. data/vendor/libgit2/src/hash.c +25 -52
  174. data/vendor/libgit2/src/hash.h +21 -9
  175. data/vendor/libgit2/src/{sha1/sha1.c → hash/hash_generic.c} +20 -12
  176. data/vendor/libgit2/src/hash/hash_generic.h +24 -0
  177. data/vendor/libgit2/src/hash/hash_openssl.h +45 -0
  178. data/vendor/libgit2/src/hash/hash_win32.c +291 -0
  179. data/vendor/libgit2/src/hash/hash_win32.h +140 -0
  180. data/vendor/libgit2/src/hashsig.c +368 -0
  181. data/vendor/libgit2/src/hashsig.h +72 -0
  182. data/vendor/libgit2/src/ignore.c +22 -15
  183. data/vendor/libgit2/src/ignore.h +6 -1
  184. data/vendor/libgit2/src/index.c +770 -171
  185. data/vendor/libgit2/src/index.h +13 -5
  186. data/vendor/libgit2/src/indexer.c +286 -431
  187. data/vendor/libgit2/src/iterator.c +854 -466
  188. data/vendor/libgit2/src/iterator.h +134 -109
  189. data/vendor/libgit2/src/map.h +1 -1
  190. data/vendor/libgit2/src/merge.c +296 -0
  191. data/vendor/libgit2/src/merge.h +22 -0
  192. data/vendor/libgit2/src/message.c +1 -1
  193. data/vendor/libgit2/src/message.h +1 -1
  194. data/vendor/libgit2/src/mwindow.c +35 -30
  195. data/vendor/libgit2/src/mwindow.h +2 -2
  196. data/vendor/libgit2/src/netops.c +162 -98
  197. data/vendor/libgit2/src/netops.h +50 -15
  198. data/vendor/libgit2/src/notes.c +109 -58
  199. data/vendor/libgit2/src/notes.h +2 -1
  200. data/vendor/libgit2/src/object.c +46 -57
  201. data/vendor/libgit2/src/object.h +1 -8
  202. data/vendor/libgit2/src/odb.c +151 -40
  203. data/vendor/libgit2/src/odb.h +5 -1
  204. data/vendor/libgit2/src/odb_loose.c +4 -5
  205. data/vendor/libgit2/src/odb_pack.c +122 -80
  206. data/vendor/libgit2/src/offmap.h +65 -0
  207. data/vendor/libgit2/src/oid.c +12 -4
  208. data/vendor/libgit2/src/oidmap.h +1 -1
  209. data/vendor/libgit2/src/pack-objects.c +88 -61
  210. data/vendor/libgit2/src/pack-objects.h +8 -8
  211. data/vendor/libgit2/src/pack.c +293 -28
  212. data/vendor/libgit2/src/pack.h +49 -4
  213. data/vendor/libgit2/src/path.c +103 -14
  214. data/vendor/libgit2/src/path.h +23 -7
  215. data/vendor/libgit2/src/pathspec.c +168 -0
  216. data/vendor/libgit2/src/pathspec.h +40 -0
  217. data/vendor/libgit2/src/pool.c +29 -4
  218. data/vendor/libgit2/src/pool.h +8 -1
  219. data/vendor/libgit2/src/posix.c +26 -27
  220. data/vendor/libgit2/src/posix.h +2 -3
  221. data/vendor/libgit2/src/pqueue.c +23 -1
  222. data/vendor/libgit2/src/pqueue.h +23 -1
  223. data/vendor/libgit2/src/push.c +653 -0
  224. data/vendor/libgit2/src/push.h +51 -0
  225. data/vendor/libgit2/src/refdb.c +185 -0
  226. data/vendor/libgit2/src/refdb.h +46 -0
  227. data/vendor/libgit2/src/refdb_fs.c +1024 -0
  228. data/vendor/libgit2/src/refdb_fs.h +15 -0
  229. data/vendor/libgit2/src/reflog.c +77 -45
  230. data/vendor/libgit2/src/reflog.h +1 -3
  231. data/vendor/libgit2/src/refs.c +366 -1326
  232. data/vendor/libgit2/src/refs.h +22 -13
  233. data/vendor/libgit2/src/refspec.c +46 -7
  234. data/vendor/libgit2/src/refspec.h +11 -1
  235. data/vendor/libgit2/src/remote.c +758 -120
  236. data/vendor/libgit2/src/remote.h +10 -5
  237. data/vendor/libgit2/src/repo_template.h +6 -6
  238. data/vendor/libgit2/src/repository.c +315 -96
  239. data/vendor/libgit2/src/repository.h +5 -3
  240. data/vendor/libgit2/src/reset.c +99 -81
  241. data/vendor/libgit2/src/revparse.c +157 -84
  242. data/vendor/libgit2/src/revwalk.c +68 -470
  243. data/vendor/libgit2/src/revwalk.h +44 -0
  244. data/vendor/libgit2/src/sha1_lookup.c +1 -1
  245. data/vendor/libgit2/src/sha1_lookup.h +1 -1
  246. data/vendor/libgit2/src/signature.c +68 -200
  247. data/vendor/libgit2/src/signature.h +1 -1
  248. data/vendor/libgit2/src/stash.c +663 -0
  249. data/vendor/libgit2/src/status.c +101 -79
  250. data/vendor/libgit2/src/strmap.h +1 -1
  251. data/vendor/libgit2/src/submodule.c +67 -51
  252. data/vendor/libgit2/src/submodule.h +1 -1
  253. data/vendor/libgit2/src/tag.c +35 -29
  254. data/vendor/libgit2/src/tag.h +1 -1
  255. data/vendor/libgit2/src/thread-utils.c +1 -1
  256. data/vendor/libgit2/src/thread-utils.h +2 -2
  257. data/vendor/libgit2/src/trace.c +39 -0
  258. data/vendor/libgit2/src/trace.h +56 -0
  259. data/vendor/libgit2/src/transport.c +81 -34
  260. data/vendor/libgit2/src/transports/cred.c +60 -0
  261. data/vendor/libgit2/src/transports/cred_helpers.c +49 -0
  262. data/vendor/libgit2/src/transports/git.c +234 -127
  263. data/vendor/libgit2/src/transports/http.c +761 -433
  264. data/vendor/libgit2/src/transports/local.c +460 -64
  265. data/vendor/libgit2/src/transports/smart.c +345 -0
  266. data/vendor/libgit2/src/transports/smart.h +179 -0
  267. data/vendor/libgit2/src/{pkt.c → transports/smart_pkt.c} +131 -12
  268. data/vendor/libgit2/src/transports/smart_protocol.c +856 -0
  269. data/vendor/libgit2/src/transports/winhttp.c +1136 -0
  270. data/vendor/libgit2/src/tree-cache.c +2 -2
  271. data/vendor/libgit2/src/tree-cache.h +1 -1
  272. data/vendor/libgit2/src/tree.c +239 -166
  273. data/vendor/libgit2/src/tree.h +11 -2
  274. data/vendor/libgit2/src/tsort.c +39 -23
  275. data/vendor/libgit2/src/unix/map.c +1 -1
  276. data/vendor/libgit2/src/unix/posix.h +12 -2
  277. data/vendor/libgit2/src/unix/realpath.c +30 -0
  278. data/vendor/libgit2/src/util.c +250 -13
  279. data/vendor/libgit2/src/util.h +71 -14
  280. data/vendor/libgit2/src/vector.c +123 -60
  281. data/vendor/libgit2/src/vector.h +24 -22
  282. data/vendor/libgit2/src/win32/dir.c +1 -1
  283. data/vendor/libgit2/src/win32/dir.h +1 -1
  284. data/vendor/libgit2/src/win32/error.c +77 -0
  285. data/vendor/libgit2/src/win32/error.h +13 -0
  286. data/vendor/libgit2/src/win32/findfile.c +143 -54
  287. data/vendor/libgit2/src/win32/findfile.h +10 -6
  288. data/vendor/libgit2/src/win32/map.c +1 -1
  289. data/vendor/libgit2/src/win32/mingw-compat.h +1 -1
  290. data/vendor/libgit2/src/win32/msvc-compat.h +10 -1
  291. data/vendor/libgit2/src/win32/posix.h +10 -1
  292. data/vendor/libgit2/src/win32/posix_w32.c +132 -63
  293. data/vendor/libgit2/src/win32/precompiled.c +1 -1
  294. data/vendor/libgit2/src/win32/pthread.c +1 -1
  295. data/vendor/libgit2/src/win32/pthread.h +1 -1
  296. data/vendor/libgit2/src/win32/utf-conv.c +5 -5
  297. data/vendor/libgit2/src/win32/utf-conv.h +3 -3
  298. data/vendor/libgit2/src/win32/version.h +20 -0
  299. metadata +308 -252
  300. data/test/fixtures/testrepo.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
  301. data/test/fixtures/testrepo.git/objects/7f/043268ea43ce18e3540acaabf9e090c91965b0 +0 -0
  302. data/test/fixtures/testrepo.git/objects/a3/e05719b428a2d0ed7a55c4ce53dcc5768c6d5e +0 -0
  303. data/test/index_test.rb~ +0 -218
  304. data/vendor/libgit2/src/pkt.h +0 -91
  305. data/vendor/libgit2/src/ppc/sha1.c +0 -70
  306. data/vendor/libgit2/src/ppc/sha1.h +0 -26
  307. data/vendor/libgit2/src/protocol.c +0 -110
  308. data/vendor/libgit2/src/protocol.h +0 -21
  309. data/vendor/libgit2/src/sha1.h +0 -33
  310. data/vendor/libgit2/src/transport.h +0 -148
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * The MIT License
3
3
  *
4
- * Copyright (c) 2011 GitHub, Inc
4
+ * Copyright (c) 2013 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
@@ -135,10 +135,12 @@ static VALUE rb_git_walker_push(VALUE self, VALUE rb_commit)
135
135
 
136
136
  Data_Get_Struct(self, git_revwalk, walk);
137
137
 
138
- commit = (git_commit *)rugged_object_load(
138
+ commit = (git_commit *)rugged_object_get(
139
139
  git_revwalk_repository(walk), rb_commit, GIT_OBJ_COMMIT);
140
140
 
141
141
  git_revwalk_push(walk, git_object_id((git_object *)commit));
142
+
143
+ git_commit_free(commit);
142
144
  return Qnil;
143
145
  }
144
146
 
@@ -154,10 +156,12 @@ static VALUE rb_git_walker_hide(VALUE self, VALUE rb_commit)
154
156
 
155
157
  Data_Get_Struct(self, git_revwalk, walk);
156
158
 
157
- commit = (git_commit *)rugged_object_load(
159
+ commit = (git_commit *)rugged_object_get(
158
160
  git_revwalk_repository(walk), rb_commit, GIT_OBJ_COMMIT);
159
161
 
160
162
  git_revwalk_hide(walk, git_object_id((git_object *)commit));
163
+
164
+ git_commit_free(commit);
161
165
  return Qnil;
162
166
  }
163
167
 
@@ -0,0 +1,110 @@
1
+ /*
2
+ * The MIT License
3
+ *
4
+ * Copyright (c) 2013 GitHub, Inc
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in
14
+ * all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ * THE SOFTWARE.
23
+ */
24
+
25
+ #include "rugged.h"
26
+
27
+ #if !defined(NUM2SIZET)
28
+ # if SIZEOF_SIZE_T == SIZEOF_LONG
29
+ # define NUM2SIZET(n) ((size_t)NUM2ULONG(n))
30
+ # define SIZET2NUM(n) ((size_t)ULONG2NUM(n))
31
+ # else
32
+ # define NUM2SIZET(n) ((size_t)NUM2ULL(n))
33
+ # define SIZET2NUM(n) ((size_t)ULL2NUM(n))
34
+ # endif
35
+ #endif /* ! defined(NUM2SIZET) */
36
+
37
+ extern VALUE rb_mRugged;
38
+
39
+ /*
40
+ * call-seq:
41
+ * Rugged.Settings[option] = value
42
+ *
43
+ * Sets a libgit2 library option
44
+ *
45
+ */
46
+ static VALUE rb_git_set_option(VALUE self, VALUE option, VALUE value)
47
+ {
48
+ const char *opt;
49
+
50
+ Check_Type(option, T_STRING);
51
+ opt = StringValueCStr(option);
52
+
53
+ if (strcmp(opt, "mwindow_size") == 0) {
54
+ size_t val;
55
+ Check_Type(value, T_FIXNUM);
56
+ val = NUM2SIZET(value);
57
+ git_libgit2_opts(GIT_OPT_SET_MWINDOW_SIZE, val);
58
+ }
59
+
60
+ else if (strcmp(opt, "mwindow_mapped_limit") == 0) {
61
+ size_t val;
62
+ Check_Type(value, T_FIXNUM);
63
+ val = NUM2SIZET(value);
64
+ git_libgit2_opts(GIT_OPT_SET_MWINDOW_MAPPED_LIMIT, val);
65
+ }
66
+
67
+ else {
68
+ rb_raise(rb_eArgError, "Unknown option specified");
69
+ }
70
+
71
+ return Qnil;
72
+ }
73
+
74
+ /*
75
+ * call-seq:
76
+ * val = Rugged.Settings[option]
77
+ *
78
+ * Gets the value of a libgit2 library option
79
+ *
80
+ */
81
+ static VALUE rb_git_get_option(VALUE self, VALUE option)
82
+ {
83
+ const char *opt;
84
+
85
+ Check_Type(option, T_STRING);
86
+ opt = StringValueCStr(option);
87
+
88
+ if (strcmp(opt, "mwindow_size") == 0) {
89
+ size_t val;
90
+ git_libgit2_opts(GIT_OPT_GET_MWINDOW_SIZE, &val);
91
+ return SIZET2NUM(val);
92
+ }
93
+
94
+ else if (strcmp(opt, "mwindow_mapped_limit") == 0) {
95
+ size_t val;
96
+ git_libgit2_opts(GIT_OPT_GET_MWINDOW_MAPPED_LIMIT, &val);
97
+ return SIZET2NUM(val);
98
+ }
99
+
100
+ else {
101
+ rb_raise(rb_eArgError, "Unknown option specified");
102
+ }
103
+ }
104
+
105
+ void Init_rugged_settings()
106
+ {
107
+ VALUE rb_cRuggedSettings = rb_define_class_under(rb_mRugged, "Settings", rb_cObject);
108
+ rb_define_module_function(rb_cRuggedSettings, "[]=", rb_git_set_option, 2);
109
+ rb_define_module_function(rb_cRuggedSettings, "[]", rb_git_get_option, 1);
110
+ }
@@ -1,18 +1,18 @@
1
1
  /*
2
2
  * The MIT License
3
3
  *
4
- * Copyright (c) 2011 GitHub, Inc
5
- *
4
+ * Copyright (c) 2013 GitHub, Inc
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
@@ -37,8 +37,17 @@ VALUE rugged_signature_new(const git_signature *sig, const char *encoding_name)
37
37
 
38
38
  rb_sig = rb_hash_new();
39
39
 
40
+ #if RUBY_API_VERSION_MINOR >= 9
41
+ /* Allocate the time with a the given timezone */
42
+ rb_time = rb_funcall(
43
+ rb_time_new(sig->when.time, 0),
44
+ rb_intern("getlocal"), 1,
45
+ INT2FIX(sig->when.offset * 60)
46
+ );
47
+ #else
40
48
  rb_time = rb_time_new(sig->when.time, 0);
41
- rb_funcall(rb_time, rb_intern("utc"), 0);
49
+ rb_hash_aset(rb_sig, CSTR2SYM("time_offset"), INT2FIX(sig->when.offset * 60));
50
+ #endif
42
51
 
43
52
  rb_hash_aset(rb_sig, CSTR2SYM("name"), rugged_str_new2(sig->name, encoding));
44
53
  rb_hash_aset(rb_sig, CSTR2SYM("email"), rugged_str_new2(sig->email, encoding));
@@ -50,7 +59,7 @@ VALUE rugged_signature_new(const git_signature *sig, const char *encoding_name)
50
59
  git_signature *rugged_signature_get(VALUE rb_sig)
51
60
  {
52
61
  int error;
53
- VALUE rb_time, rb_unix_t, rb_offset, rb_name, rb_email;
62
+ VALUE rb_time, rb_unix_t, rb_offset, rb_name, rb_email, rb_time_offset;
54
63
  git_signature *sig;
55
64
 
56
65
  Check_Type(rb_sig, T_HASH);
@@ -58,6 +67,7 @@ git_signature *rugged_signature_get(VALUE rb_sig)
58
67
  rb_name = rb_hash_aref(rb_sig, CSTR2SYM("name"));
59
68
  rb_email = rb_hash_aref(rb_sig, CSTR2SYM("email"));
60
69
  rb_time = rb_hash_aref(rb_sig, CSTR2SYM("time"));
70
+ rb_time_offset = rb_hash_aref(rb_sig, CSTR2SYM("time_offset"));
61
71
 
62
72
  Check_Type(rb_name, T_STRING);
63
73
  Check_Type(rb_email, T_STRING);
@@ -65,7 +75,13 @@ git_signature *rugged_signature_get(VALUE rb_sig)
65
75
  rb_raise(rb_eTypeError, "expected Time object");
66
76
 
67
77
  rb_unix_t = rb_funcall(rb_time, rb_intern("tv_sec"), 0);
68
- rb_offset = rb_funcall(rb_time, rb_intern("utc_offset"), 0);
78
+
79
+ if (NIL_P(rb_time_offset)) {
80
+ rb_offset = rb_funcall(rb_time, rb_intern("utc_offset"), 0);
81
+ } else {
82
+ Check_Type(rb_time_offset, T_FIXNUM);
83
+ rb_offset = rb_time_offset;
84
+ }
69
85
 
70
86
  error = git_signature_new(&sig,
71
87
  StringValueCStr(rb_name),
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * The MIT License
3
3
  *
4
- * Copyright (c) 2011 GitHub, Inc
4
+ * Copyright (c) 2013 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
@@ -57,20 +57,21 @@ static VALUE rb_git_tag_target_GET(VALUE self)
57
57
  /*
58
58
  * call-seq:
59
59
  * tag.target_oid -> oid
60
+ * tag.target_id -> oid
60
61
  *
61
62
  * Return the oid pointed at by this tag, as a <tt>String</tt>
62
63
  * instance.
63
64
  *
64
- * tag.target_oid #=> "2cb831a8aea28b2c1b9c63385585b864e4d3bad1"
65
+ * tag.target_id #=> "2cb831a8aea28b2c1b9c63385585b864e4d3bad1"
65
66
  */
66
- static VALUE rb_git_tag_target_oid_GET(VALUE self)
67
+ static VALUE rb_git_tag_target_id_GET(VALUE self)
67
68
  {
68
69
  git_tag *tag;
69
70
  const git_oid *target_oid;
70
71
 
71
72
  Data_Get_Struct(self, git_tag, tag);
72
73
 
73
- target_oid = git_tag_target_oid(tag);
74
+ target_oid = git_tag_target_id(tag);
74
75
 
75
76
  return rugged_create_oid(target_oid);
76
77
  }
@@ -92,7 +93,7 @@ static VALUE rb_git_tag_target_type_GET(VALUE self)
92
93
  git_tag *tag;
93
94
  Data_Get_Struct(self, git_tag, tag);
94
95
 
95
- return rugged_otype_new(git_tag_type(tag));
96
+ return rugged_otype_new(git_tag_target_type(tag));
96
97
  }
97
98
 
98
99
  /*
@@ -124,9 +125,15 @@ static VALUE rb_git_tag_name_GET(VALUE self)
124
125
  static VALUE rb_git_tag_tagger_GET(VALUE self)
125
126
  {
126
127
  git_tag *tag;
128
+ const git_signature *tagger;
129
+
127
130
  Data_Get_Struct(self, git_tag, tag);
131
+ tagger = git_tag_tagger(tag);
132
+
133
+ if (!tagger)
134
+ return Qnil;
128
135
 
129
- return rugged_signature_new(git_tag_tagger(tag), NULL);
136
+ return rugged_signature_new(tagger, NULL);
130
137
  }
131
138
 
132
139
  /*
@@ -141,9 +148,15 @@ static VALUE rb_git_tag_tagger_GET(VALUE self)
141
148
  static VALUE rb_git_tag_message_GET(VALUE self)
142
149
  {
143
150
  git_tag *tag;
151
+ const char *message;
152
+
144
153
  Data_Get_Struct(self, git_tag, tag);
154
+ message = git_tag_message(tag);
155
+
156
+ if (!message)
157
+ return Qnil;
145
158
 
146
- return rugged_str_new2(git_tag_message(tag), NULL);
159
+ return rugged_str_new2(message, NULL);
147
160
  }
148
161
 
149
162
  static VALUE rb_git_tag_create(VALUE self, VALUE rb_repo, VALUE rb_data)
@@ -155,7 +168,7 @@ static VALUE rb_git_tag_create(VALUE self, VALUE rb_repo, VALUE rb_data)
155
168
  VALUE rb_name, rb_target, rb_tagger, rb_message, rb_force;
156
169
 
157
170
  if (!rb_obj_is_kind_of(rb_repo, rb_cRuggedRepo))
158
- rb_raise(rb_eTypeError, "Expeting a Rugged::Repository instance");
171
+ rb_raise(rb_eTypeError, "Expecting a Rugged::Repository instance");
159
172
 
160
173
  Data_Get_Struct(rb_repo, git_repository, repo);
161
174
 
@@ -172,22 +185,24 @@ static VALUE rb_git_tag_create(VALUE self, VALUE rb_repo, VALUE rb_data)
172
185
  rb_name = rb_hash_aref(rb_data, CSTR2SYM("name"));
173
186
  Check_Type(rb_name, T_STRING);
174
187
 
175
- rb_target = rb_hash_aref(rb_data, CSTR2SYM("target"));
176
- target = rugged_object_load(repo, rb_target, GIT_OBJ_ANY);
177
-
178
188
  rb_force = rb_hash_aref(rb_data, CSTR2SYM("force"));
179
189
  if (!NIL_P(rb_force))
180
190
  force = rugged_parse_bool(rb_force);
181
191
 
182
192
  /* only for heavy tags */
183
- rb_message = rb_hash_aref(rb_data, CSTR2SYM("message"));
184
193
  rb_tagger = rb_hash_aref(rb_data, CSTR2SYM("tagger"));
194
+ rb_message = rb_hash_aref(rb_data, CSTR2SYM("message"));
195
+
196
+ if (!NIL_P(rb_message))
197
+ Check_Type(rb_message, T_STRING);
198
+
199
+ rb_target = rb_hash_aref(rb_data, CSTR2SYM("target"));
200
+ target = rugged_object_get(repo, rb_target, GIT_OBJ_ANY);
185
201
 
186
202
  if (!NIL_P(rb_tagger) && !NIL_P(rb_message)) {
187
203
  git_signature *tagger = NULL;
188
204
 
189
205
  tagger = rugged_signature_get(rb_tagger);
190
- Check_Type(rb_message, T_STRING);
191
206
 
192
207
  error = git_tag_create(
193
208
  &tag_oid,
@@ -239,7 +254,7 @@ static VALUE rb_git_tag_each(int argc, VALUE *argv, VALUE self)
239
254
  }
240
255
 
241
256
  if (!rb_obj_is_kind_of(rb_repo, rb_cRuggedRepo))
242
- rb_raise(rb_eTypeError, "Expeting a Rugged::Repository instance");
257
+ rb_raise(rb_eTypeError, "Expecting a Rugged::Repository instance");
243
258
 
244
259
  Data_Get_Struct(rb_repo, git_repository, repo);
245
260
 
@@ -259,7 +274,7 @@ static VALUE rb_git_tag_delete(VALUE self, VALUE rb_repo, VALUE rb_name)
259
274
  int error;
260
275
 
261
276
  if (!rb_obj_is_kind_of(rb_repo, rb_cRuggedRepo))
262
- rb_raise(rb_eTypeError, "Expeting a Rugged::Repository instance");
277
+ rb_raise(rb_eTypeError, "Expecting a Rugged::Repository instance");
263
278
  Data_Get_Struct(rb_repo, git_repository, repo);
264
279
 
265
280
  Check_Type(rb_name, T_STRING);
@@ -280,7 +295,8 @@ void Init_rugged_tag()
280
295
  rb_define_method(rb_cRuggedTag, "message", rb_git_tag_message_GET, 0);
281
296
  rb_define_method(rb_cRuggedTag, "name", rb_git_tag_name_GET, 0);
282
297
  rb_define_method(rb_cRuggedTag, "target", rb_git_tag_target_GET, 0);
283
- rb_define_method(rb_cRuggedTag, "target_oid", rb_git_tag_target_oid_GET, 0);
298
+ rb_define_method(rb_cRuggedTag, "target_oid", rb_git_tag_target_id_GET, 0);
299
+ rb_define_method(rb_cRuggedTag, "target_id", rb_git_tag_target_id_GET, 0);
284
300
  rb_define_method(rb_cRuggedTag, "target_type", rb_git_tag_target_type_GET, 0);
285
301
  rb_define_method(rb_cRuggedTag, "tagger", rb_git_tag_tagger_GET, 0);
286
302
  }
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * The MIT License
3
3
  *
4
- * Copyright (c) 2011 GitHub, Inc
4
+ * Copyright (c) 2013 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
@@ -67,6 +67,7 @@ static VALUE rb_git_treeentry_fromC(const git_tree_entry *entry)
67
67
  /*
68
68
  * Rugged Tree
69
69
  */
70
+
70
71
  /*
71
72
  * call-seq:
72
73
  * tree.count -> count
@@ -117,6 +118,33 @@ static VALUE rb_git_tree_get_entry(VALUE self, VALUE entry_id)
117
118
  rb_raise(rb_eTypeError, "entry_id must be either an index or a filename");
118
119
  }
119
120
 
121
+ /*
122
+ * call-seq:
123
+ * tree.get_entry_by_oid(rb_oid) -> entry
124
+ *
125
+ * Return one of the entries from a tree as a +Hash+, based off the oid SHA.
126
+ *
127
+ * If the entry doesn't exist, +nil+ will be returned.
128
+ *
129
+ * This does a full traversal of the every element in the tree, so this method
130
+ * is not especially fast.
131
+ *
132
+ * tree.get_entry_by_oid("d8786bfc97485e8d7b19b21fb88c8ef1f199fc3f")
133
+ * #=> {:name => "foo.txt", :type => :blob, :oid => "d8786bfc97485e8d7b19b21fb88c8ef1f199fc3f", :filemode => 0}
134
+ *
135
+ */
136
+ static VALUE rb_git_tree_get_entry_by_oid(VALUE self, VALUE rb_oid)
137
+ {
138
+ git_tree *tree;
139
+ git_oid oid;
140
+ Data_Get_Struct(self, git_tree, tree);
141
+
142
+ Check_Type(rb_oid, T_STRING);
143
+ rugged_exception_check(git_oid_fromstr(&oid, StringValueCStr(rb_oid)));
144
+
145
+ return rb_git_treeentry_fromC(git_tree_entry_byoid(tree, &oid));
146
+ }
147
+
120
148
  /*
121
149
  * call-seq:
122
150
  * tree.each { |entry| block }
@@ -139,7 +167,7 @@ static VALUE rb_git_tree_get_entry(VALUE self, VALUE entry_id)
139
167
  static VALUE rb_git_tree_each(VALUE self)
140
168
  {
141
169
  git_tree *tree;
142
- unsigned int i, count;
170
+ size_t i, count;
143
171
  Data_Get_Struct(self, git_tree, tree);
144
172
 
145
173
  if (!rb_block_given_p())
@@ -206,9 +234,9 @@ static VALUE rb_git_tree_walk(VALUE self, VALUE rb_mode)
206
234
  mode = GIT_TREEWALK_POST;
207
235
  else
208
236
  rb_raise(rb_eTypeError,
209
- "Invalid iteration mode. Expected `:preorder` or `:postorder`");
237
+ "Invalid iteration mode. Expected `:preorder` or `:postorder`");
210
238
 
211
- error = git_tree_walk(tree, &rugged__treewalk_cb, mode, (void *)rb_block_proc());
239
+ error = git_tree_walk(tree, mode, &rugged__treewalk_cb, (void *)rb_block_proc());
212
240
  rugged_exception_check(error);
213
241
 
214
242
  return Qnil;
@@ -216,20 +244,20 @@ static VALUE rb_git_tree_walk(VALUE self, VALUE rb_mode)
216
244
 
217
245
  static VALUE rb_git_tree_path(VALUE self, VALUE rb_path)
218
246
  {
219
- int error;
220
- git_tree *tree;
221
- git_tree_entry *entry;
222
- VALUE rb_entry;
223
- Data_Get_Struct(self, git_tree, tree);
224
- Check_Type(rb_path, T_STRING);
247
+ int error;
248
+ git_tree *tree;
249
+ git_tree_entry *entry;
250
+ VALUE rb_entry;
251
+ Data_Get_Struct(self, git_tree, tree);
252
+ Check_Type(rb_path, T_STRING);
225
253
 
226
- error = git_tree_entry_bypath(&entry, tree, StringValueCStr(rb_path));
227
- rugged_exception_check(error);
254
+ error = git_tree_entry_bypath(&entry, tree, StringValueCStr(rb_path));
255
+ rugged_exception_check(error);
228
256
 
229
- rb_entry = rb_git_treeentry_fromC(entry);
230
- git_tree_entry_free(entry);
257
+ rb_entry = rb_git_treeentry_fromC(entry);
258
+ git_tree_entry_free(entry);
231
259
 
232
- return rb_entry;
260
+ return rb_entry;
233
261
  }
234
262
 
235
263
  static void rb_git_treebuilder_free(git_treebuilder *bld)
@@ -373,6 +401,7 @@ void Init_rugged_tree()
373
401
  rb_define_method(rb_cRuggedTree, "count", rb_git_tree_entrycount, 0);
374
402
  rb_define_method(rb_cRuggedTree, "length", rb_git_tree_entrycount, 0);
375
403
  rb_define_method(rb_cRuggedTree, "get_entry", rb_git_tree_get_entry, 1);
404
+ rb_define_method(rb_cRuggedTree, "get_entry_by_oid", rb_git_tree_get_entry_by_oid, 1);
376
405
  rb_define_method(rb_cRuggedTree, "path", rb_git_tree_path, 1);
377
406
  rb_define_method(rb_cRuggedTree, "[]", rb_git_tree_get_entry, 1);
378
407
  rb_define_method(rb_cRuggedTree, "each", rb_git_tree_each, 0);