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,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.
@@ -15,32 +15,66 @@
15
15
  */
16
16
  GIT_BEGIN_DECL
17
17
 
18
+ /**
19
+ * Kinds of reset operation
20
+ */
21
+ typedef enum {
22
+ GIT_RESET_SOFT = 1, /** Move the head to the given commit */
23
+ GIT_RESET_MIXED = 2, /** SOFT plus reset index to the commit */
24
+ GIT_RESET_HARD = 3, /** MIXED plus changes in working tree discarded */
25
+ } git_reset_t;
26
+
18
27
  /**
19
28
  * Sets the current head to the specified commit oid and optionally
20
29
  * resets the index and working tree to match.
21
30
  *
22
- * When specifying a Soft kind of reset, the head will be moved to the commit.
31
+ * SOFT reset means the Head will be moved to the commit.
23
32
  *
24
- * Specifying a Mixed kind of reset will trigger a Soft reset and the index will
25
- * be replaced with the content of the commit tree.
33
+ * MIXED reset will trigger a SOFT reset, plus the index will be replaced
34
+ * with the content of the commit tree.
26
35
  *
27
- * Specifying a Hard kind of reset will trigger a Mixed reset and the working
28
- * directory will be replaced with the content of the index.
36
+ * HARD reset will trigger a MIXED reset and the working directory will be
37
+ * replaced with the content of the index. (Untracked and ignored files
38
+ * will be left alone, however.)
29
39
  *
30
40
  * TODO: Implement remaining kinds of resets.
31
41
  *
32
42
  * @param repo Repository where to perform the reset operation.
33
43
  *
34
- * @param target Object to which the Head should be moved to. This object
44
+ * @param target Committish to which the Head should be moved to. This object
35
45
  * must belong to the given `repo` and can either be a git_commit or a
36
46
  * git_tag. When a git_tag is being passed, it should be dereferencable
37
47
  * to a git_commit which oid will be used as the target of the branch.
38
48
  *
39
49
  * @param reset_type Kind of reset operation to perform.
40
50
  *
41
- * @return GIT_SUCCESS or an error code
51
+ * @return 0 on success or an error code
52
+ */
53
+ GIT_EXTERN(int) git_reset(
54
+ git_repository *repo, git_object *target, git_reset_t reset_type);
55
+
56
+ /**
57
+ * Updates some entries in the index from the target commit tree.
58
+ *
59
+ * The scope of the updated entries is determined by the paths
60
+ * being passed in the `pathspec` parameters.
61
+ *
62
+ * Passing a NULL `target` will result in removing
63
+ * entries in the index matching the provided pathspecs.
64
+ *
65
+ * @param repo Repository where to perform the reset operation.
66
+ *
67
+ * @param target The committish which content will be used to reset the content
68
+ * of the index.
69
+ *
70
+ * @param pathspecs List of pathspecs to operate on.
71
+ *
72
+ * @return 0 on success or an error code < 0
42
73
  */
43
- GIT_EXTERN(int) git_reset(git_repository *repo, git_object *target, git_reset_type reset_type);
74
+ GIT_EXTERN(int) git_reset_default(
75
+ git_repository *repo,
76
+ git_object *target,
77
+ git_strarray* pathspecs);
44
78
 
45
79
  /** @} */
46
80
  GIT_END_DECL
@@ -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.
@@ -21,16 +21,60 @@
21
21
  GIT_BEGIN_DECL
22
22
 
23
23
  /**
24
- * Find an object, as specified by a revision string. See `man gitrevisions`, or the documentation
25
- * for `git rev-parse` for information on the syntax accepted.
24
+ * Find a single object, as specified by a revision string. See `man gitrevisions`,
25
+ * or http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for
26
+ * information on the syntax accepted.
26
27
  *
27
28
  * @param out pointer to output object
28
29
  * @param repo the repository to search in
29
30
  * @param spec the textual specification for an object
30
- * @return on success, GIT_ERROR otherwise (use git_error_last for information about the error)
31
+ * @return 0 on success, GIT_ENOTFOUND, GIT_EAMBIGUOUS, GIT_EINVALIDSPEC or an error code
31
32
  */
