rugged 0.17.0.b7 → 0.18.0.b1

Sign up to get free protection for your applications and to get access to all the features.
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,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2009-2012 the libgit2 contributors
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
3
  *
4
4
  * This file is part of libgit2, distributed under the GNU GPL v2 with
5
5
  * a Linking Exception. For full terms see the included COPYING file.
@@ -19,30 +19,36 @@
19
19
  GIT_BEGIN_DECL
20
20
 
21
21
  /** Array of strings */
22
- typedef struct _git_strarray git_strarray;
23
- struct _git_strarray {
22
+ typedef struct git_strarray {
24
23
  char **strings;
25
24
  size_t count;
26
- };
25
+ } git_strarray;
27
26
 
28
27
  /**
29
28
  * Close a string array object
30
29
  *
31
- * This method must always be called once a git_strarray is no
32
- * longer needed, otherwise memory will leak.
30
+ * This method should be called on `git_strarray` objects where the strings
31
+ * array is allocated and contains allocated strings, such as what you
32
+ * would get from `git_strarray_copy()`. Not doing so, will result in a
33
+ * memory leak.
33
34
  *
34
- * @param array array to close
35
+ * This does not free the `git_strarray` itself, since the library will
36
+ * never allocate that object directly itself (it is more commonly embedded
37
+ * inside another struct or created on the stack).
38
+ *
39
+ * @param array git_strarray from which to free string data
35
40
  */
36
41
  GIT_EXTERN(void) git_strarray_free(git_strarray *array);
37
42
 
38
43
  /**
39
44
  * Copy a string array object from source to target.
40
- *
41
- * Note: target is overwritten and hence should be empty,
42
- * otherwise its contents are leaked.
45
+ *
46
+ * Note: target is overwritten and hence should be empty, otherwise its
47
+ * contents are leaked. Call git_strarray_free() if necessary.
43
48
  *
44
49
  * @param tgt target
45
50
  * @param src source
51
+ * @return 0 on success, < 0 on allocation failure
46
52
  */
47
53
  GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src);
48
54
 
@@ -51,4 +57,4 @@ GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src);
51
57
  GIT_END_DECL
52
58
 
53
59
  #endif
54
-
60
+
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2012 the libgit2 contributors
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
3
  *
4
4
  * This file is part of libgit2, distributed under the GNU GPL v2 with
5
5
  * a Linking Exception. For full terms see the included COPYING file.
@@ -119,11 +119,28 @@ typedef enum {
119
119
  GIT_SUBMODULE_STATUS_WD_UNTRACKED = (1u << 13),
120
120
  } git_submodule_status_t;
121
121
 
122
- #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \
123
- (((S) & ~(GIT_SUBMODULE_STATUS_IN_HEAD | \
122
+ #define GIT_SUBMODULE_STATUS__IN_FLAGS \
123
+ (GIT_SUBMODULE_STATUS_IN_HEAD | \
124
124
  GIT_SUBMODULE_STATUS_IN_INDEX | \
125
125
  GIT_SUBMODULE_STATUS_IN_CONFIG | \
126
- GIT_SUBMODULE_STATUS_IN_WD)) == 0)
126
+ GIT_SUBMODULE_STATUS_IN_WD)
127
+
128
+ #define GIT_SUBMODULE_STATUS__INDEX_FLAGS \
129
+ (GIT_SUBMODULE_STATUS_INDEX_ADDED | \
130
+ GIT_SUBMODULE_STATUS_INDEX_DELETED | \
131
+ GIT_SUBMODULE_STATUS_INDEX_MODIFIED)
132
+
133
+ #define GIT_SUBMODULE_STATUS__WD_FLAGS \
134
+ ~(GIT_SUBMODULE_STATUS__IN_FLAGS | GIT_SUBMODULE_STATUS__INDEX_FLAGS)
135
+
136
+ #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \
137
+ (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0)
138
+
139
+ #define GIT_SUBMODULE_STATUS_IS_INDEX_UNMODIFIED(S) \
140
+ (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0)
141
+
142
+ #define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \
143
+ (((S) & GIT_SUBMODULE_STATUS__WD_FLAGS) == 0)
127
144
 
