rugged 0.19.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (453) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -1
  3. data/README.md +151 -25
  4. data/ext/rugged/extconf.rb +48 -27
  5. data/ext/rugged/rugged.c +107 -35
  6. data/ext/rugged/rugged.h +44 -8
  7. data/ext/rugged/rugged_blame.c +292 -0
  8. data/ext/rugged/rugged_blob.c +84 -31
  9. data/ext/rugged/rugged_branch.c +90 -223
  10. data/ext/rugged/rugged_branch_collection.c +445 -0
  11. data/ext/rugged/rugged_commit.c +190 -9
  12. data/ext/rugged/rugged_config.c +1 -1
  13. data/ext/rugged/rugged_cred.c +125 -0
  14. data/ext/rugged/rugged_diff.c +267 -94
  15. data/ext/rugged/rugged_diff_delta.c +14 -3
  16. data/ext/rugged/rugged_diff_hunk.c +31 -28
  17. data/ext/rugged/rugged_diff_line.c +21 -17
  18. data/ext/rugged/rugged_index.c +326 -6
  19. data/ext/rugged/rugged_note.c +39 -34
  20. data/ext/rugged/rugged_object.c +9 -9
  21. data/ext/rugged/rugged_patch.c +245 -0
  22. data/ext/rugged/rugged_reference.c +67 -332
  23. data/ext/rugged/rugged_reference_collection.c +490 -0
  24. data/ext/rugged/rugged_remote.c +447 -351
  25. data/ext/rugged/rugged_remote_collection.c +285 -0
  26. data/ext/rugged/rugged_repo.c +752 -203
  27. data/ext/rugged/rugged_revwalk.c +119 -27
  28. data/ext/rugged/rugged_settings.c +48 -1
  29. data/ext/rugged/rugged_signature.c +30 -16
  30. data/ext/rugged/rugged_tag.c +86 -191
  31. data/ext/rugged/rugged_tag_collection.c +279 -0
  32. data/ext/rugged/rugged_tree.c +159 -22
  33. data/lib/rugged/branch.rb +8 -17
  34. data/lib/rugged/credentials.rb +43 -0
  35. data/lib/rugged/diff/delta.rb +1 -2
  36. data/lib/rugged/diff/hunk.rb +4 -9
  37. data/lib/rugged/diff/line.rb +23 -3
  38. data/lib/rugged/diff.rb +3 -1
  39. data/lib/rugged/patch.rb +26 -0
  40. data/lib/rugged/reference.rb +1 -3
  41. data/lib/rugged/remote.rb +0 -9
  42. data/lib/rugged/repository.rb +70 -13
  43. data/lib/rugged/tag.rb +23 -18
  44. data/lib/rugged/tree.rb +7 -0
  45. data/lib/rugged/version.rb +1 -1
  46. data/lib/rugged.rb +8 -1
  47. data/vendor/libgit2/AUTHORS +75 -0
  48. data/vendor/libgit2/CMakeLists.txt +490 -0
  49. data/vendor/libgit2/COPYING +920 -0
  50. data/vendor/libgit2/Makefile.embed +25 -7
  51. data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +16 -0
  52. data/vendor/libgit2/cmake/Modules/FindHTTP_Parser.cmake +39 -0
  53. data/vendor/libgit2/cmake/Modules/FindIconv.cmake +43 -0
  54. data/vendor/libgit2/cmake/Modules/FindLIBSSH2.cmake +44 -0
  55. data/vendor/libgit2/deps/http-parser/LICENSE-MIT +23 -0
  56. data/vendor/libgit2/deps/regex/regex.c +10 -3
  57. data/vendor/libgit2/include/git2/attr.h +2 -1
  58. data/vendor/libgit2/include/git2/blame.h +213 -0
  59. data/vendor/libgit2/include/git2/blob.h +57 -29
  60. data/vendor/libgit2/include/git2/branch.h +56 -44
  61. data/vendor/libgit2/include/git2/buffer.h +112 -0
  62. data/vendor/libgit2/include/git2/checkout.h +72 -37
  63. data/vendor/libgit2/include/git2/cherrypick.h +87 -0
  64. data/vendor/libgit2/include/git2/clone.h +153 -56
  65. data/vendor/libgit2/include/git2/commit.h +82 -12
  66. data/vendor/libgit2/include/git2/common.h +31 -19
  67. data/vendor/libgit2/include/git2/config.h +124 -19
  68. data/vendor/libgit2/include/git2/cred_helpers.h +1 -1
  69. data/vendor/libgit2/include/git2/diff.h +636 -494
  70. data/vendor/libgit2/include/git2/errors.h +48 -15
  71. data/vendor/libgit2/include/git2/filter.h +149 -0
  72. data/vendor/libgit2/include/git2/graph.h +14 -0
  73. data/vendor/libgit2/include/git2/index.h +95 -54
  74. data/vendor/libgit2/include/git2/indexer.h +15 -9
  75. data/vendor/libgit2/include/git2/merge.h +402 -39
  76. data/vendor/libgit2/include/git2/message.h +9 -14
  77. data/vendor/libgit2/include/git2/net.h +5 -0
  78. data/vendor/libgit2/include/git2/notes.h +6 -6
  79. data/vendor/libgit2/include/git2/object.h +34 -2
  80. data/vendor/libgit2/include/git2/odb.h +77 -14
  81. data/vendor/libgit2/include/git2/odb_backend.h +50 -6
  82. data/vendor/libgit2/include/git2/oid.h +4 -8
  83. data/vendor/libgit2/include/git2/pack.h +58 -4
  84. data/vendor/libgit2/include/git2/patch.h +277 -0
  85. data/vendor/libgit2/include/git2/pathspec.h +263 -0
  86. data/vendor/libgit2/include/git2/push.h +55 -5
  87. data/vendor/libgit2/include/git2/reflog.h +11 -8
  88. data/vendor/libgit2/include/git2/refs.h +219 -33
  89. data/vendor/libgit2/include/git2/refspec.h +3 -4
  90. data/vendor/libgit2/include/git2/remote.h +216 -76
  91. data/vendor/libgit2/include/git2/repository.h +85 -40
  92. data/vendor/libgit2/include/git2/reset.h +15 -4
  93. data/vendor/libgit2/include/git2/revert.h +86 -0
  94. data/vendor/libgit2/include/git2/revparse.h +27 -16
  95. data/vendor/libgit2/include/git2/revwalk.h +44 -6
  96. data/vendor/libgit2/include/git2/signature.h +17 -3
  97. data/vendor/libgit2/include/git2/stash.h +8 -12
  98. data/vendor/libgit2/include/git2/status.h +67 -18
  99. data/vendor/libgit2/include/git2/submodule.h +100 -85
  100. data/vendor/libgit2/include/git2/sys/commit.h +38 -4
  101. data/vendor/libgit2/include/git2/sys/config.h +44 -3
  102. data/vendor/libgit2/include/git2/sys/diff.h +91 -0
  103. data/vendor/libgit2/include/git2/sys/filter.h +301 -0
  104. data/vendor/libgit2/include/git2/sys/index.h +0 -2
  105. data/vendor/libgit2/include/git2/sys/mempack.h +85 -0
  106. data/vendor/libgit2/include/git2/sys/odb_backend.h +33 -11
  107. data/vendor/libgit2/include/git2/sys/refdb_backend.h +51 -5
  108. data/vendor/libgit2/include/git2/sys/reflog.h +21 -0
  109. data/vendor/libgit2/include/git2/sys/refs.h +2 -2
  110. data/vendor/libgit2/include/git2/sys/repository.h +19 -1
  111. data/vendor/libgit2/include/git2/transport.h +216 -75
  112. data/vendor/libgit2/include/git2/tree.h +32 -11
  113. data/vendor/libgit2/include/git2/types.h +124 -10
  114. data/vendor/libgit2/include/git2/version.h +4 -2
  115. data/vendor/libgit2/include/git2.h +41 -40
  116. data/vendor/libgit2/libgit2.pc.in +10 -0
  117. data/vendor/libgit2/src/array.h +16 -8
  118. data/vendor/libgit2/src/attr.c +140 -402
  119. data/vendor/libgit2/src/attr.h +1 -33
  120. data/vendor/libgit2/src/attr_file.c +298 -135
  121. data/vendor/libgit2/src/attr_file.h +61 -22
  122. data/vendor/libgit2/src/attrcache.c +449 -0
  123. data/vendor/libgit2/src/attrcache.h +38 -6
  124. data/vendor/libgit2/src/bitvec.h +75 -0
  125. data/vendor/libgit2/src/blame.c +488 -0
  126. data/vendor/libgit2/src/blame.h +93 -0
  127. data/vendor/libgit2/src/blame_git.c +624 -0
  128. data/vendor/libgit2/src/blame_git.h +20 -0
  129. data/vendor/libgit2/src/blob.c +137 -92
  130. data/vendor/libgit2/src/blob.h +9 -0
  131. data/vendor/libgit2/src/branch.c +175 -156
  132. data/vendor/libgit2/src/buf_text.c +29 -14
  133. data/vendor/libgit2/src/buf_text.h +5 -4
  134. data/vendor/libgit2/src/buffer.c +158 -15
  135. data/vendor/libgit2/src/buffer.h +33 -20
  136. data/vendor/libgit2/src/cc-compat.h +8 -2
  137. data/vendor/libgit2/src/checkout.c +1081 -287
  138. data/vendor/libgit2/src/checkout.h +1 -1
  139. data/vendor/libgit2/src/cherrypick.c +226 -0
  140. data/vendor/libgit2/src/clone.c +297 -245
  141. data/vendor/libgit2/src/{compress.h → clone.h} +4 -8
  142. data/vendor/libgit2/src/commit.c +313 -101
  143. data/vendor/libgit2/src/commit.h +6 -3
  144. data/vendor/libgit2/src/commit_list.c +3 -3
  145. data/vendor/libgit2/src/commit_list.h +1 -1
  146. data/vendor/libgit2/src/common.h +74 -1
  147. data/vendor/libgit2/src/config.c +570 -145
  148. data/vendor/libgit2/src/config.h +39 -6
  149. data/vendor/libgit2/src/config_cache.c +32 -18
  150. data/vendor/libgit2/src/config_file.c +711 -424
  151. data/vendor/libgit2/src/config_file.h +4 -3
  152. data/vendor/libgit2/src/crlf.c +149 -109
  153. data/vendor/libgit2/src/date.c +35 -7
  154. data/vendor/libgit2/src/delta.c +1 -1
  155. data/vendor/libgit2/src/diff.c +719 -414
  156. data/vendor/libgit2/src/diff.h +52 -7
  157. data/vendor/libgit2/src/diff_driver.c +183 -85
  158. data/vendor/libgit2/src/diff_driver.h +1 -1
  159. data/vendor/libgit2/src/diff_file.c +65 -84
  160. data/vendor/libgit2/src/diff_file.h +12 -10
  161. data/vendor/libgit2/src/diff_patch.c +274 -333
  162. data/vendor/libgit2/src/diff_patch.h +10 -9
  163. data/vendor/libgit2/src/diff_print.c +381 -179
  164. data/vendor/libgit2/src/diff_stats.c +336 -0
  165. data/vendor/libgit2/src/diff_tform.c +393 -215
  166. data/vendor/libgit2/src/diff_xdiff.c +117 -42
  167. data/vendor/libgit2/src/errors.c +59 -4
  168. data/vendor/libgit2/src/fetch.c +40 -34
  169. data/vendor/libgit2/src/fetch.h +2 -5
  170. data/vendor/libgit2/src/fetchhead.c +14 -7
  171. data/vendor/libgit2/src/filebuf.c +13 -24
  172. data/vendor/libgit2/src/filebuf.h +3 -3
  173. data/vendor/libgit2/src/fileops.c +104 -296
  174. data/vendor/libgit2/src/fileops.h +23 -94
  175. data/vendor/libgit2/src/filter.c +642 -43
  176. data/vendor/libgit2/src/filter.h +7 -66
  177. data/vendor/libgit2/src/fnmatch.c +46 -3
  178. data/vendor/libgit2/src/fnmatch.h +24 -3
  179. data/vendor/libgit2/src/global.c +158 -42
  180. data/vendor/libgit2/src/global.h +9 -0
  181. data/vendor/libgit2/src/graph.c +34 -20
  182. data/vendor/libgit2/src/hash/hash_generic.h +0 -1
  183. data/vendor/libgit2/src/hash/hash_openssl.h +0 -1
  184. data/vendor/libgit2/src/hash/hash_win32.c +14 -29
  185. data/vendor/libgit2/src/hash.h +0 -2
  186. data/vendor/libgit2/src/hashsig.c +97 -117
  187. data/vendor/libgit2/src/ident.c +125 -0
  188. data/vendor/libgit2/src/ignore.c +159 -110
  189. data/vendor/libgit2/src/ignore.h +13 -3
  190. data/vendor/libgit2/src/index.c +803 -445
  191. data/vendor/libgit2/src/index.h +43 -6
  192. data/vendor/libgit2/src/indexer.c +475 -157
  193. data/vendor/libgit2/src/iterator.c +198 -55
  194. data/vendor/libgit2/src/iterator.h +28 -4
  195. data/vendor/libgit2/src/map.h +1 -0
  196. data/vendor/libgit2/src/merge.c +849 -142
  197. data/vendor/libgit2/src/merge.h +11 -4
  198. data/vendor/libgit2/src/merge_file.c +183 -78
  199. data/vendor/libgit2/src/merge_file.h +0 -57
  200. data/vendor/libgit2/src/message.c +4 -28
  201. data/vendor/libgit2/src/mwindow.c +117 -8
  202. data/vendor/libgit2/src/mwindow.h +9 -1
  203. data/vendor/libgit2/src/netops.c +164 -59
  204. data/vendor/libgit2/src/netops.h +37 -1
  205. data/vendor/libgit2/src/notes.c +9 -18
  206. data/vendor/libgit2/src/notes.h +1 -1
  207. data/vendor/libgit2/src/object.c +78 -2
  208. data/vendor/libgit2/src/odb.c +191 -59
  209. data/vendor/libgit2/src/odb.h +2 -1
  210. data/vendor/libgit2/src/odb_loose.c +66 -51
  211. data/vendor/libgit2/src/odb_mempack.c +182 -0
  212. data/vendor/libgit2/src/odb_pack.c +151 -61
  213. data/vendor/libgit2/src/oid.c +30 -19
  214. data/vendor/libgit2/src/oid.h +13 -10
  215. data/vendor/libgit2/src/pack-objects.c +198 -147
  216. data/vendor/libgit2/src/pack-objects.h +7 -0
  217. data/vendor/libgit2/src/pack.c +272 -101
  218. data/vendor/libgit2/src/pack.h +15 -1
  219. data/vendor/libgit2/src/path.c +359 -117
  220. data/vendor/libgit2/src/path.h +110 -20
  221. data/vendor/libgit2/src/pathspec.c +583 -57
  222. data/vendor/libgit2/src/pathspec.h +36 -15
  223. data/vendor/libgit2/src/pool.c +4 -5
  224. data/vendor/libgit2/src/posix.c +45 -2
  225. data/vendor/libgit2/src/posix.h +13 -5
  226. data/vendor/libgit2/src/pqueue.c +73 -119
  227. data/vendor/libgit2/src/pqueue.h +35 -82
  228. data/vendor/libgit2/src/push.c +116 -48
  229. data/vendor/libgit2/src/push.h +5 -0
  230. data/vendor/libgit2/src/refdb.c +45 -6
  231. data/vendor/libgit2/src/refdb.h +13 -3
  232. data/vendor/libgit2/src/refdb_fs.c +1130 -551
  233. data/vendor/libgit2/src/reflog.c +36 -327
  234. data/vendor/libgit2/src/reflog.h +6 -1
  235. data/vendor/libgit2/src/refs.c +345 -142
  236. data/vendor/libgit2/src/refs.h +9 -2
  237. data/vendor/libgit2/src/refspec.c +90 -62
  238. data/vendor/libgit2/src/refspec.h +7 -24
  239. data/vendor/libgit2/src/remote.c +815 -415
  240. data/vendor/libgit2/src/remote.h +3 -4
  241. data/vendor/libgit2/src/repository.c +360 -207
  242. data/vendor/libgit2/src/repository.h +16 -10
  243. data/vendor/libgit2/src/reset.c +28 -13
  244. data/vendor/libgit2/src/revert.c +228 -0
  245. data/vendor/libgit2/src/revparse.c +29 -30
  246. data/vendor/libgit2/src/revwalk.c +141 -96
  247. data/vendor/libgit2/src/revwalk.h +6 -1
  248. data/vendor/libgit2/src/settings.c +140 -0
  249. data/vendor/libgit2/src/sha1_lookup.c +71 -0
  250. data/vendor/libgit2/src/sha1_lookup.h +5 -0
  251. data/vendor/libgit2/src/signature.c +38 -10
  252. data/vendor/libgit2/src/sortedcache.c +378 -0
  253. data/vendor/libgit2/src/sortedcache.h +178 -0
  254. data/vendor/libgit2/src/stash.c +98 -116
  255. data/vendor/libgit2/src/status.c +88 -60
  256. data/vendor/libgit2/src/status.h +2 -2
  257. data/vendor/libgit2/src/strmap.c +32 -0
  258. data/vendor/libgit2/src/strmap.h +14 -1
  259. data/vendor/libgit2/src/strnlen.h +23 -0
  260. data/vendor/libgit2/src/submodule.c +1073 -615
  261. data/vendor/libgit2/src/submodule.h +89 -21
  262. data/vendor/libgit2/src/sysdir.c +252 -0
  263. data/vendor/libgit2/src/sysdir.h +101 -0
  264. data/vendor/libgit2/src/tag.c +31 -20
  265. data/vendor/libgit2/src/thread-utils.h +98 -17
  266. data/vendor/libgit2/src/trace.h +0 -2
  267. data/vendor/libgit2/src/transport.c +76 -6
  268. data/vendor/libgit2/src/transports/cred.c +164 -61
  269. data/vendor/libgit2/src/transports/git.c +41 -48
  270. data/vendor/libgit2/src/transports/http.c +65 -109
  271. data/vendor/libgit2/src/transports/local.c +88 -65
  272. data/vendor/libgit2/src/transports/smart.c +91 -19
  273. data/vendor/libgit2/src/transports/smart.h +13 -5
  274. data/vendor/libgit2/src/transports/smart_pkt.c +24 -14
  275. data/vendor/libgit2/src/transports/smart_protocol.c +268 -113
  276. data/vendor/libgit2/src/transports/ssh.c +284 -186
  277. data/vendor/libgit2/src/transports/winhttp.c +279 -198
  278. data/vendor/libgit2/src/tree-cache.c +21 -23
  279. data/vendor/libgit2/src/tree-cache.h +1 -0
  280. data/vendor/libgit2/src/tree.c +109 -92
  281. data/vendor/libgit2/src/tree.h +2 -3
  282. data/vendor/libgit2/src/unix/map.c +7 -1
  283. data/vendor/libgit2/src/unix/posix.h +0 -1
  284. data/vendor/libgit2/src/userdiff.h +208 -0
  285. data/vendor/libgit2/src/util.c +16 -112
  286. data/vendor/libgit2/src/util.h +107 -3
  287. data/vendor/libgit2/src/vector.c +72 -17
  288. data/vendor/libgit2/src/vector.h +32 -5
  289. data/vendor/libgit2/src/win32/dir.c +15 -40
  290. data/vendor/libgit2/src/win32/dir.h +3 -2
  291. data/vendor/libgit2/src/win32/error.c +5 -31
  292. data/vendor/libgit2/src/win32/findfile.c +47 -66
  293. data/vendor/libgit2/src/win32/findfile.h +1 -12
  294. data/vendor/libgit2/src/win32/git2.rc +40 -0
  295. data/vendor/libgit2/src/win32/map.c +7 -1
  296. data/vendor/libgit2/src/win32/mingw-compat.h +3 -0
  297. data/vendor/libgit2/src/win32/posix.h +17 -11
  298. data/vendor/libgit2/src/win32/posix_w32.c +424 -292
  299. data/vendor/libgit2/src/win32/precompiled.h +6 -2
  300. data/vendor/libgit2/src/win32/pthread.c +141 -18
  301. data/vendor/libgit2/src/win32/pthread.h +50 -8
  302. data/vendor/libgit2/src/win32/reparse.h +57 -0
  303. data/vendor/libgit2/src/win32/utf-conv.c +117 -60
  304. data/vendor/libgit2/src/win32/utf-conv.h +81 -6
  305. data/vendor/libgit2/src/win32/version.h +21 -4
  306. data/vendor/libgit2/src/win32/w32_util.c +139 -0
  307. data/vendor/libgit2/src/win32/w32_util.h +54 -0
  308. data/vendor/libgit2/src/zstream.c +156 -0
  309. data/vendor/libgit2/src/zstream.h +39 -0
  310. metadata +84 -167
  311. data/Rakefile +0 -61
  312. data/ext/rugged/rugged_diff_patch.c +0 -169
  313. data/lib/rugged/diff/patch.rb +0 -28
  314. data/test/blob_test.rb +0 -341
  315. data/test/branch_test.rb +0 -199
  316. data/test/commit_test.rb +0 -104
  317. data/test/config_test.rb +0 -45
  318. data/test/coverage/cover.rb +0 -133
  319. data/test/diff_test.rb +0 -777
  320. data/test/errors_test.rb +0 -34
  321. data/test/fixtures/alternate/objects/14/6ae76773c91e3b1d00cf7a338ec55ae58297e2 +0 -0
  322. data/test/fixtures/alternate/objects/14/9c32d47e99d0a3572ff1e70a2e0051bbf347a9 +0 -0
  323. data/test/fixtures/alternate/objects/14/fb3108588f9421bf764041e5e3ac305eb6277f +0 -0
  324. data/test/fixtures/archive.tar.gz +0 -0
  325. data/test/fixtures/attr/attr0 +0 -1
  326. data/test/fixtures/attr/attr1 +0 -29
  327. data/test/fixtures/attr/attr2 +0 -21
  328. data/test/fixtures/attr/attr3 +0 -4
  329. data/test/fixtures/attr/binfile +0 -1
  330. data/test/fixtures/attr/dir/file +0 -0
  331. data/test/fixtures/attr/file +0 -1
  332. data/test/fixtures/attr/gitattributes +0 -29
  333. data/test/fixtures/attr/gitignore +0 -2
  334. data/test/fixtures/attr/ign +0 -1
  335. data/test/fixtures/attr/macro_bad +0 -1
  336. data/test/fixtures/attr/macro_test +0 -1
  337. data/test/fixtures/attr/root_test1 +0 -1
  338. data/test/fixtures/attr/root_test2 +0 -6
  339. data/test/fixtures/attr/root_test3 +0 -19
  340. data/test/fixtures/attr/root_test4.txt +0 -14
  341. data/test/fixtures/attr/sub/abc +0 -37
  342. data/test/fixtures/attr/sub/dir/file +0 -0
  343. data/test/fixtures/attr/sub/file +0 -1
  344. data/test/fixtures/attr/sub/ign/file +0 -1
  345. data/test/fixtures/attr/sub/ign/sub/file +0 -1
  346. data/test/fixtures/attr/sub/sub/dir +0 -0
  347. data/test/fixtures/attr/sub/sub/file +0 -1
  348. data/test/fixtures/attr/sub/sub/subsub.txt +0 -1
  349. data/test/fixtures/attr/sub/subdir_test1 +0 -2
  350. data/test/fixtures/attr/sub/subdir_test2.txt +0 -1
  351. data/test/fixtures/diff/another.txt +0 -38
  352. data/test/fixtures/diff/readme.txt +0 -36
  353. data/test/fixtures/mergedrepo/conflicts-one.txt +0 -5
  354. data/test/fixtures/mergedrepo/conflicts-two.txt +0 -5
  355. data/test/fixtures/mergedrepo/one.txt +0 -10
  356. data/test/fixtures/mergedrepo/two.txt +0 -12
  357. data/test/fixtures/status/current_file +0 -1
  358. data/test/fixtures/status/ignored_file +0 -1
  359. data/test/fixtures/status/modified_file +0 -2
  360. data/test/fixtures/status/new_file +0 -1
  361. data/test/fixtures/status/staged_changes +0 -2
  362. data/test/fixtures/status/staged_changes_modified_file +0 -3
  363. data/test/fixtures/status/staged_delete_modified_file +0 -1
  364. data/test/fixtures/status/staged_new_file +0 -1
  365. data/test/fixtures/status/staged_new_file_modified_file +0 -2
  366. data/test/fixtures/status/subdir/current_file +0 -1
  367. data/test/fixtures/status/subdir/modified_file +0 -2
  368. data/test/fixtures/status/subdir/new_file +0 -1
  369. data/test/fixtures/status/subdir.txt +0 -2
  370. data/test/fixtures/status//350/277/231 +0 -1
  371. data/test/fixtures/testrepo.git/HEAD +0 -1
  372. data/test/fixtures/testrepo.git/config +0 -13
  373. data/test/fixtures/testrepo.git/description +0 -1
  374. data/test/fixtures/testrepo.git/index +0 -0
  375. data/test/fixtures/testrepo.git/info/exclude +0 -6
  376. data/test/fixtures/testrepo.git/logs/HEAD +0 -3
  377. data/test/fixtures/testrepo.git/logs/refs/heads/master +0 -3
  378. data/test/fixtures/testrepo.git/logs/refs/notes/commits +0 -1
  379. data/test/fixtures/testrepo.git/objects/0c/37a5391bbff43c37f0d0371823a5509eed5b1d +0 -0
  380. data/test/fixtures/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +0 -0
  381. data/test/fixtures/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +0 -0
  382. data/test/fixtures/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd +0 -0
  383. data/test/fixtures/testrepo.git/objects/2d/2eff63372b08adf0a9eb84109ccf7d19e2f3a2 +0 -0
  384. data/test/fixtures/testrepo.git/objects/36/060c58702ed4c2a40832c51758d5344201d89a +0 -2
  385. data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +0 -1
  386. data/test/fixtures/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
  387. data/test/fixtures/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 +0 -2
  388. data/test/fixtures/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 +0 -2
  389. data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
  390. data/test/fixtures/testrepo.git/objects/61/9f9935957e010c419cb9d15621916ddfcc0b96 +0 -0
  391. data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +0 -1
  392. data/test/fixtures/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +0 -0
  393. data/test/fixtures/testrepo.git/objects/77/71329dfa3002caf8c61a0ceb62a31d09023f37 +0 -0
  394. data/test/fixtures/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +0 -0
  395. data/test/fixtures/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +0 -0
  396. data/test/fixtures/testrepo.git/objects/94/eca2de348d5f672faf56b0decafa5937e3235e +0 -0
  397. data/test/fixtures/testrepo.git/objects/9b/7384fe1676186192842f5d3e129457b62db9e3 +0 -0
  398. data/test/fixtures/testrepo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a +0 -3
  399. data/test/fixtures/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f +0 -2
  400. data/test/fixtures/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +0 -0
  401. data/test/fixtures/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +0 -0
  402. data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +0 -3
  403. data/test/fixtures/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 +0 -3
  404. data/test/fixtures/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd +0 -3
  405. data/test/fixtures/testrepo.git/objects/c4/dc1555e4d4fa0e0c9c3fc46734c7c35b3ce90b +0 -0
  406. data/test/fixtures/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  407. data/test/fixtures/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +0 -0
  408. data/test/fixtures/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +0 -0
  409. data/test/fixtures/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 +0 -0
  410. data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx +0 -0
  411. data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack +0 -0
  412. data/test/fixtures/testrepo.git/packed-refs +0 -2
  413. data/test/fixtures/testrepo.git/refs/heads/master +0 -1
  414. data/test/fixtures/testrepo.git/refs/notes/commits +0 -1
  415. data/test/fixtures/testrepo.git/refs/tags/v0.9 +0 -1
  416. data/test/fixtures/testrepo.git/refs/tags/v1.0 +0 -1
  417. data/test/fixtures/text_file.md +0 -464
  418. data/test/fixtures/unsymlinked.git/HEAD +0 -1
  419. data/test/fixtures/unsymlinked.git/config +0 -6
  420. data/test/fixtures/unsymlinked.git/description +0 -1
  421. data/test/fixtures/unsymlinked.git/info/exclude +0 -2
  422. data/test/fixtures/unsymlinked.git/objects/08/8b64704e0d6b8bd061dea879418cb5442a3fbf +0 -0
  423. data/test/fixtures/unsymlinked.git/objects/13/a5e939bca25940c069fd2169d993dba328e30b +0 -0
  424. data/test/fixtures/unsymlinked.git/objects/19/bf568e59e3a0b363cafb4106226e62d4a4c41c +0 -0
  425. data/test/fixtures/unsymlinked.git/objects/58/1fadd35b4cf320d102a152f918729011604773 +0 -0
  426. data/test/fixtures/unsymlinked.git/objects/5c/87b6791e8b13da658a14d1ef7e09b5dc3bac8c +0 -0
  427. data/test/fixtures/unsymlinked.git/objects/6f/e5f5398af85fb3de8a6aba0339b6d3bfa26a27 +0 -0
  428. data/test/fixtures/unsymlinked.git/objects/7f/ccd75616ec188b8f1b23d67506a334cc34a49d +0 -0
  429. data/test/fixtures/unsymlinked.git/objects/80/6999882bf91d24241e4077906b9017605eb1f3 +0 -0
  430. data/test/fixtures/unsymlinked.git/objects/83/7d176303c5005505ec1e4a30231c40930c0230 +0 -0
  431. data/test/fixtures/unsymlinked.git/objects/a8/595ccca04f40818ae0155c8f9c77a230e597b6 +0 -2
  432. data/test/fixtures/unsymlinked.git/objects/cf/8f1cf5cce859c438d6cc067284cb5e161206e7 +0 -0
  433. data/test/fixtures/unsymlinked.git/objects/d5/278d05c8607ec420bfee4cf219fbc0eeebfd6a +0 -0
  434. data/test/fixtures/unsymlinked.git/objects/f4/e16fb76536591a41454194058d048d8e4dd2e9 +0 -0
  435. data/test/fixtures/unsymlinked.git/objects/f9/e65619d93fdf2673882e0a261c5e93b1a84006 +0 -0
  436. data/test/fixtures/unsymlinked.git/refs/heads/exe-file +0 -1
  437. data/test/fixtures/unsymlinked.git/refs/heads/master +0 -1
  438. data/test/fixtures/unsymlinked.git/refs/heads/reg-file +0 -1
  439. data/test/index_test.rb +0 -333
  440. data/test/lib_test.rb +0 -127
  441. data/test/note_test.rb +0 -158
  442. data/test/object_test.rb +0 -43
  443. data/test/reference_test.rb +0 -207
  444. data/test/remote_test.rb +0 -324
  445. data/test/repo_pack_test.rb +0 -24
  446. data/test/repo_reset_test.rb +0 -82
  447. data/test/repo_test.rb +0 -402
  448. data/test/tag_test.rb +0 -68
  449. data/test/test_helper.rb +0 -92
  450. data/test/tree_test.rb +0 -91
  451. data/test/walker_test.rb +0 -88
  452. data/vendor/libgit2/src/amiga/map.c +0 -48
  453. data/vendor/libgit2/src/compress.c +0 -53