32
33
  GIT_EXTERN(int) git_revparse_single(git_object **out, git_repository *repo, const char *spec);
33
34
 
35
+
36
+ /**
37
+ * Revparse flags. These indicate the intended behavior of the spec passed to
38
+ * git_revparse.
39
+ */
40
+ typedef enum {
41
+ /** The spec targeted a single object. */
42
+ GIT_REVPARSE_SINGLE = 1 << 0,
43
+ /** The spec targeted a range of commits. */
44
+ GIT_REVPARSE_RANGE = 1 << 1,
45
+ /** The spec used the '...' operator, which invokes special semantics. */
46
+ GIT_REVPARSE_MERGE_BASE = 1 << 2,
47
+ } git_revparse_mode_t;
48
+
49
+ /**
50
+ * Git Revision Spec: output of a `git_revparse` operation
51
+ */
52
+ typedef struct {
53
+ /** The left element of the revspec; must be freed by the user */
54
+ git_object *from;
55
+ /** The right element of the revspec; must be freed by the user */
56
+ git_object *to;
57
+ /** The intent of the revspec */
58
+ unsigned int flags;
59
+ } git_revspec;
60
+
61
+ /**
62
+ * Parse a revision string for `from`, `to`, and intent. See `man gitrevisions` or
63
+ * http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for information
64
+ * on the syntax accepted.
65
+ *
66
+ * @param revspec Pointer to an user-allocated git_revspec struct where the result
67
+ * of the rev-parse will be stored
68
+ * @param repo the repository to search in
69
+ * @param spec the rev-parse spec to parse
70
+ * @return 0 on success, GIT_INVALIDSPEC, GIT_ENOTFOUND, GIT_EAMBIGUOUS or an error code
71
+ */
72
+ GIT_EXTERN(int) git_revparse(
73
+ git_revspec *revspec,
74
+ git_repository *repo,
75
+ const char *spec);
76
+
77
+
34
78
  /** @} */
35
79
  GIT_END_DECL
36
80
  #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.
@@ -63,11 +63,11 @@ GIT_BEGIN_DECL
63
63
  * it is possible to have several revision walkers in
64
64
  * several different threads walking the same repository.
65
65
  *
66
- * @param walker pointer to the new revision walker
66
+ * @param out pointer to the new revision walker
67
67
  * @param repo the repo to walk through
68
68
  * @return 0 or an error code
69
69
  */
70
- GIT_EXTERN(int) git_revwalk_new(git_revwalk **walker, git_repository *repo);
70
+ GIT_EXTERN(int) git_revwalk_new(git_revwalk **out, git_repository *repo);
71
71
 
72
72
  /**
73
73
  * Reset the revision walker for reuse.
@@ -92,14 +92,14 @@ GIT_EXTERN(void) git_revwalk_reset(git_revwalk *walker);
92
92
  *
93
93
  * The given commit will be used as one of the roots
94
94
  * when starting the revision walk. At least one commit
95
- * must be pushed the repository before a walk can
95
+ * must be pushed onto the walker before a walk can
96
96
  * be started.
97
97
  *
98
98
  * @param walk the walker being used for the traversal.
99
- * @param oid the oid of the commit to start from.
99
+ * @param id the oid of the commit to start from.
100
100
  * @return 0 or an error code
101
101
  */
102
- GIT_EXTERN(int) git_revwalk_push(git_revwalk *walk, const git_oid *oid);
102
+ GIT_EXTERN(int) git_revwalk_push(git_revwalk *walk, const git_oid *id);
103
103
 
104
104
  /**
105
105
  * Push matching references
@@ -134,10 +134,10 @@ GIT_EXTERN(int) git_revwalk_push_head(git_revwalk *walk);
134
134
  * output on the revision walk.
135
135
  *
136
136
  * @param walk the walker being used for the traversal.
137
- * @param oid the oid of commit that will be ignored during the traversal
137
+ * @param commit_id the oid of commit that will be ignored during the traversal
138
138
  * @return 0 or an error code
139
139
  */