128
145
  #define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \
129
146
  (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \
@@ -318,7 +335,7 @@ GIT_EXTERN(int) git_submodule_set_url(git_submodule *submodule, const char *url)
318
335
  * @param submodule Pointer to submodule object
319
336
  * @return Pointer to git_oid or NULL if submodule is not in index.
320
337
  */
321
- GIT_EXTERN(const git_oid *) git_submodule_index_oid(git_submodule *submodule);
338
+ GIT_EXTERN(const git_oid *) git_submodule_index_id(git_submodule *submodule);
322
339
 
323
340
  /**
324
341
  * Get the OID for the submodule in the current HEAD tree.
@@ -326,7 +343,7 @@ GIT_EXTERN(const git_oid *) git_submodule_index_oid(git_submodule *submodule);
326
343
  * @param submodule Pointer to submodule object
327
344
  * @return Pointer to git_oid or NULL if submodule is not in the HEAD.
328
345
  */
329
- GIT_EXTERN(const git_oid *) git_submodule_head_oid(git_submodule *submodule);
346
+ GIT_EXTERN(const git_oid *) git_submodule_head_id(git_submodule *submodule);
330
347
 
331
348
  /**
332
349
  * Get the OID for the submodule in the current working directory.
@@ -339,7 +356,7 @@ GIT_EXTERN(const git_oid *) git_submodule_head_oid(git_submodule *submodule);
339
356
  * @param submodule Pointer to submodule object
340
357
  * @return Pointer to git_oid or NULL if submodule is not checked out.
341
358
  */
342
- GIT_EXTERN(const git_oid *) git_submodule_wd_oid(git_submodule *submodule);
359
+ GIT_EXTERN(const git_oid *) git_submodule_wd_id(git_submodule *submodule);
343
360
 
344
361
  /**
345
362
  * Get the ignore rule for the submodule.
@@ -504,6 +521,24 @@ GIT_EXTERN(int) git_submodule_status(
504
521
  unsigned int *status,
505
522
  git_submodule *submodule);
506
523
 
524
+ /**
525
+ * Get the locations of submodule information.
526
+ *
527
+ * This is a bit like a very lightweight version of `git_submodule_status`.
528
+ * It just returns a made of the first four submodule status values (i.e.
529
+ * the ones like GIT_SUBMODULE_STATUS_IN_HEAD, etc) that tell you where the
530
+ * submodule data comes from (i.e. the HEAD commit, gitmodules file, etc.).
531
+ * This can be useful if you want to know if the submodule is present in the
532
+ * working directory at this point in time, etc.
533
+ *
534
+ * @param status Combination of first four `GIT_SUBMODULE_STATUS` flags
535
+ * @param submodule Submodule for which to get status
536
+ * @return 0 on success, <0 on error
537
+ */
538
+ GIT_EXTERN(int) git_submodule_location(
539
+ unsigned int *location_status,
540
+ git_submodule *submodule);
541
+
507
542
  /** @} */
508
543
  GIT_END_DECL
509
544
  #endif
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2009-2012 the libgit2 contributors
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
3
  *
4
4
  * This file is part of libgit2, distributed under the GNU GPL v2 with
5
5
  * a Linking Exception. For full terms see the included COPYING file.
@@ -25,14 +25,16 @@ GIT_BEGIN_DECL
25
25
  /**
26
26
  * Lookup a tag object from the repository.
27
27
  *
28
- * @param tag pointer to the looked up tag
28
+ * @param out pointer to the looked up tag
29
29
  * @param repo the repo to use when locating the tag.
30
30
  * @param id identity of the tag to locate.
31
31
  * @return 0 or an error code
32
32
  */
33
- GIT_INLINE(int) git_tag_lookup(git_tag **tag, git_repository *repo, const git_oid *id)
33
+ GIT_INLINE(int) git_tag_lookup(
34
+ git_tag **out, git_repository *repo, const git_oid *id)
34
35
  {
35
- return git_object_lookup((git_object **)tag, repo, id, (git_otype)GIT_OBJ_TAG);
36
+ return git_object_lookup(
37
+ (git_object **)out, repo, id, (git_otype)GIT_OBJ_TAG);
36
38
  }
37
39
 
38
40
  /**
@@ -41,32 +43,33 @@ GIT_INLINE(int) git_tag_lookup(git_tag **tag, git_repository *repo, const git_oi
41
43
  *
42
44
  * @see git_object_lookup_prefix
43
45
  *
44
- * @param tag pointer to the looked up tag
46
+ * @param out pointer to the looked up tag
45
47
  * @param repo the repo to use when locating the tag.
46
48
  * @param id identity of the tag to locate.
47
49
  * @param len the length of the short identifier
48
50
  * @return 0 or an error code
49
51
  */
50
- GIT_INLINE(int) git_tag_lookup_prefix(git_tag **tag, git_repository *repo, const git_oid *id, size_t len)
52
+ GIT_INLINE(int) git_tag_lookup_prefix(
53
+ git_tag **out, git_repository *repo, const git_oid *id, size_t len)
51
54
  {
52
- return git_object_lookup_prefix((git_object **)tag, repo, id, len, (git_otype)GIT_OBJ_TAG);
55
+ return git_object_lookup_prefix(
56
+ (git_object **)out, repo, id, len, (git_otype)GIT_OBJ_TAG);
53
57
  }
54
58
 
55
59
  /**
56
60
  * Close an open tag
57
61
  *
58
- * This is a wrapper around git_object_free()
62
+ * You can no longer use the git_tag pointer after this call.
59
63
  *
60
- * IMPORTANT:
61
- * It *is* necessary to call this method when you stop
62
- * using a tag. Failure to do so will cause a memory leak.
64
+ * IMPORTANT: You MUST call this method when you are through with a tag to
65
+ * release memory. Failure to do so will cause a memory leak.
63
66
  *
64
67
  * @param tag the tag to close
65
68
  */
66
69
 
67
70
  GIT_INLINE(void) git_tag_free(git_tag *tag)
68
71
  {
69
- git_object_free((git_object *) tag);
72
+ git_object_free((git_object *)tag);
70
73
  }
71
74
 
72
75
 
@@ -76,7 +79,7 @@ GIT_INLINE(void) git_tag_free(git_tag *tag)
76
79
  * @param tag a previously loaded tag.
77
80
  * @return object identity for the tag.
78
81
  */
79
- GIT_EXTERN(const git_oid *) git_tag_id(git_tag *tag);
82
+ GIT_EXTERN(const git_oid *) git_tag_id(const git_tag *tag);
80
83
 
81
84
  /**
82
85
  * Get the tagged object of a tag
@@ -84,11 +87,11 @@ GIT_EXTERN(const git_oid *) git_tag_id(git_tag *tag);
84
87
  * This method performs a repository lookup for the
85
88
  * given object and returns it
86
89
  *
87
- * @param target pointer where to store the target
90
+ * @param target_out pointer where to store the target
88
91
  * @param tag a previously loaded tag.
89
92
  * @return 0 or an error code
90
93
  */
91
- GIT_EXTERN(int) git_tag_target(git_object **target, git_tag *tag);
94
+ GIT_EXTERN(int) git_tag_target(git_object **target_out, const git_tag *tag);
92
95
 
93
96
  /**
94
97
  * Get the OID of the tagged object of a tag
@@ -96,7 +99,7 @@ GIT_EXTERN(int) git_tag_target(git_object **target, git_tag *tag);
96
99
  * @param tag a previously loaded tag.
97
100
  * @return pointer to the OID
98
101
  */
99
- GIT_EXTERN(const git_oid *) git_tag_target_oid(git_tag *tag);
102
+ GIT_EXTERN(const git_oid *) git_tag_target_id(const git_tag *tag);
100
103
 
101
104
  /**
102
105
  * Get the type of a tag's tagged object
@@ -104,7 +107,7 @@ GIT_EXTERN(const git_oid *) git_tag_target_oid(git_tag *tag);
104
107
  * @param tag a previously loaded tag.
105
108
  * @return type of the tagged object
106
109
  */
107
- GIT_EXTERN(git_otype) git_tag_type(git_tag *tag);
110
+ GIT_EXTERN(git_otype) git_tag_target_type(const git_tag *tag);
108
111
 
109
112
  /**
110
113
  * Get the name of a tag
@@ -112,23 +115,23 @@ GIT_EXTERN(git_otype) git_tag_type(git_tag *tag);
112
115
  * @param tag a previously loaded tag.
113
116
  * @return name of the tag
114
117
  */
115
- GIT_EXTERN(const char *) git_tag_name(git_tag *tag);
118
+ GIT_EXTERN(const char *) git_tag_name(const git_tag *tag);
116
119
 
117
120
  /**
118
121
  * Get the tagger (author) of a tag
119
122
  *
120
123
  * @param tag a previously loaded tag.
121
- * @return reference to the tag's author
124
+ * @return reference to the tag's author or NULL when unspecified
122
125
  */
123
- GIT_EXTERN(const git_signature *) git_tag_tagger(git_tag *tag);
126
+ GIT_EXTERN(const git_signature *) git_tag_tagger(const git_tag *tag);
124
127
 
125
128
  /**
126
129
  * Get the message of a tag
127
130
  *
128
131
  * @param tag a previously loaded tag.
129
- * @return message of the tag
132
+ * @return message of the tag or NULL when unspecified
130
133
  */
131
- GIT_EXTERN(const char *) git_tag_message(git_tag *tag);
134
+ GIT_EXTERN(const char *) git_tag_message(const git_tag *tag);
132
135
 
133
136
 
134
137
  /**
@@ -141,6 +144,10 @@ GIT_EXTERN(const char *) git_tag_message(git_tag *tag);
141
144
  * The message will not be cleaned up. This can be achieved
142
145
  * through `git_message_prettify()`.
143
146
  *
147
+ * The tag name will be checked for validity. You must avoid
148
+ * the characters '~', '^', ':', '\\', '?', '[', and '*', and the
149
+ * sequences ".." and "@{" which have special meaning to revparse.
150
+ *
144
151
  * @param oid Pointer where to store the OID of the
145
152
  * newly created tag. If the tag already exists, this parameter
146
153
  * will be the oid of the existing tag, and the function will
@@ -162,18 +169,18 @@ GIT_EXTERN(const char *) git_tag_message(git_tag *tag);
162
169
  *
163
170
  * @param force Overwrite existing references
164
171
  *
165
- * @return 0 or an error code
172
+ * @return 0 on success, GIT_EINVALIDSPEC or an error code
166
173
  * A tag object is written to the ODB, and a proper reference
167
174
  * is written in the /refs/tags folder, pointing to it
168
175
  */
169
176
  GIT_EXTERN(int) git_tag_create(
170
- git_oid *oid,
171
- git_repository *repo,
172
- const char *tag_name,
173
- const git_object *target,
174
- const git_signature *tagger,
175
- const char *message,
176
- int force);
177
+ git_oid *oid,
178
+ git_repository *repo,
179
+ const char *tag_name,
180
+ const git_object *target,
181
+ const git_signature *tagger,
182
+ const char *message,
183
+ int force);
177
184
 