@@ -57,24 +57,20 @@ typedef enum {
57
57
  GIT_EXTERN(int) git_stash_save(
58
58
  git_oid *out,
59
59
  git_repository *repo,
60
- git_signature *stasher,
60
+ const git_signature *stasher,
61
61
  const char *message,
62
62
  unsigned int flags);
63
63
 
64
64
  /**
65
- * When iterating over all the stashed states, callback that will be
66
- * issued per entry.
65
+ * This is a callback function you can provide to iterate over all the
66
+ * stashed states that will be invoked per entry.
67
67
  *
68
68
  * @param index The position within the stash list. 0 points to the
69
- * most recent stashed state.
70
- *
69
+ * most recent stashed state.
71
70
  * @param message The stash message.
72
- *
73
71
  * @param stash_id The commit oid of the stashed state.
74
- *
75
72
  * @param payload Extra parameter to callback function.
76
- *
77
- * @return 0 on success, GIT_EUSER on non-zero callback, or error code
73
+ * @return 0 to continue iterating or non-zero to stop
78
74
  */
79
75
  typedef int (*git_stash_cb)(
80
76
  size_t index,
@@ -89,12 +85,12 @@ typedef int (*git_stash_cb)(
89
85
  *
90
86
  * @param repo Repository where to find the stash.
91
87
  *
92
- * @param callback Callback to invoke per found stashed state. The most recent
93
- * stash state will be enumerated first.
88
+ * @param callback Callback to invoke per found stashed state. The most
89
+ * recent stash state will be enumerated first.
94
90
  *
95
91
  * @param payload Extra parameter to callback function.
96
92
  *
97
- * @return 0 on success, GIT_EUSER on non-zero callback, or error code
93
+ * @return 0 on success, non-zero callback return value, or error code
98
94
  */
99
95
  GIT_EXTERN(int) git_stash_foreach(
100
96
  git_repository *repo,
@@ -60,25 +60,24 @@ typedef int (*git_status_cb)(
60
60
  const char *path, unsigned int status_flags, void *payload);
61
61
 
62
62
  /**
63
- * For extended status, select the files on which to report status.
63
+ * Select the files on which to report status.
64
+ *
65
+ * With `git_status_foreach_ext`, this will control which changes get
66
+ * callbacks. With `git_status_list_new`, these will control which
67
+ * changes are included in the list.
64
68
  *
65
69
  * - GIT_STATUS_SHOW_INDEX_AND_WORKDIR is the default. This roughly
66
- * matches `git status --porcelain` where each file gets a callback
67
- * indicating its status in the index and in the working directory.
70
+ * matches `git status --porcelain` regarding which files are
71
+ * included and in what order.
68
72
  * - GIT_STATUS_SHOW_INDEX_ONLY only gives status based on HEAD to index
69
73
  * comparison, not looking at working directory changes.
70
74
  * - GIT_STATUS_SHOW_WORKDIR_ONLY only gives status based on index to
71
75
  * working directory comparison, not comparing the index to the HEAD.
72
- * - GIT_STATUS_SHOW_INDEX_THEN_WORKDIR runs index-only then workdir-only,
73
- * issuing (up to) two callbacks per file (first index, then workdir).
74
- * This is slightly more efficient than separate calls and can make it
75
- * easier to emulate plain `git status` text output.
76
76
  */
77
77
  typedef enum {
78
78
  GIT_STATUS_SHOW_INDEX_AND_WORKDIR = 0,
79
79
  GIT_STATUS_SHOW_INDEX_ONLY = 1,
80
80
  GIT_STATUS_SHOW_WORKDIR_ONLY = 2,
81
- GIT_STATUS_SHOW_INDEX_THEN_WORKDIR = 3,
82
81
  } git_status_show_t;
83
82
 
84
83
  /**
@@ -108,7 +107,7 @@ typedef enum {
108
107
  * - GIT_STATUS_OPT_RENAMES_HEAD_TO_INDEX indicates that rename detection
109
108
  * should be processed between the head and the index and enables
110
109
  * the GIT_STATUS_INDEX_RENAMED as a possible status flag.
111
- * - GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR indicates tha rename
110
+ * - GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR indicates that rename
112
111
  * detection should be run between the index and the working directory
113
112
  * and enabled GIT_STATUS_WT_RENAMED as a possible status flag.
114
113
  * - GIT_STATUS_OPT_SORT_CASE_SENSITIVELY overrides the native case
@@ -117,6 +116,16 @@ typedef enum {
117
116
  * - GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY overrides the native case
118
117
  * sensitivity for the file system and forces the output to be in
119
118
  * case-insensitive order
119
+ * - GIT_STATUS_OPT_RENAMES_FROM_REWRITES indicates that rename detection
120
+ * should include rewritten files
121
+ * - GIT_STATUS_OPT_NO_REFRESH bypasses the default status behavior of
122
+ * doing a "soft" index reload (i.e. reloading the index data if the
123
+ * file on disk has been modified outside libgit2).
124
+ * - GIT_STATUS_OPT_UPDATE_INDEX tells libgit2 to refresh the stat cache
125
+ * in the index for files that are unchanged but have out of date stat
126
+ * information in the index. It will result in less work being done on
127
+ * subsequent calls to get status. This is mutually exclusive with the
128
+ * NO_REFRESH option.
120
129
  *
121
130
  * Calling `git_status_foreach()` is like calling the extended version
122
131
  * with: GIT_STATUS_OPT_INCLUDE_IGNORED, GIT_STATUS_OPT_INCLUDE_UNTRACKED,
@@ -135,6 +144,9 @@ typedef enum {
135
144
  GIT_STATUS_OPT_RENAMES_INDEX_TO_WORKDIR = (1u << 8),
136
145
  GIT_STATUS_OPT_SORT_CASE_SENSITIVELY = (1u << 9),
137
146
  GIT_STATUS_OPT_SORT_CASE_INSENSITIVELY = (1u << 10),
147
+ GIT_STATUS_OPT_RENAMES_FROM_REWRITES = (1u << 11),
148
+ GIT_STATUS_OPT_NO_REFRESH = (1u << 12),
149
+ GIT_STATUS_OPT_UPDATE_INDEX = (1u << 13),
138
150
  } git_status_opt_t;
139
151
 
140
152
  #define GIT_STATUS_OPT_DEFAULTS \
@@ -168,6 +180,18 @@ typedef struct {
168
180
  #define GIT_STATUS_OPTIONS_VERSION 1
169
181
  #define GIT_STATUS_OPTIONS_INIT {GIT_STATUS_OPTIONS_VERSION}
170
182
 
183
+ /**
184
+ * Initializes a `git_status_options` with default values. Equivalent to
185
+ * creating an instance with GIT_STATUS_OPTIONS_INIT.
186
+ *
187
+ * @param opts The `git_status_options` instance to initialize.
188
+ * @param version Version of struct; pass `GIT_STATUS_OPTIONS_VERSION`
189
+ * @return Zero on success; -1 on failure.
190
+ */
191
+ GIT_EXTERN(int) git_status_init_options(
192
+ git_status_options *opts,
193
+ unsigned int version);
194
+
171
195
  /**
172
196
  * A status entry, providing the differences between the file as it exists
173
197
  * in HEAD and the index, and providing the differences between the index
@@ -197,12 +221,12 @@ typedef struct {
197
221
  * into this function.
198
222
  *
199
223
  * If the callback returns a non-zero value, this function will stop looping
200
- * and return GIT_EUSER.
224
+ * and return that value to caller.
201
225
  *
202
226
  * @param repo A repository object
203
227
  * @param callback The function to call on each file
204
228
  * @param payload Pointer to pass through to callback function
205
- * @return 0 on success, GIT_EUSER on non-zero callback, or error code
229
+ * @return 0 on success, non-zero callback return value, or error code
206
230
  */
207
231
  GIT_EXTERN(int) git_status_foreach(
208
232
  git_repository *repo,
@@ -217,11 +241,16 @@ GIT_EXTERN(int) git_status_foreach(
217
241
  * in what order. See the `git_status_options` structure for details
218
242
  * about the additional controls that this makes available.
219
243
  *
244
+ * Note that if a `pathspec` is given in the `git_status_options` to filter
245
+ * the status, then the results from rename detection (if you enable it) may
246
+ * not be accurate. To do rename detection properly, this must be called
247
+ * with no `pathspec` so that all files can be considered.
248
+ *
220
249
  * @param repo Repository object
221
250
  * @param opts Status options structure
222
251
  * @param callback The function to call on each file
223
252
  * @param payload Pointer to pass through to callback function
224
- * @return 0 on success, GIT_EUSER on non-zero callback, or error code
253
+ * @return 0 on success, non-zero callback return value, or error code
225
254
  */
226
255
  GIT_EXTERN(int) git_status_foreach_ext(
227
256
  git_repository *repo,
@@ -232,15 +261,27 @@ GIT_EXTERN(int) git_status_foreach_ext(
232
261
  /**
233
262
  * Get file status for a single file.
234
263
  *
235
- * This is not quite the same as calling `git_status_foreach_ext()` with
236
- * the pathspec set to the specified path.
264
+ * This tries to get status for the filename that you give. If no files
265
+ * match that name (in either the HEAD, index, or working directory), this
266
+ * returns GIT_ENOTFOUND.
267
+ *
268
+ * If the name matches multiple files (for example, if the `path` names a
269
+ * directory or if running on a case- insensitive filesystem and yet the
270
+ * HEAD has two entries that both match the path), then this returns
271
+ * GIT_EAMBIGUOUS because it cannot give correct results.
272
+ *
273
+ * This does not do any sort of rename detection. Renames require a set of
274
+ * targets and because of the path filtering, there is not enough
275
+ * information to check renames correctly. To check file status with rename
276
+ * detection, there is no choice but to do a full `git_status_list_new` and
277
+ * scan through looking for the path that you are interested in.
237
278
  *
238
- * @param status_flags The status value for the file
279
+ * @param status_flags Output combination of git_status_t values for file
239
280
  * @param repo A repository object
240
- * @param path The file to retrieve status for, rooted at the repo's workdir
281
+ * @param path The file to retrieve status for relative to the repo workdir
241
282
  * @return 0 on success, GIT_ENOTFOUND if the file is not found in the HEAD,
242
- * index, and work tree, GIT_EINVALIDPATH if `path` points at a folder,
243
- * GIT_EAMBIGUOUS if "path" matches multiple files, -1 on other error.
283
+ * index, and work tree, GIT_EAMBIGUOUS if `path` matches multiple files
284
+ * or if it refers to a folder, and -1 on other errors.
244
285
  */
245
286
  GIT_EXTERN(int) git_status_file(
246
287
  unsigned int *status_flags,
@@ -250,6 +291,11 @@ GIT_EXTERN(int) git_status_file(
250
291
  /**
251
292
  * Gather file status information and populate the `git_status_list`.
252
293
  *
294
+ * Note that if a `pathspec` is given in the `git_status_options` to filter
295
+ * the status, then the results from rename detection (if you enable it) may
296
+ * not be accurate. To do rename detection properly, this must be called
297
+ * with no `pathspec` so that all files can be considered.
298
+ *
253
299
  * @param out Pointer to store the status results in
254
300
  * @param repo Repository object
255
301
  * @param opts Status options structure
@@ -263,6 +309,9 @@ GIT_EXTERN(int) git_status_list_new(
263
309
  /**
264
310
  * Gets the count of status entries in this list.
265
311
  *
312
+ * If there are no changes in status (at least according the options given
313
+ * when the status list was created), this can return 0.
314
+ *
266
315
  * @param statuslist Existing status list object
267
316
  * @return the number of status entries
268
317
  */
@@ -14,51 +14,18 @@
14
14
  /**
15
15
  * @file git2/submodule.h
16
16
  * @brief Git submodule management utilities
17
- * @defgroup git_submodule Git submodule management routines
18
- * @ingroup Git
19
- * @{
20
- */
21
- GIT_BEGIN_DECL
22
-
23
- /**
24
- * Opaque structure representing a submodule.
25
17
  *
26
18
  * Submodule support in libgit2 builds a list of known submodules and keeps
27
19
  * it in the repository. The list is built from the .gitmodules file, the
28
20
  * .git/config file, the index, and the HEAD tree. Items in the working
29
21
  * directory that look like submodules (i.e. a git repo) but are not
30
22
  * mentioned in those places won't be tracked.
31
- */
32
- typedef struct git_submodule git_submodule;
33
-
34
- /**
35
- * Values that could be specified for the update rule of a submodule.
36
- *
37
- * Use the DEFAULT value if you have altered the update value via
38
- * `git_submodule_set_update()` and wish to reset to the original default.
39
- */
40
- typedef enum {
41
- GIT_SUBMODULE_UPDATE_DEFAULT = -1,
42
- GIT_SUBMODULE_UPDATE_CHECKOUT = 0,
43
- GIT_SUBMODULE_UPDATE_REBASE = 1,
44
- GIT_SUBMODULE_UPDATE_MERGE = 2,
45
- GIT_SUBMODULE_UPDATE_NONE = 3
46
- } git_submodule_update_t;
47
-
48
- /**
49
- * Values that could be specified for how closely to examine the
50
- * working directory when getting submodule status.
51
23
  *
52
- * Use the DEFUALT value if you have altered the ignore value via
53
- * `git_submodule_set_ignore()` and wish to reset to the original value.
24
+ * @defgroup git_submodule Git submodule management routines
25
+ * @ingroup Git
26
+ * @{
54
27
  */
55
- typedef enum {
56
- GIT_SUBMODULE_IGNORE_DEFAULT = -1, /* reset to default */
57
- GIT_SUBMODULE_IGNORE_NONE = 0, /* any change or untracked == dirty */
58
- GIT_SUBMODULE_IGNORE_UNTRACKED = 1, /* dirty if tracked files change */
59
- GIT_SUBMODULE_IGNORE_DIRTY = 2, /* only dirty if HEAD moved */
60
- GIT_SUBMODULE_IGNORE_ALL = 3 /* never dirty */
61
- } git_submodule_ignore_t;
28
+ GIT_BEGIN_DECL
62
29
 
63
30
  /**
64
31
  * Return codes for submodule status.
@@ -119,19 +86,9 @@ typedef enum {
119
86
  GIT_SUBMODULE_STATUS_WD_UNTRACKED = (1u << 13),
120
87
  } git_submodule_status_t;
121
88
 
122
- #define GIT_SUBMODULE_STATUS__IN_FLAGS \
123
- (GIT_SUBMODULE_STATUS_IN_HEAD | \
124
- GIT_SUBMODULE_STATUS_IN_INDEX | \
125
- GIT_SUBMODULE_STATUS_IN_CONFIG | \
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)
89
+ #define GIT_SUBMODULE_STATUS__IN_FLAGS 0x000Fu
90
+ #define GIT_SUBMODULE_STATUS__INDEX_FLAGS 0x0070u
91
+ #define GIT_SUBMODULE_STATUS__WD_FLAGS 0x3F80u
135
92
 
136
93
  #define GIT_SUBMODULE_STATUS_IS_UNMODIFIED(S) \
137
94
  (((S) & ~GIT_SUBMODULE_STATUS__IN_FLAGS) == 0)
@@ -140,7 +97,8 @@ typedef enum {
140
97
  (((S) & GIT_SUBMODULE_STATUS__INDEX_FLAGS) == 0)
141
98
 
142
99
  #define GIT_SUBMODULE_STATUS_IS_WD_UNMODIFIED(S) \
143
- (((S) & GIT_SUBMODULE_STATUS__WD_FLAGS) == 0)
100
+ (((S) & (GIT_SUBMODULE_STATUS__WD_FLAGS & \
101
+ ~GIT_SUBMODULE_STATUS_WD_UNINITIALIZED)) == 0)
144
102
 
145
103
  #define GIT_SUBMODULE_STATUS_IS_WD_DIRTY(S) \
146
104
  (((S) & (GIT_SUBMODULE_STATUS_WD_INDEX_MODIFIED | \
@@ -157,29 +115,35 @@ typedef enum {
157
115
  *
158
116
  * - The submodule is not mentioned in the HEAD, the index, and the config,
159
117
  * but does "exist" in the working directory (i.e. there is a subdirectory
160
- * that is a valid self-contained git repo). In this case, this function
161
- * returns GIT_EEXISTS to indicate the the submodule exists but not in a
118
+ * that appears to be a Git repository). In this case, this function
119
+ * returns GIT_EEXISTS to indicate a sub-repository exists but not in a
162
120
  * state where a git_submodule can be instantiated.
163
121
  * - The submodule is not mentioned in the HEAD, index, or config and the
164
122
  * working directory doesn't contain a value git repo at that path.
165
123
  * There may or may not be anything else at that path, but nothing that
166
124
  * looks like a submodule. In this case, this returns GIT_ENOTFOUND.
167
125
  *
168
- * The submodule object is owned by the containing repo and will be freed
169
- * when the repo is freed. The caller need not free the submodule.
126
+ * You must call `git_submodule_free` when done with the submodule.
170
127
  *
171
- * @param submodule Pointer to submodule description object pointer..
172
- * @param repo The repository.
173
- * @param name The name of the submodule. Trailing slashes will be ignored.
128
+ * @param out Output ptr to submodule; pass NULL to just get return code
129
+ * @param repo The parent repository
130
+ * @param name The name of or path to the submodule; trailing slashes okay
174
131
  * @return 0 on success, GIT_ENOTFOUND if submodule does not exist,
175
- * GIT_EEXISTS if submodule exists in working directory only, -1 on
176
- * other errors.
132
+ * GIT_EEXISTS if a repository is found in working directory only,
133
+ * -1 on other errors.
177
134
  */
178
135
  GIT_EXTERN(int) git_submodule_lookup(
179
- git_submodule **submodule,
136
+ git_submodule **out,
180
137
  git_repository *repo,
181
138
  const char *name);
182
139
 
140
+ /**
141
+ * Release a submodule
142
+ *
143
+ * @param submodule Submodule object
144
+ */
145
+ GIT_EXTERN(void) git_submodule_free(git_submodule *submodule);
146
+
183
147
  /**
184
148
  * Iterate over all tracked submodules of a repository.
185
149
  *
@@ -217,9 +181,11 @@ GIT_EXTERN(int) git_submodule_foreach(
217
181
  * `git_submodule_add_finalize()` to wrap up adding the new submodule and
218
182
  * .gitmodules to the index to be ready to commit.
219
183
  *
220
- * @param submodule The newly created submodule ready to open for clone
221
- * @param repo Superproject repository to contain the new submodule
222
- * @param url URL for the submodules remote
184
+ * You must call `git_submodule_free` on the submodule object when done.
185
+ *
186
+ * @param out The newly created submodule ready to open for clone
187
+ * @param repo The repository in which you want to create the submodule
188
+ * @param url URL for the submodule's remote
223
189
  * @param path Path at which the submodule should be created
224
190
  * @param use_gitlink Should workdir contain a gitlink to the repo in
225
191
  * .git/modules vs. repo directly in workdir.
@@ -227,7 +193,7 @@ GIT_EXTERN(int) git_submodule_foreach(
227
193
  * -1 on other errors.
228
194
  */
229
195
  GIT_EXTERN(int) git_submodule_add_setup(
230
- git_submodule **submodule,
196
+ git_submodule **out,
231
197
  git_repository *repo,
232
198
  const char *url,
233
199
  const char *path,
@@ -313,6 +279,24 @@ GIT_EXTERN(const char *) git_submodule_path(git_submodule *submodule);
313
279
  */
314
280
  GIT_EXTERN(const char *) git_submodule_url(git_submodule *submodule);
315
281
 
282
+ /**
283
+ * Resolve a submodule url relative to the given repository.
284
+ *
285
+ * @param out buffer to store the absolute submodule url in
286
+ * @param repo Pointer to repository object
287
+ * @param url Relative url
288
+ * @return 0 or an error code
289
+ */
290
+ GIT_EXTERN(int) git_submodule_resolve_url(git_buf *out, git_repository *repo, const char *url);
291
+
292
+ /**
293
+ * Get the branch for the submodule.
294
+ *
295
+ * @param submodule Pointer to submodule object
296
+ * @return Pointer to the submodule branch
297
+ */
298
+ GIT_EXTERN(const char *) git_submodule_branch(git_submodule *submodule);
299
+
316
300
  /**
317
301
  * Set the URL for the submodule.
318
302
  *
@@ -359,9 +343,10 @@ GIT_EXTERN(const git_oid *) git_submodule_head_id(git_submodule *submodule);
359
343
  GIT_EXTERN(const git_oid *) git_submodule_wd_id(git_submodule *submodule);
360
344
 
361
345
  /**
362
- * Get the ignore rule for the submodule.
346
+ * Get the ignore rule that will be used for the submodule.
363
347
  *
364
- * There are four ignore values:
348
+ * These values control the behavior of `git_submodule_status()` for this
349
+ * submodule. There are four ignore values:
365
350
  *
366
351
  * - **GIT_SUBMODULE_IGNORE_NONE** will consider any change to the contents
367
352
  * of the submodule from a clean checkout to be dirty, including the
@@ -375,6 +360,13 @@ GIT_EXTERN(const git_oid *) git_submodule_wd_id(git_submodule *submodule);
375
360
  * - **GIT_SUBMODULE_IGNORE_ALL** means not to open the submodule repo.
376
361
  * The working directory will be consider clean so long as there is a
377
362
  * checked out version present.
363
+ *
364
+ * plus the special **GIT_SUBMODULE_IGNORE_RESET** which can be used with
365
+ * `git_submodule_set_ignore()` to revert to the on-disk setting.
366
+ *
367
+ * @param submodule The submodule to check
368
+ * @return The current git_submodule_ignore_t valyue what will be used for
369
+ * this submodule.
378
370
  */
379
371
  GIT_EXTERN(git_submodule_ignore_t) git_submodule_ignore(
380
372
  git_submodule *submodule);
@@ -382,15 +374,17 @@ GIT_EXTERN(git_submodule_ignore_t) git_submodule_ignore(
382
374
  /**
383
375
  * Set the ignore rule for the submodule.
384
376
  *
385
- * This sets the ignore rule in memory for the submodule. This will be used
386
- * for any following actions (such as `git_submodule_status()`) while the
387
- * submodule is in memory. You should call `git_submodule_save()` if you
388
- * want to persist the new ignore role.
377
+ * This sets the in-memory ignore rule for the submodule which will
378
+ * control the behavior of `git_submodule_status()`.
389
379
  *
390
- * Calling this again with GIT_SUBMODULE_IGNORE_DEFAULT or calling
391
- * `git_submodule_reload()` will revert the rule to the value that was in the
392
- * original config.
380
+ * To make changes persistent, call `git_submodule_save()` to write the
381
+ * value to disk (in the ".gitmodules" and ".git/config" files).
393
382
  *
383
+ * Call with `GIT_SUBMODULE_IGNORE_RESET` or call `git_submodule_reload()`
384
+ * to revert the in-memory rule to the value that is on disk.
385
+ *
386
+ * @param submodule The submodule to update
387
+ * @param ignore The new value for the ignore rule
394
388
  * @return old value for ignore
395
389
  */
396
390
  GIT_EXTERN(git_submodule_ignore_t) git_submodule_set_ignore(
@@ -398,7 +392,16 @@ GIT_EXTERN(git_submodule_ignore_t) git_submodule_set_ignore(
398
392
  git_submodule_ignore_t ignore);
399
393
 
400
394
  /**
401
- * Get the update rule for the submodule.
395
+ * Get the update rule that will be used for the submodule.
396
+ *
397
+ * This value controls the behavior of the `git submodule update` command.
398
+ * There are four useful values documented with `git_submodule_update_t`
399
+ * plus the `GIT_SUBMODULE_UPDATE_RESET` which can be used to revert to
400
+ * the on-disk setting.
401
+ *
402
+ * @param submodule The submodule to check
403
+ * @return The current git_submodule_update_t value that will be used
404
+ * for this submodule.
402
405
  */
403
406
  GIT_EXTERN(git_submodule_update_t) git_submodule_update(
404
407
  git_submodule *submodule);
@@ -406,13 +409,17 @@ GIT_EXTERN(git_submodule_update_t) git_submodule_update(
406
409
  /**
407
410
  * Set the update rule for the submodule.
408
411
  *
409
- * This sets the update rule in memory for the submodule. You should call
410
- * `git_submodule_save()` if you want to persist the new update rule.
412
+ * The initial value comes from the ".git/config" setting of
413
+ * `submodule.$name.update` for this submodule (which is initialized from
414
+ * the ".gitmodules" file). Using this function sets the update rule in
415
+ * memory for the submodule. Call `git_submodule_save()` to write out the
416
+ * new update rule.
411
417
  *
412
- * Calling this again with GIT_SUBMODULE_UPDATE_DEFAULT or calling
413
- * `git_submodule_reload()` will revert the rule to the value that was in the
414
- * original config.
418
+ * Calling this again with GIT_SUBMODULE_UPDATE_RESET or calling
419
+ * `git_submodule_reload()` will revert the rule to the on disk value.
415
420
  *
421
+ * @param submodule The submodule to update
422
+ * @param update The new value to use
416
423
  * @return old value for update
417
424
  */
418
425
  GIT_EXTERN(git_submodule_update_t) git_submodule_set_update(
@@ -430,7 +437,7 @@ GIT_EXTERN(git_submodule_update_t) git_submodule_set_update(
430
437
  *
431
438
  * @return 0 if fetchRecurseSubmodules is false, 1 if true
432
439
  */
433
- GIT_EXTERN(int) git_submodule_fetch_recurse_submodules(
440
+ GIT_EXTERN(git_submodule_recurse_t) git_submodule_fetch_recurse_submodules(
434
441
  git_submodule *submodule);
435
442
 
436
443
  /**
@@ -444,9 +451,9 @@ GIT_EXTERN(int) git_submodule_fetch_recurse_submodules(
444
451
  * @param fetch_recurse_submodules Boolean value
445
452
  * @return old value for fetchRecurseSubmodules
446
453
  */
447
- GIT_EXTERN(int) git_submodule_set_fetch_recurse_submodules(
454
+ GIT_EXTERN(git_submodule_recurse_t) git_submodule_set_fetch_recurse_submodules(
448
455
  git_submodule *submodule,
449
- int fetch_recurse_submodules);
456
+ git_submodule_recurse_t fetch_recurse_submodules);
450
457
 
451
458
  /**
452
459
  * Copy submodule info into ".git/config" file.
@@ -494,15 +501,23 @@ GIT_EXTERN(int) git_submodule_open(
494
501
  *
495
502
  * Call this to reread cached submodule information for this submodule if
496
503
  * you have reason to believe that it has changed.
504
+ *
505
+ * @param submodule The submodule to reload
506
+ * @param force Force reload even if the data doesn't seem out of date
507
+ * @return 0 on success, <0 on error
497
508
  */
498
- GIT_EXTERN(int) git_submodule_reload(git_submodule *submodule);
509
+ GIT_EXTERN(int) git_submodule_reload(git_submodule *submodule, int force);
499
510
 
500
511
  /**
501
512
  * Reread all submodule info.
502
513
  *
503
514
  * Call this to reload all cached submodule information for the repo.
515
+ *
516
+ * @param repo The repository to reload submodule data for
517
+ * @param force Force full reload even if the data doesn't seem out of date
518
+ * @return 0 on success, <0 on error
504
519
  */
505
- GIT_EXTERN(int) git_submodule_reload_all(git_repository *repo);
520
+ GIT_EXTERN(int) git_submodule_reload_all(git_repository *repo, int force);
506
521
 
507
522
  /**
508
523
  * Get the status for a submodule.
@@ -21,16 +21,18 @@
21
21
  GIT_BEGIN_DECL
22
22
 
23
23
  /**
24
- * Create new commit in the repository from a list of `git_oid` values
24
+ * Create new commit in the repository from a list of `git_oid` values.
25
25
  *
26
26
  * See documentation for `git_commit_create()` for information about the
27
27
  * parameters, as the meaning is identical excepting that `tree` and
28
28
  * `parents` now take `git_oid`. This is a dangerous API in that nor
29
29
  * the `tree`, neither the `parents` list of `git_oid`s are checked for
30
30
  * validity.
31
+ *
32
+ * @see git_commit_create
31
33
  */
32
- GIT_EXTERN(int) git_commit_create_from_oids(
33
- git_oid *oid,
34
+ GIT_EXTERN(int) git_commit_create_from_ids(
35
+ git_oid *id,
34
36
  git_repository *repo,
35
37
  const char *update_ref,
36
38
  const git_signature *author,
@@ -38,9 +40,41 @@ GIT_EXTERN(int) git_commit_create_from_oids(
38
40
  const char *message_encoding,
39
41
  const char *message,
40
42
  const git_oid *tree,
41
- int parent_count,
43
+ size_t parent_count,
42
44
  const git_oid *parents[]);
43
45
 
46
+ /**
47
+ * Callback function to return parents for commit.
48
+ *
49
+ * This is invoked with the count of the number of parents processed so far
50
+ * along with the user supplied payload. This should return a git_oid of
51
+ * the next parent or NULL if all parents have been provided.
52
+ */
53
+ typedef const git_oid *(*git_commit_parent_callback)(size_t idx, void *payload);
54
+
55
+ /**
56
+ * Create a new commit in the repository with an callback to supply parents.
57
+ *
58
+ * See documentation for `git_commit_create()` for information about the
59
+ * parameters, as the meaning is identical excepting that `tree` takes a
60
+ * `git_oid` and doesn't check for validity, and `parent_cb` is invoked
61
+ * with `parent_payload` and should return `git_oid` values or NULL to
62
+ * indicate that all parents are accounted for.
63
+ *
64
+ * @see git_commit_create
65
+ */
66
+ GIT_EXTERN(int) git_commit_create_from_callback(
67
+ git_oid *id,
68
+ git_repository *repo,
69
+ const char *update_ref,
70
+ const git_signature *author,
71
+ const git_signature *committer,
72
+ const char *message_encoding,
73
+ const char *message,
74
+ const git_oid *tree,
75
+ git_commit_parent_callback parent_cb,
76
+ void *parent_payload);
77
+
44
78
  /** @} */
45
79
  GIT_END_DECL
46
80
  #endif
@@ -20,6 +20,33 @@
20
20
  */
21
21
  GIT_BEGIN_DECL
22
22
 
23
+ /**
24
+ * Every iterator must have this struct as its first element, so the
25
+ * API can talk to it. You'd define your iterator as
26
+ *
27
+ * struct my_iterator {
28
+ * git_config_iterator parent;
29
+ * ...
30
+ * }
31
+ *
32
+ * and assign `iter->parent.backend` to your `git_config_backend`.
33
+ */
34
+ struct git_config_iterator {
35
+ git_config_backend *backend;
36
+ unsigned int flags;
37
+
38
+ /**
39
+ * Return the current entry and advance the iterator. The
40
+ * memory belongs to the library.
41
+ */
42
+ int (*next)(git_config_entry **entry, git_config_iterator *iter);
43
+
44
+ /**
45
+ * Free the iterator
46
+ */
47
+ void (*free)(git_config_iterator *iter);
48
+ };
49
+
23
50
  /**
24
51
  * Generic backend that implements the interface to
25
52
  * access a configuration file
@@ -30,18 +57,32 @@ struct git_config_backend {
30
57
 
31
58
  /* Open means open the file/database and parse if necessary */
32
59
  int (*open)(struct git_config_backend *, git_config_level_t level);
33
- int (*get)(const struct git_config_backend *, const char *key, const git_config_entry **entry);
34
- int (*get_multivar)(struct git_config_backend *, const char *key, const char *regexp, git_config_foreach_cb callback, void *payload);
60
+ int (*get)(struct git_config_backend *, const char *key, const git_config_entry **entry);
35
61
  int (*set)(struct git_config_backend *, const char *key, const char *value);
36
62
  int (*set_multivar)(git_config_backend *cfg, const char *name, const char *regexp, const char *value);
37
63
  int (*del)(struct git_config_backend *, const char *key);
38
- int (*foreach)(struct git_config_backend *, const char *, git_config_foreach_cb callback, void *payload);
64
+ int (*del_multivar)(struct git_config_backend *, const char *key, const char *regexp);
65
+ int (*iterator)(git_config_iterator **, struct git_config_backend *);
39
66
  int (*refresh)(struct git_config_backend *);
67
+ /** Produce a read-only version of this backend */
68
+ int (*snapshot)(struct git_config_backend **, struct git_config_backend *);
40
69
  void (*free)(struct git_config_backend *);
41
70
  };
42
71
  #define GIT_CONFIG_BACKEND_VERSION 1
43
72
  #define GIT_CONFIG_BACKEND_INIT {GIT_CONFIG_BACKEND_VERSION}
44
73
 
74
+ /**
75
+ * Initializes a `git_config_backend` with default values. Equivalent to
76
+ * creating an instance with GIT_CONFIG_BACKEND_INIT.
77
+ *
78
+ * @param opts the `git_config_backend` struct to initialize.
79
+ * @param version Version of struct; pass `GIT_CONFIG_BACKEND_VERSION`
80
+ * @return Zero on success; -1 on failure.
81
+ */
82
+ GIT_EXTERN(int) git_config_init_backend(
83
+ git_config_backend *backend,
84
+ unsigned int version);
85
+
45
86
  /**
46
87
  * Add a generic config file instance to an existing config
47
88
  *