140
- GIT_EXTERN(int) git_revwalk_hide(git_revwalk *walk, const git_oid *oid);
140
+ GIT_EXTERN(int) git_revwalk_hide(git_revwalk *walk, const git_oid *commit_id);
141
141
 
142
142
  /**
143
143
  * Hide matching references.
@@ -198,12 +198,12 @@ GIT_EXTERN(int) git_revwalk_hide_ref(git_revwalk *walk, const char *refname);
198
198
  *
199
199
  * The revision walker is reset when the walk is over.
200
200
  *
201
- * @param oid Pointer where to store the oid of the next commit
201
+ * @param out Pointer where to store the oid of the next commit
202
202
  * @param walk the walker to pop the commit from.
203
203
  * @return 0 if the next commit was found;
204
204
  * GIT_ITEROVER if there are no commits left to iterate
205
205
  */
206
- GIT_EXTERN(int) git_revwalk_next(git_oid *oid, git_revwalk *walk);
206
+ GIT_EXTERN(int) git_revwalk_next(git_oid *out, git_revwalk *walk);
207
207
 
208
208
  /**
209
209
  * Change the sorting mode when iterating through the
@@ -216,6 +216,21 @@ GIT_EXTERN(int) git_revwalk_next(git_oid *oid, git_revwalk *walk);
216
216
  */
217
217
  GIT_EXTERN(void) git_revwalk_sorting(git_revwalk *walk, unsigned int sort_mode);
218
218
 
219
+ /**
220
+ * Push and hide the respective endpoints of the given range.
221
+ *
222
+ * The range should be of the form
223
+ * <commit>..<commit>
224
+ * where each <commit> is in the form accepted by 'git_revparse_single'.
225
+ * The left-hand commit will be hidden and the right-hand commit pushed.
226
+ *
227
+ * @param walk the walker being used for the traversal
228
+ * @param range the range
229
+ * @return 0 or an error code
230
+ *
231
+ */
232
+ GIT_EXTERN(int) git_revwalk_push_range(git_revwalk *walk, const char *range);
233
+
219
234
  /**
220
235
  * Free a revision walker previously allocated.
221
236
  *
@@ -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.
@@ -20,44 +20,52 @@
20
20
  GIT_BEGIN_DECL
21
21
 
22
22
  /**
23
- * Create a new action signature. The signature must be freed
24
- * manually or using git_signature_free
23
+ * Create a new action signature.
24
+ *
25
+ * Call `git_signature_free()` to free the data.
25
26
  *
26
27
  * Note: angle brackets ('<' and '>') characters are not allowed
27
28
  * to be used in either the `name` or the `email` parameter.
28
29
  *
29
- * @param sig_out new signature, in case of error NULL
30
+ * @param out new signature, in case of error NULL
30
31
  * @param name name of the person
31
32
  * @param email email of the person
32
33
  * @param time time when the action happened
33
34
  * @param offset timezone offset in minutes for the time
34
35
  * @return 0 or an error code
35
36
  */
36
- GIT_EXTERN(int) git_signature_new(git_signature **sig_out, const char *name, const char *email, git_time_t time, int offset);
37
+ GIT_EXTERN(int) git_signature_new(git_signature **out, const char *name, const char *email, git_time_t time, int offset);
37
38
 
38
39
  /**
39
- * Create a new action signature with a timestamp of 'now'. The
40
- * signature must be freed manually or using git_signature_free
40
+ * Create a new action signature with a timestamp of 'now'.
41
+ *
42
+ * Call `git_signature_free()` to free the data.
41
43
  *
42
- * @param sig_out new signature, in case of error NULL
44
+ * @param out new signature, in case of error NULL
43
45
  * @param name name of the person
44
46
  * @param email email of the person
45
47
  * @return 0 or an error code
46
48
  */
47
- GIT_EXTERN(int) git_signature_now(git_signature **sig_out, const char *name, const char *email);
49
+ GIT_EXTERN(int) git_signature_now(git_signature **out, const char *name, const char *email);
48
50
 
49
51
 