178
185
  /**
179
186
  * Create a new tag in the repository from a buffer
@@ -185,10 +192,10 @@ GIT_EXTERN(int) git_tag_create(
185
192
  * @return 0 on success; error code otherwise
186
193
  */
187
194
  GIT_EXTERN(int) git_tag_create_frombuffer(
188
- git_oid *oid,
189
- git_repository *repo,
190
- const char *buffer,
191
- int force);
195
+ git_oid *oid,
196
+ git_repository *repo,
197
+ const char *buffer,
198
+ int force);
192
199
 
193
200
  /**
194
201
  * Create a new lightweight tag pointing at a target object
@@ -197,6 +204,9 @@ GIT_EXTERN(int) git_tag_create_frombuffer(
197
204
  * this target object. If `force` is true and a reference
198
205
  * already exists with the given name, it'll be replaced.
199
206
  *
207
+ * The tag name will be checked for validity.
208
+ * See `git_tag_create()` for rules about valid names.
209
+ *
200
210
  * @param oid Pointer where to store the OID of the provided
201
211
  * target object. If the tag already exists, this parameter
202
212
  * will be filled with the oid of the existing pointed object
@@ -213,30 +223,33 @@ GIT_EXTERN(int) git_tag_create_frombuffer(
213
223
  *
214
224
  * @param force Overwrite existing references
215
225
  *
216
- * @return 0 or an error code
226
+ * @return 0 on success, GIT_EINVALIDSPEC or an error code
217
227
  * A proper reference is written in the /refs/tags folder,
218
228
  * pointing to the provided target object
219
229
  */