50
52
  /**
51
- * Create a copy of an existing signature.
53
+ * Create a copy of an existing signature. All internal strings are also
54
+ * duplicated.
55
+ *
56
+ * Call `git_signature_free()` to free the data.
52
57
  *
53
- * All internal strings are also duplicated.
54
58
  * @param sig signature to duplicated
55
59
  * @return a copy of sig, NULL on out of memory
56
60
  */
57
61
  GIT_EXTERN(git_signature *) git_signature_dup(const git_signature *sig);
58
62
 
59
63
  /**
60
- * Free an existing signature
64
+ * Free an existing signature.
65
+ *
66
+ * Because the signature is not an opaque structure, it is legal to free it
67
+ * manually, but be sure to free the "name" and "email" strings in addition
68
+ * to the structure itself.
61
69
  *
62
70
  * @param sig signature to free
63
71
  */
@@ -0,0 +1,121 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+ #ifndef INCLUDE_git_stash_h__
8
+ #define INCLUDE_git_stash_h__
9
+
10
+ #include "common.h"
11
+ #include "types.h"
12
+
13
+ /**
14
+ * @file git2/stash.h
15
+ * @brief Git stash management routines
16
+ * @ingroup Git
17
+ * @{
18
+ */
19
+ GIT_BEGIN_DECL
20
+
21
+ typedef enum {
22
+ GIT_STASH_DEFAULT = 0,
23
+
24
+ /* All changes already added to the index
25
+ * are left intact in the working directory
26
+ */
27
+ GIT_STASH_KEEP_INDEX = (1 << 0),
28
+
29
+ /* All untracked files are also stashed and then
30
+ * cleaned up from the working directory
31
+ */
32
+ GIT_STASH_INCLUDE_UNTRACKED = (1 << 1),
33
+
34
+ /* All ignored files are also stashed and then
35
+ * cleaned up from the working directory
36
+ */
37
+ GIT_STASH_INCLUDE_IGNORED = (1 << 2),
38
+ } git_stash_flags;
39
+
40
+ /**
41
+ * Save the local modifications to a new stash.
42
+ *
43
+ * @param out Object id of the commit containing the stashed state.
44
+ * This commit is also the target of the direct reference refs/stash.
45
+ *
46
+ * @param repo The owning repository.
47
+ *
48
+ * @param stasher The identity of the person performing the stashing.
49
+ *
50
+ * @param message Optional description along with the stashed state.
51
+ *
52
+ * @param flags Flags to control the stashing process. (see GIT_STASH_* above)
53
+ *
54
+ * @return 0 on success, GIT_ENOTFOUND where there's nothing to stash,
55
+ * or error code.
56
+ */
57
+ GIT_EXTERN(int) git_stash_save(
58
+ git_oid *out,
59
+ git_repository *repo,
60
+ git_signature *stasher,
61
+ const char *message,
62
+ unsigned int flags);
63
+
64
+ /**
65
+ * When iterating over all the stashed states, callback that will be
66
+ * issued per entry.
67
+ *
68
+ * @param index The position within the stash list. 0 points to the
69
+ * most recent stashed state.
70
+ *
71
+ * @param message The stash message.
72
+ *
73
+ * @param stash_id The commit oid of the stashed state.
74
+ *
75
+ * @param payload Extra parameter to callback function.
76
+ *
77
+ * @return 0 on success, GIT_EUSER on non-zero callback, or error code
78
+ */
79
+ typedef int (*git_stash_cb)(
80
+ size_t index,
81
+ const char* message,
82
+ const git_oid *stash_id,
83
+ void *payload);
84
+
85
+ /**
86
+ * Loop over all the stashed states and issue a callback for each one.
87
+ *
88
+ * If the callback returns a non-zero value, this will stop looping.
89
+ *
90
+ * @param repo Repository where to find the stash.
91
+ *
92
+ * @param callabck Callback to invoke per found stashed state. The most recent
93
+ * stash state will be enumerated first.
94
+ *
95
+ * @param payload Extra parameter to callback function.
96
+ *
97
+ * @return 0 on success, GIT_EUSER on non-zero callback, or error code
98
+ */
99
+ GIT_EXTERN(int) git_stash_foreach(
100
+ git_repository *repo,
101
+ git_stash_cb callback,
102
+ void *payload);
103
+
104
+ /**
105
+ * Remove a single stashed state from the stash list.
106
+ *
107
+ * @param repo The owning repository.
108
+ *
109
+ * @param index The position within the stash list. 0 points to the
110
+ * most recent stashed state.
111
+ *
112
+ * @return 0 on success, or error code
113
+ */
114
+
115
+ GIT_EXTERN(int) git_stash_drop(
116
+ git_repository *repo,
117
+ size_t index);
118
+
119
+ /** @} */
120
+ GIT_END_DECL
121
+ #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.
@@ -19,6 +19,16 @@
19
19
  */