220
230
  GIT_EXTERN(int) git_tag_create_lightweight(
221
- git_oid *oid,
222
- git_repository *repo,
223
- const char *tag_name,
224
- const git_object *target,
225
- int force);
231
+ git_oid *oid,
232
+ git_repository *repo,
233
+ const char *tag_name,
234
+ const git_object *target,
235
+ int force);
226
236
 
227
237
  /**
228
238
  * Delete an existing tag reference.
229
239
  *
240
+ * The tag name will be checked for validity.
241
+ * See `git_tag_create()` for rules about valid names.
242
+ *
230
243
  * @param repo Repository where lives the tag
231
244
  *
232
245
  * @param tag_name Name of the tag to be deleted;
233
246
  * this name is validated for consistency.
234
247
  *
235
- * @return 0 or an error code
248
+ * @return 0 on success, GIT_EINVALIDSPEC or an error code
236
249
  */
237
250
  GIT_EXTERN(int) git_tag_delete(
238
- git_repository *repo,
239
- const char *tag_name);
251
+ git_repository *repo,
252
+ const char *tag_name);
240
253
 
241
254
  /**
242
255
  * Fill a list with all the tags in the Repository
@@ -252,8 +265,8 @@ GIT_EXTERN(int) git_tag_delete(
252
265
  * @return 0 or an error code
253
266
  */