20
20
  GIT_BEGIN_DECL
21
21
 
22
+ /**
23
+ * Status flags for a single file.
24
+ *
25
+ * A combination of these values will be returned to indicate the status of
26
+ * a file. Status compares the working directory, the index, and the
27
+ * current HEAD of the repository. The `GIT_STATUS_INDEX` set of flags
28
+ * represents the status of file in the index relative to the HEAD, and the
29
+ * `GIT_STATUS_WT` set of flags represent the status of the file in the
30
+ * working directory relative to the index.
31
+ */
22
32
  typedef enum {
23
33
  GIT_STATUS_CURRENT = 0,
24
34
 
@@ -36,24 +46,40 @@ typedef enum {
36
46
  GIT_STATUS_IGNORED = (1u << 14),
37
47
  } git_status_t;
38
48
 
49
+ /**
50
+ * Function pointer to receive status on individual files
51
+ *
52
+ * `path` is the relative path to the file from the root of the repository.
53
+ *
54
+ * `status_flags` is a combination of `git_status_t` values that apply.
55
+ *
56
+ * `payload` is the value you passed to the foreach function as payload.
57
+ */
58
+ typedef int (*git_status_cb)(
59
+ const char *path, unsigned int status_flags, void *payload);
60
+
39
61
  /**
40
62
  * Gather file statuses and run a callback for each one.
41
63
  *
42
- * The callback is passed the path of the file, the status and the data
43
- * pointer passed to this function. If the callback returns something other
44
- * than 0, this function will stop looping and return GIT_EUSER.
64
+ * The callback is passed the path of the file, the status (a combination of
65
+ * the `git_status_t` values above) and the `payload` data pointer passed
66
+ * into this function.
45
67
  *
46
- * @param repo a repository object
47
- * @param callback the function to call on each file
68
+ * If the callback returns a non-zero value, this function will stop looping
69
+ * and return GIT_EUSER.
70
+ *
71
+ * @param repo A repository object
72
+ * @param callback The function to call on each file
73
+ * @param payload Pointer to pass through to callback function
48
74
  * @return 0 on success, GIT_EUSER on non-zero callback, or error code
49
75
  */
50
76
  GIT_EXTERN(int) git_status_foreach(
51
77
  git_repository *repo,
52
- int (*callback)(const char *, unsigned int, void *),
78
+ git_status_cb callback,
53
79
  void *payload);
54
80
 
55
81
  /**
56
- * Select the files on which to report status.
82
+ * For extended status, select the files on which to report status.
57
83
  *
58
84
  * - GIT_STATUS_SHOW_INDEX_AND_WORKDIR is the default. This is the
59
85
  * rough equivalent of `git status --porcelain` where each file
@@ -81,65 +107,108 @@ typedef enum {
81
107
  /**
82
108
  * Flags to control status callbacks
83
109
  *
84
- * - GIT_STATUS_OPT_INCLUDE_UNTRACKED says that callbacks should
85
- * be made on untracked files. These will only be made if the
86
- * workdir files are included in the status "show" option.
87
- * - GIT_STATUS_OPT_INCLUDE_IGNORED says that ignored files should
88
- * get callbacks. Again, these callbacks will only be made if
89
- * the workdir files are included in the status "show" option.
90
- * Right now, there is no option to include all files in
91
- * directories that are ignored completely.
92
- * - GIT_STATUS_OPT_INCLUDE_UNMODIFIED indicates that callback
93
- * should be made even on unmodified files.
94
- * - GIT_STATUS_OPT_EXCLUDE_SUBMODULES indicates that directories
95
- * which appear to be submodules should just be skipped over.
96
- * - GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS indicates that the
97
- * contents of untracked directories should be included in the
98
- * status. Normally if an entire directory is new, then just
99
- * the top-level directory will be included (with a trailing
100
- * slash on the entry name). Given this flag, the directory
101
- * itself will not be included, but all the files in it will.
102
- * - GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH indicates that the given
103
- * path will be treated as a literal path, and not as a pathspec.
110
+ * - GIT_STATUS_OPT_INCLUDE_UNTRACKED says that callbacks should be made
111
+ * on untracked files. These will only be made if the workdir files are
112
+ * included in the status "show" option.
113
+ * - GIT_STATUS_OPT_INCLUDE_IGNORED says that ignored files should get
114
+ * callbacks. Again, these callbacks will only be made if the workdir
115
+ * files are included in the status "show" option. Right now, there is
116
+ * no option to include all files in directories that are ignored
117
+ * completely.
118
+ * - GIT_STATUS_OPT_INCLUDE_UNMODIFIED indicates that callback should be
119
+ * made even on unmodified files.
120
+ * - GIT_STATUS_OPT_EXCLUDE_SUBMODULES indicates that directories which
121
+ * appear to be submodules should just be skipped over.
122
+ * - GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS indicates that the contents of
123
+ * untracked directories should be included in the status. Normally if
124
+ * an entire directory is new, then just the top-level directory will be
125
+ * included (with a trailing slash on the entry name). Given this flag,
126
+ * the directory itself will not be included, but all the files in it
127
+ * will.
128
+ * - GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH indicates that the given path
129
+ * will be treated as a literal path, and not as a pathspec.
130
+ * - GIT_STATUS_OPT_RECURSE_IGNORED_DIRS indicates that the contents of
131
+ * ignored directories should be included in the status. This is like
132
+ * doing `git ls-files -o -i --exclude-standard` with core git.
133
+ *
134
+ * Calling `git_status_foreach()` is like calling the extended version
135
+ * with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED,
136
+ * and GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS. Those options are bundled
137
+ * together as `GIT_STATUS_OPT_DEFAULTS` if you want them as a baseline.
104
138
  */
139
+ typedef enum {
140
+ GIT_STATUS_OPT_INCLUDE_UNTRACKED = (1u << 0),
141
+ GIT_STATUS_OPT_INCLUDE_IGNORED = (1u << 1),
142
+ GIT_STATUS_OPT_INCLUDE_UNMODIFIED = (1u << 2),
143
+ GIT_STATUS_OPT_EXCLUDE_SUBMODULES = (1u << 3),
144
+ GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS = (1u << 4),
145
+ GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH = (1u << 5),
146
+ GIT_STATUS_OPT_RECURSE_IGNORED_DIRS = (1u << 6),
147
+ } git_status_opt_t;
105
148
 
106
- enum {
107
- GIT_STATUS_OPT_INCLUDE_UNTRACKED = (1 << 0),
108
- GIT_STATUS_OPT_INCLUDE_IGNORED = (1 << 1),
109
- GIT_STATUS_OPT_INCLUDE_UNMODIFIED = (1 << 2),
110
- GIT_STATUS_OPT_EXCLUDE_SUBMODULES = (1 << 3),
111
- GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS = (1 << 4),
112
- GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH = (1 << 5),
113
- };
149
+ #define GIT_STATUS_OPT_DEFAULTS \
150
+ (GIT_STATUS_OPT_INCLUDE_IGNORED | \
151
+ GIT_STATUS_OPT_INCLUDE_UNTRACKED | \
152
+ GIT_STATUS_OPT_RECURSE_UNTRACKED_DIRS)
114
153
 
115
154
  /**
116
- * Options to control how callbacks will be made by
117
- * `git_status_foreach_ext()`.
155
+ * Options to control how `git_status_foreach_ext()` will issue callbacks.
156
+ *
157
+ * This structure is set so that zeroing it out will give you relatively
158
+ * sane defaults.
159
+ *
160
+ * The `show` value is one of the `git_status_show_t` constants that
161
+ * control which files to scan and in what order.
162
+ *
163
+ * The `flags` value is an OR'ed combination of the `git_status_opt_t`
164
+ * values above.
165
+ *
166
+ * The `pathspec` is an array of path patterns to match (using
167
+ * fnmatch-style matching), or just an array of paths to match exactly if
168
+ * `GIT_STATUS_OPT_DISABLE_PATHSPEC_MATCH` is specified in the flags.
118
169
  */
119
170
  typedef struct {
171
+ unsigned int version;
120
172
  git_status_show_t show;
121
- unsigned int flags;
122
- git_strarray pathspec;
173
+ unsigned int flags;
174
+ git_strarray pathspec;
123
175
  } git_status_options;
124
176
 
177
+ #define GIT_STATUS_OPTIONS_VERSION 1
178
+ #define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION}
179
+
125
180
  /**
126
181
  * Gather file status information and run callbacks as requested.
182
+ *
183
+ * This is an extended version of the `git_status_foreach()` API that
184
+ * allows for more granular control over which paths will be processed and
185
+ * in what order. See the `git_status_options` structure for details
186
+ * about the additional controls that this makes available.
187
+ *
188
+ * @param repo Repository object
189
+ * @param opts Status options structure
190
+ * @param callback The function to call on each file
191
+ * @param payload Pointer to pass through to callback function
192
+ * @return 0 on success, GIT_EUSER on non-zero callback, or error code
127
193
  */
128
194
  GIT_EXTERN(int) git_status_foreach_ext(
129
195
  git_repository *repo,
130
196
  const git_status_options *opts,
131
- int (*callback)(const char *, unsigned int, void *),
197
+ git_status_cb callback,
132
198
  void *payload);
133
199
 
134
200
  /**
135
- * Get file status for a single file
136
- *
137
- * @param status_flags the status value
138
- * @param repo a repository object
139
- * @param path the file to retrieve status for, rooted at the repo's workdir
140
- * @return GIT_EINVALIDPATH when `path` points at a folder, GIT_ENOTFOUND when
141
- * the file doesn't exist in any of HEAD, the index or the worktree,
142
- * 0 otherwise
201
+ * Get file status for a single file.
202
+ *
203
+ * This is not quite the same as calling `git_status_foreach_ext()` with
204
+ * the pathspec set to the specified path.
205
+ *
206
+ * @param status_flags The status value for the file
207
+ * @param repo A repository object
208
+ * @param path The file to retrieve status for, rooted at the repo's workdir
209
+ * @return 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD,
210
+ * index, and work tree, GIT_EINVALIDPATH if `path` points at a folder,
211
+ * GIT_EAMBIGUOUS if "path" matches multiple files, -1 on other error.
143
212
  */
144
213
  GIT_EXTERN(int) git_status_file(
145
214
  unsigned int *status_flags,
@@ -151,14 +220,14 @@ GIT_EXTERN(int) git_status_file(
151
220
  *
152
221
  * This function checks the ignore rules to see if they would apply to the
153
222
  * given file. This indicates if the file would be ignored regardless of
154
- * whether the file is already in the index or commited to the repository.
223
+ * whether the file is already in the index or committed to the repository.
155
224
  *
156
225
  * One way to think of this is if you were to do "git add ." on the
157
226
  * directory containing the file, would it be added or not?
158
227
  *
159
- * @param ignored boolean returning 0 if the file is not ignored, 1 if it is
160
- * @param repo a repository object
161
- * @param path the file to check ignores for, rooted at the repo's workdir.
228
+ * @param ignored Boolean returning 0 if the file is not ignored, 1 if it is
229
+ * @param repo A repository object
230
+ * @param path The file to check ignores for, rooted at the repo's workdir.
162
231
  * @return 0 if ignore rules could be processed for the file (regardless
163
232
  * of whether it exists or not), or an error < 0 if they could not.
164
233
  */