254
267
  GIT_EXTERN(int) git_tag_list(
255
- git_strarray *tag_names,
256
- git_repository *repo);
268
+ git_strarray *tag_names,
269
+ git_repository *repo);
257
270
 
258
271
  /**
259
272
  * Fill a list with all the tags in the Repository
@@ -274,39 +287,39 @@ GIT_EXTERN(int) git_tag_list(
274
287
  * @return 0 or an error code
275
288
  */
276
289
  GIT_EXTERN(int) git_tag_list_match(
277
- git_strarray *tag_names,
278
- const char *pattern,
279
- git_repository *repo);
290
+ git_strarray *tag_names,
291
+ const char *pattern,
292
+ git_repository *repo);
293
+
280
294
 
295
+ typedef int (*git_tag_foreach_cb)(const char *name, git_oid *oid, void *payload);
281
296
 
282
- typedef int (*git_tag_foreach_cb)(const char *name, git_oid *oid, void *data);
283
297
  /**
284
298
  * Call callback `cb' for each tag in the repository
285
299
  *
286
300
  * @param repo Repository
287
- * @param cb Callback function
288
- * @param cb_data Pointer to callback data (optional)
301
+ * @param callback Callback function
302
+ * @param payload Pointer to callback data (optional)
289
303
  */
290
304
  GIT_EXTERN(int) git_tag_foreach(
291
- git_repository *repo,
292
- git_tag_foreach_cb cb,
293
- void *cb_data);
305
+ git_repository *repo,
306
+ git_tag_foreach_cb callback,
307
+ void *payload);
294
308
 
295
309
 
296
310
  /**
297
- * Recursively peel a tag until a non tag git_object
298
- * is met
311
+ * Recursively peel a tag until a non tag git_object is found
299
312
  *
300
313
  * The retrieved `tag_target` object is owned by the repository
301
314
  * and should be closed with the `git_object_free` method.
302
315
  *
303
- * @param tag_target Pointer to the peeled git_object
316
+ * @param tag_target_out Pointer to the peeled git_object
304
317
  * @param tag The tag to be processed
305
318
  * @return 0 or an error code
306
319
  */
307
320
  GIT_EXTERN(int) git_tag_peel(
308
- git_object **tag_target,
309
- git_tag *tag);
321
+ git_object **tag_target_out,
322
+ const git_tag *tag);
310
323
 
311
324
  /** @} */
312
325
  GIT_END_DECL