rugged 1.7.2 → 1.9.4

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 (405) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rugged/extconf.rb +4 -4
  3. data/ext/rugged/rugged.c +12 -1
  4. data/ext/rugged/rugged_blame.c +22 -6
  5. data/ext/rugged/rugged_blob.c +24 -9
  6. data/ext/rugged/rugged_branch.c +10 -7
  7. data/ext/rugged/rugged_branch_collection.c +8 -6
  8. data/ext/rugged/rugged_commit.c +7 -6
  9. data/ext/rugged/rugged_config.c +20 -11
  10. data/ext/rugged/rugged_diff.c +26 -12
  11. data/ext/rugged/rugged_diff_hunk.c +2 -1
  12. data/ext/rugged/rugged_index.c +39 -29
  13. data/ext/rugged/rugged_note.c +7 -6
  14. data/ext/rugged/rugged_object.c +3 -2
  15. data/ext/rugged/rugged_patch.c +23 -9
  16. data/ext/rugged/rugged_rebase.c +22 -10
  17. data/ext/rugged/rugged_reference.c +22 -13
  18. data/ext/rugged/rugged_reference_collection.c +9 -7
  19. data/ext/rugged/rugged_remote.c +23 -12
  20. data/ext/rugged/rugged_remote_collection.c +11 -9
  21. data/ext/rugged/rugged_repo.c +60 -45
  22. data/ext/rugged/rugged_revwalk.c +22 -12
  23. data/ext/rugged/rugged_submodule.c +23 -20
  24. data/ext/rugged/rugged_submodule_collection.c +20 -9
  25. data/ext/rugged/rugged_tag.c +6 -4
  26. data/ext/rugged/rugged_tag_collection.c +7 -5
  27. data/ext/rugged/rugged_tree.c +27 -15
  28. data/lib/rugged/version.rb +1 -1
  29. data/vendor/libgit2/AUTHORS +3 -0
  30. data/vendor/libgit2/CMakeLists.txt +23 -10
  31. data/vendor/libgit2/COPYING +195 -1
  32. data/vendor/libgit2/cmake/DefaultCFlags.cmake +4 -1
  33. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  34. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  35. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  36. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  37. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  38. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  39. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  40. data/vendor/libgit2/cmake/SelectSSH.cmake +30 -19
  41. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  42. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  43. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  44. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  45. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  46. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  47. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  48. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  49. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  50. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  51. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  52. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  53. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  54. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  55. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  56. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  57. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  58. data/vendor/libgit2/deps/pcre/CMakeLists.txt +3 -3
  59. data/vendor/libgit2/deps/xdiff/CMakeLists.txt +1 -1
  60. data/vendor/libgit2/deps/xdiff/xmerge.c +16 -12
  61. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  62. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  63. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  64. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  65. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  66. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  67. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  68. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  69. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  70. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  71. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  72. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  73. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  74. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  75. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  76. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  77. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  78. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  79. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  80. data/vendor/libgit2/include/git2/apply.h +27 -6
  81. data/vendor/libgit2/include/git2/attr.h +17 -4
  82. data/vendor/libgit2/include/git2/blame.h +133 -28
  83. data/vendor/libgit2/include/git2/blob.h +71 -28
  84. data/vendor/libgit2/include/git2/branch.h +22 -15
  85. data/vendor/libgit2/include/git2/buffer.h +6 -4
  86. data/vendor/libgit2/include/git2/cert.h +2 -1
  87. data/vendor/libgit2/include/git2/checkout.h +83 -32
  88. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  89. data/vendor/libgit2/include/git2/clone.h +25 -9
  90. data/vendor/libgit2/include/git2/commit.h +132 -3
  91. data/vendor/libgit2/include/git2/common.h +120 -63
  92. data/vendor/libgit2/include/git2/config.h +93 -23
  93. data/vendor/libgit2/include/git2/credential.h +30 -2
  94. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  95. data/vendor/libgit2/include/git2/deprecated.h +134 -4
  96. data/vendor/libgit2/include/git2/describe.h +13 -1
  97. data/vendor/libgit2/include/git2/diff.h +38 -8
  98. data/vendor/libgit2/include/git2/email.h +9 -29
  99. data/vendor/libgit2/include/git2/errors.h +46 -73
  100. data/vendor/libgit2/include/git2/filter.h +14 -7
  101. data/vendor/libgit2/include/git2/global.h +8 -1
  102. data/vendor/libgit2/include/git2/graph.h +3 -2
  103. data/vendor/libgit2/include/git2/ignore.h +10 -0
  104. data/vendor/libgit2/include/git2/index.h +100 -15
  105. data/vendor/libgit2/include/git2/indexer.h +21 -4
  106. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  107. data/vendor/libgit2/include/git2/merge.h +50 -3
  108. data/vendor/libgit2/include/git2/message.h +2 -2
  109. data/vendor/libgit2/include/git2/net.h +3 -1
  110. data/vendor/libgit2/include/git2/notes.h +9 -6
  111. data/vendor/libgit2/include/git2/object.h +9 -8
  112. data/vendor/libgit2/include/git2/odb.h +91 -49
  113. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  114. data/vendor/libgit2/include/git2/oid.h +23 -25
  115. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  116. data/vendor/libgit2/include/git2/pack.h +13 -1
  117. data/vendor/libgit2/include/git2/patch.h +2 -3
  118. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  119. data/vendor/libgit2/include/git2/proxy.h +12 -3
  120. data/vendor/libgit2/include/git2/rebase.h +9 -6
  121. data/vendor/libgit2/include/git2/refdb.h +2 -2
  122. data/vendor/libgit2/include/git2/reflog.h +3 -2
  123. data/vendor/libgit2/include/git2/refs.h +9 -6
  124. data/vendor/libgit2/include/git2/refspec.h +14 -4
  125. data/vendor/libgit2/include/git2/remote.h +113 -25
  126. data/vendor/libgit2/include/git2/repository.h +57 -21
  127. data/vendor/libgit2/include/git2/reset.h +16 -3
  128. data/vendor/libgit2/include/git2/revert.h +9 -4
  129. data/vendor/libgit2/include/git2/revparse.h +3 -3
  130. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  131. data/vendor/libgit2/include/git2/signature.h +46 -1
  132. data/vendor/libgit2/include/git2/stash.h +17 -3
  133. data/vendor/libgit2/include/git2/status.h +10 -6
  134. data/vendor/libgit2/include/git2/stdint.h +87 -85
  135. data/vendor/libgit2/include/git2/strarray.h +2 -3
  136. data/vendor/libgit2/include/git2/submodule.h +20 -9
  137. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  138. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  139. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  140. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  141. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  142. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  143. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  144. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  145. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  146. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  147. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  148. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  149. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  150. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  151. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  152. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  153. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  154. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  155. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  156. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  157. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  158. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  159. data/vendor/libgit2/include/git2/sys/transport.h +25 -4
  160. data/vendor/libgit2/include/git2/tag.h +3 -1
  161. data/vendor/libgit2/include/git2/trace.h +9 -3
  162. data/vendor/libgit2/include/git2/transaction.h +3 -2
  163. data/vendor/libgit2/include/git2/transport.h +11 -3
  164. data/vendor/libgit2/include/git2/tree.h +16 -5
  165. data/vendor/libgit2/include/git2/types.h +19 -3
  166. data/vendor/libgit2/include/git2/version.h +46 -8
  167. data/vendor/libgit2/include/git2/worktree.h +16 -6
  168. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  169. data/vendor/libgit2/src/cli/CMakeLists.txt +3 -4
  170. data/vendor/libgit2/src/cli/cmd.c +1 -1
  171. data/vendor/libgit2/src/cli/cmd.h +4 -0
  172. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  173. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  174. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  175. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  176. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  177. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  178. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  179. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  180. data/vendor/libgit2/src/cli/common.c +168 -0
  181. data/vendor/libgit2/src/cli/common.h +63 -0
  182. data/vendor/libgit2/src/cli/error.h +1 -1
  183. data/vendor/libgit2/src/cli/main.c +52 -24
  184. data/vendor/libgit2/src/cli/opt.c +31 -5
  185. data/vendor/libgit2/src/cli/opt.h +21 -3
  186. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  187. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  188. data/vendor/libgit2/src/cli/progress.c +51 -2
  189. data/vendor/libgit2/src/cli/progress.h +12 -0
  190. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  191. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  192. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  193. data/vendor/libgit2/src/libgit2/CMakeLists.txt +55 -21
  194. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  195. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  196. data/vendor/libgit2/src/libgit2/attr_file.c +17 -5
  197. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  198. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  199. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  200. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  201. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  202. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  203. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  204. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  205. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  206. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  207. data/vendor/libgit2/src/libgit2/clone.c +192 -166
  208. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  209. data/vendor/libgit2/src/libgit2/commit.c +93 -1
  210. data/vendor/libgit2/src/libgit2/commit_graph.c +68 -58
  211. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  212. data/vendor/libgit2/src/libgit2/config.c +390 -299
  213. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  214. data/vendor/libgit2/src/libgit2/config.h +9 -4
  215. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  216. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  217. data/vendor/libgit2/src/libgit2/config_file.c +101 -89
  218. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  219. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  220. data/vendor/libgit2/src/libgit2/config_mem.c +195 -40
  221. data/vendor/libgit2/src/libgit2/config_parse.c +12 -10
  222. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  223. data/vendor/libgit2/src/libgit2/delta.c +5 -1
  224. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  225. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  226. data/vendor/libgit2/src/libgit2/diff_driver.c +13 -20
  227. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  228. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  229. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  230. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  231. data/vendor/libgit2/src/libgit2/diff_stats.c +19 -12
  232. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  233. data/vendor/libgit2/src/libgit2/email.c +1 -0
  234. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  235. data/vendor/libgit2/src/libgit2/fetchhead.c +1 -1
  236. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  237. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  238. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  239. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  240. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  241. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  242. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  243. data/vendor/libgit2/src/libgit2/index.c +76 -98
  244. data/vendor/libgit2/src/libgit2/index.h +5 -2
  245. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  246. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  247. data/vendor/libgit2/src/libgit2/indexer.c +36 -40
  248. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  249. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  250. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  251. data/vendor/libgit2/src/libgit2/merge.c +43 -38
  252. data/vendor/libgit2/src/libgit2/merge.h +4 -0
  253. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  254. data/vendor/libgit2/src/libgit2/merge_file.c +43 -30
  255. data/vendor/libgit2/src/libgit2/message.c +1 -1
  256. data/vendor/libgit2/src/libgit2/midx.c +30 -18
  257. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  258. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  259. data/vendor/libgit2/src/libgit2/object.c +6 -5
  260. data/vendor/libgit2/src/libgit2/odb.c +7 -10
  261. data/vendor/libgit2/src/libgit2/odb_loose.c +24 -14
  262. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  263. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  264. data/vendor/libgit2/src/libgit2/oid.c +36 -10
  265. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  266. data/vendor/libgit2/src/libgit2/pack-objects.c +59 -34
  267. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  268. data/vendor/libgit2/src/libgit2/pack.c +33 -24
  269. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  270. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  271. data/vendor/libgit2/src/libgit2/path.c +1 -1
  272. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  273. data/vendor/libgit2/src/libgit2/push.c +79 -28
  274. data/vendor/libgit2/src/libgit2/push.h +1 -0
  275. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  276. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  277. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  278. data/vendor/libgit2/src/libgit2/refs.c +41 -13
  279. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  280. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  281. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  282. data/vendor/libgit2/src/libgit2/remote.c +125 -62
  283. data/vendor/libgit2/src/libgit2/remote.h +0 -1
  284. data/vendor/libgit2/src/libgit2/repository.c +235 -54
  285. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  286. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  287. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  288. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  289. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  290. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  291. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  292. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  293. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  294. data/vendor/libgit2/src/libgit2/status.c +1 -1
  295. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  296. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  297. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  298. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  299. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  300. data/vendor/libgit2/src/libgit2/streams/socket.c +30 -0
  301. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  302. data/vendor/libgit2/src/libgit2/submodule.c +118 -68
  303. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  304. data/vendor/libgit2/src/libgit2/tag.c +4 -2
  305. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  306. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  307. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  308. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  309. data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +2 -0
  310. data/vendor/libgit2/src/libgit2/transports/credential.c +2 -2
  311. data/vendor/libgit2/src/libgit2/transports/git.c +1 -1
  312. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  313. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  314. data/vendor/libgit2/src/libgit2/transports/httpclient.c +124 -81
  315. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  316. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  317. data/vendor/libgit2/src/libgit2/transports/local.c +16 -8
  318. data/vendor/libgit2/src/libgit2/transports/smart.c +25 -13
  319. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  320. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +5 -5
  321. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  322. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  323. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +386 -0
  324. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  325. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  326. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  327. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  328. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  329. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  330. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  331. data/vendor/libgit2/src/util/CMakeLists.txt +7 -10
  332. data/vendor/libgit2/src/util/alloc.c +4 -1
  333. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  334. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  335. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  336. data/vendor/libgit2/src/util/array.h +18 -17
  337. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  338. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  339. data/vendor/libgit2/src/util/date.c +22 -14
  340. data/vendor/libgit2/src/util/date.h +12 -0
  341. data/vendor/libgit2/src/util/errors.c +401 -0
  342. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  343. data/vendor/libgit2/src/util/fs_path.c +81 -10
  344. data/vendor/libgit2/src/util/fs_path.h +29 -0
  345. data/vendor/libgit2/src/util/futils.c +6 -5
  346. data/vendor/libgit2/src/util/futils.h +24 -7
  347. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  348. data/vendor/libgit2/src/util/git2_util.h +6 -0
  349. data/vendor/libgit2/src/util/hash/builtin.c +14 -4
  350. data/vendor/libgit2/src/util/hash/openssl.c +148 -0
  351. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  352. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +8 -6
  353. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  354. data/vendor/libgit2/src/util/hashmap.h +425 -0
  355. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  356. data/vendor/libgit2/src/util/integer.h +3 -1
  357. data/vendor/libgit2/src/util/net.c +17 -11
  358. data/vendor/libgit2/src/util/net.h +2 -0
  359. data/vendor/libgit2/src/util/pool.c +1 -1
  360. data/vendor/libgit2/src/util/pool.h +5 -0
  361. data/vendor/libgit2/src/util/pqueue.h +1 -1
  362. data/vendor/libgit2/src/util/process.h +223 -0
  363. data/vendor/libgit2/src/util/rand.c +1 -7
  364. data/vendor/libgit2/src/util/regexp.c +1 -1
  365. data/vendor/libgit2/src/util/runtime.c +2 -2
  366. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  367. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  368. data/vendor/libgit2/src/util/str.c +20 -8
  369. data/vendor/libgit2/src/util/str.h +5 -3
  370. data/vendor/libgit2/src/util/strlist.c +108 -0
  371. data/vendor/libgit2/src/util/strlist.h +36 -0
  372. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  373. data/vendor/libgit2/src/util/unix/process.c +706 -0
  374. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  375. data/vendor/libgit2/src/util/util.c +18 -5
  376. data/vendor/libgit2/src/util/util.h +5 -38
  377. data/vendor/libgit2/src/util/vector.c +3 -3
  378. data/vendor/libgit2/src/util/vector.h +2 -2
  379. data/vendor/libgit2/src/util/win32/path_w32.c +81 -5
  380. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  381. data/vendor/libgit2/src/util/win32/process.c +522 -0
  382. metadata +60 -32
  383. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  384. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  385. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  386. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  387. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  388. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  389. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  390. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  391. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  392. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  393. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  394. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  395. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  396. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  397. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  398. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  399. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  400. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  401. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  402. data/vendor/libgit2/src/util/khash.h +0 -615
  403. data/vendor/libgit2/src/util/strmap.c +0 -100
  404. data/vendor/libgit2/src/util/strmap.h +0 -131
  405. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -0,0 +1,168 @@
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
+
8
+ #include <git2.h>
9
+ #include <git2/sys/config.h>
10
+
11
+ #include "git2_util.h"
12
+ #include "vector.h"
13
+ #include "fs_path.h"
14
+
15
+ #include "common.h"
16
+ #include "error.h"
17
+
18
+ static int parse_option(cli_opt *opt, void *data)
19
+ {
20
+ git_str kv = GIT_STR_INIT, env = GIT_STR_INIT;
21
+ git_vector *cmdline_config = data;
22
+ int error = 0;
23
+
24
+ if (opt->spec && opt->spec->alias == 'c') {
25
+ if (git_str_puts(&kv, opt->value) < 0) {
26
+ error = cli_error_git();
27
+ goto done;
28
+ }
29
+ }
30
+
31
+ else if (opt->spec && !strcmp(opt->spec->name, "config-env")) {
32
+ char *val = strchr(opt->value, '=');
33
+
34
+ if (val == NULL || *(val + 1) == '\0') {
35
+ error = cli_error("invalid config format: '%s'", opt->value);
36
+ goto done;
37
+ }
38
+
39
+ if (git_str_put(&kv, opt->value, (val - opt->value)) < 0) {
40
+ error = cli_error_git();
41
+ goto done;
42
+ }
43
+
44
+ val++;
45
+
46
+ if ((error = git__getenv(&env, val)) == GIT_ENOTFOUND) {
47
+ error = cli_error("missing environment variable '%s' for configuration '%s'", val, kv.ptr);
48
+ goto done;
49
+ } else if (error) {
50
+ error = cli_error_git();
51
+ goto done;
52
+ }
53
+
54
+ if (git_str_putc(&kv, '=') < 0 ||
55
+ git_str_puts(&kv, env.ptr) < 0) {
56
+ error = cli_error_git();
57
+ goto done;
58
+ }
59
+ }
60
+
61
+ if (kv.size > 0 &&
62
+ git_vector_insert(cmdline_config, git_str_detach(&kv)) < 0)
63
+ error = cli_error_git();
64
+
65
+ done:
66
+ git_str_dispose(&env);
67
+ git_str_dispose(&kv);
68
+ return error;
69
+ }
70
+
71
+ static int parse_common_options(
72
+ git_repository *repo,
73
+ cli_repository_open_options *opts)
74
+ {
75
+ cli_opt_spec common_opts[] = {
76
+ { CLI_COMMON_OPT_CONFIG },
77
+ { CLI_COMMON_OPT_CONFIG_ENV },
78
+ { 0 }
79
+ };
80
+ git_config_backend_memory_options config_opts =
81
+ GIT_CONFIG_BACKEND_MEMORY_OPTIONS_INIT;
82
+ git_vector cmdline = GIT_VECTOR_INIT;
83
+ git_config *config = NULL;
84
+ git_config_backend *backend = NULL;
85
+ int error = 0;
86
+
87
+ config_opts.backend_type = "command line";
88
+
89
+ if ((error = cli_opt_foreach(common_opts, opts->args,
90
+ opts->args_len, CLI_OPT_PARSE_GNU, parse_option,
91
+ &cmdline)) < 0)
92
+ goto done;
93
+
94
+ if (git_vector_length(&cmdline) == 0)
95
+ goto done;
96
+
97
+ if (git_repository_config(&config, repo) < 0 ||
98
+ git_config_backend_from_values(&backend,
99
+ (const char **)cmdline.contents, cmdline.length,
100
+ &config_opts) < 0 ||
101
+ git_config_add_backend(config, backend, GIT_CONFIG_LEVEL_APP,
102
+ repo, 0) < 0)
103
+ error = cli_error_git();
104
+
105
+ done:
106
+ if (error && backend)
107
+ backend->free(backend);
108
+ git_config_free(config);
109
+ git_vector_dispose_deep(&cmdline);
110
+ return error;
111
+ }
112
+
113
+ int cli_repository_open(
114
+ git_repository **out,
115
+ cli_repository_open_options *opts)
116
+ {
117
+ git_repository *repo;
118
+
119
+ if (git_repository_open_ext(&repo, ".", GIT_REPOSITORY_OPEN_FROM_ENV, NULL) < 0)
120
+ return -1;
121
+
122
+ if (opts && parse_common_options(repo, opts) < 0)
123
+ return -1;
124
+
125
+ *out = repo;
126
+ return 0;
127
+ }
128
+
129
+ /*
130
+ * This resolves paths - not _pathspecs_ like git - it accepts an absolute
131
+ * path (to a path within the repository working directory) or a path
132
+ * relative to the current directory.
133
+ */
134
+ int cli_resolve_path(git_str *out, git_repository *repo, const char *given_path)
135
+ {
136
+ git_str path = GIT_STR_INIT;
137
+ int error = 0;
138
+
139
+ if (!git_fs_path_is_absolute(given_path)) {
140
+ char cwd[GIT_PATH_MAX];
141
+
142
+ if (p_getcwd(cwd, GIT_PATH_MAX) < 0)
143
+ error = cli_error_os();
144
+ else if (git_str_puts(&path, cwd) < 0 ||
145
+ git_fs_path_apply_relative(&path, given_path) < 0)
146
+ error = cli_error_git();
147
+
148
+ if (error)
149
+ goto done;
150
+ } else if (git_str_puts(&path, given_path) < 0) {
151
+ error = cli_error_git();
152
+ goto done;
153
+ }
154
+
155
+ error = git_fs_path_make_relative(&path, git_repository_workdir(repo));
156
+
157
+ if (error == GIT_ENOTFOUND)
158
+ error = cli_error("path '%s' is not inside the git repository '%s'",
159
+ given_path, git_repository_workdir(repo));
160
+ else if (error < 0)
161
+ error = cli_error_git();
162
+ else
163
+ git_str_swap(out, &path);
164
+
165
+ done:
166
+ git_str_dispose(&path);
167
+ return error;
168
+ }
@@ -0,0 +1,63 @@
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
+
8
+ #ifndef CLI_common_h__
9
+ #define CLI_common_h__
10
+
11
+ #define PROGRAM_NAME "git2"
12
+
13
+ #include "git2_util.h"
14
+
15
+ #include "error.h"
16
+ #include "opt.h"
17
+ #include "opt_usage.h"
18
+
19
+ /*
20
+ * Common command arguments.
21
+ */
22
+
23
+ extern int cli_opt__show_help;
24
+ extern int cli_opt__use_pager;
25
+
26
+ #define CLI_COMMON_OPT_HELP \
27
+ CLI_OPT_TYPE_SWITCH, "help", 0, &cli_opt__show_help, 1, \
28
+ CLI_OPT_USAGE_HIDDEN | CLI_OPT_USAGE_STOP_PARSING, \
29
+ NULL, "display help information"
30
+ #define CLI_COMMON_OPT_CONFIG \
31
+ CLI_OPT_TYPE_VALUE, NULL, 'c', NULL, 0, \
32
+ CLI_OPT_USAGE_HIDDEN, \
33
+ "key=value", "add configuration value"
34
+ #define CLI_COMMON_OPT_CONFIG_ENV \
35
+ CLI_OPT_TYPE_VALUE, "config-env", 0, NULL, 0, \
36
+ CLI_OPT_USAGE_HIDDEN, \
37
+ "key=value", "set configuration value to environment variable"
38
+ #define CLI_COMMON_OPT_NO_PAGER \
39
+ CLI_OPT_TYPE_SWITCH, "no-pager", 0, &cli_opt__use_pager, 0, \
40
+ CLI_OPT_USAGE_HIDDEN, \
41
+ NULL, "don't paginate multi-page output"
42
+
43
+ #define CLI_COMMON_OPT \
44
+ { CLI_COMMON_OPT_HELP }, \
45
+ { CLI_COMMON_OPT_CONFIG }, \
46
+ { CLI_COMMON_OPT_CONFIG_ENV }, \
47
+ { CLI_COMMON_OPT_NO_PAGER }
48
+
49
+ typedef struct {
50
+ char **args;
51
+ int args_len;
52
+ } cli_repository_open_options;
53
+
54
+ extern int cli_repository_open(
55
+ git_repository **out,
56
+ cli_repository_open_options *opts);
57
+
58
+ extern int cli_resolve_path(
59
+ git_str *out,
60
+ git_repository *repo,
61
+ const char *given_path);
62
+
63
+ #endif /* CLI_common_h__ */
@@ -8,7 +8,7 @@
8
8
  #ifndef CLI_error_h__
9
9
  #define CLI_error_h__
10
10
 
11
- #include "cli.h"
11
+ #include "common.h"
12
12
  #include <stdio.h>
13
13
 
14
14
  #define CLI_EXIT_OK 0
@@ -7,17 +7,19 @@
7
7
 
8
8
  #include <stdio.h>
9
9
  #include <git2.h>
10
- #include "cli.h"
10
+ #include "common.h"
11
11
  #include "cmd.h"
12
12
 
13
- static int show_help = 0;
13
+ int cli_opt__show_help = 0;
14
+ int cli_opt__use_pager = 1;
15
+
14
16
  static int show_version = 0;
15
17
  static char *command = NULL;
16
18
  static char **args = NULL;
17
19
 
18
20
  const cli_opt_spec cli_common_opts[] = {
19
- { CLI_OPT_TYPE_SWITCH, "help", 0, &show_help, 1,
20
- CLI_OPT_USAGE_DEFAULT, NULL, "display help information" },
21
+ CLI_COMMON_OPT,
22
+
21
23
  { CLI_OPT_TYPE_SWITCH, "version", 0, &show_version, 1,
22
24
  CLI_OPT_USAGE_DEFAULT, NULL, "display the version" },
23
25
  { CLI_OPT_TYPE_ARG, "command", 0, &command, 0,
@@ -28,21 +30,57 @@ const cli_opt_spec cli_common_opts[] = {
28
30
  };
29
31
 
30
32
  const cli_cmd_spec cli_cmds[] = {
33
+ { "blame", cmd_blame, "Show the origin of each line of a file" },
31
34
  { "cat-file", cmd_cat_file, "Display an object in the repository" },
32
35
  { "clone", cmd_clone, "Clone a repository into a new directory" },
36
+ { "config", cmd_config, "View or set configuration values " },
33
37
  { "hash-object", cmd_hash_object, "Hash a raw object and product its object ID" },
34
38
  { "help", cmd_help, "Display help information" },
39
+ { "index-pack", cmd_index_pack, "Create an index for a packfile" },
40
+ { "init", cmd_init, "Create a new git repository" },
35
41
  { NULL }
36
42
  };
37
43
 
44
+ /*
45
+ * Reorder the argv as it was given, since git has the notion of global
46
+ * options (like `--help` or `-c key=val`) that we want to pass to the
47
+ * subcommand, and that can appear early in the arguments, before the
48
+ * command name. Put the command-name in argv[1] to allow easier parsing.
49
+ */
50
+ static void reorder_args(char **argv, size_t first)
51
+ {
52
+ char *tmp;
53
+ size_t i;
54
+
55
+ if (first == 1)
56
+ return;
57
+
58
+ tmp = argv[first];
59
+
60
+ for (i = first; i > 1; i--)
61
+ argv[i] = argv[i - 1];
62
+
63
+ argv[1] = tmp;
64
+ }
65
+
66
+ /*
67
+ * When invoked without a command, or just with `--help`, we invoke
68
+ * the help command; but we want to preserve only arguments that would
69
+ * be useful for that.
70
+ */
71
+ static void help_args(int *argc, char **argv)
72
+ {
73
+ cli_opt__show_help = 0;
74
+
75
+ argv[0] = "help";
76
+ *argc = 1;
77
+ }
78
+
38
79
  int main(int argc, char **argv)
39
80
  {
40
81
  const cli_cmd_spec *cmd;
41
82
  cli_opt_parser optparser;
42
83
  cli_opt opt;
43
- char *help_args[3] = { NULL };
44
- int help_args_len;
45
- int args_len = 0;
46
84
  int ret = 0;
47
85
 
48
86
  if (git_libgit2_init() < 0) {
@@ -56,7 +94,7 @@ int main(int argc, char **argv)
56
94
  while (cli_opt_parser_next(&opt, &optparser)) {
57
95
  if (!opt.spec) {
58
96
  cli_opt_status_fprint(stderr, PROGRAM_NAME, &opt);
59
- cli_opt_usage_fprint(stderr, PROGRAM_NAME, NULL, cli_common_opts);
97
+ cli_opt_usage_fprint(stderr, PROGRAM_NAME, NULL, cli_common_opts, CLI_OPT_USAGE_SHOW_HIDDEN);
60
98
  ret = CLI_EXIT_USAGE;
61
99
  goto done;
62
100
  }
@@ -66,8 +104,7 @@ int main(int argc, char **argv)
66
104
  * remaining arguments as args for the command itself.
67
105
  */
68
106
  if (command) {
69
- args = &argv[optparser.idx];
70
- args_len = (int)(argc - optparser.idx);
107
+ reorder_args(argv, optparser.idx);
71
108
  break;
72
109
  }
73
110
  }
@@ -77,19 +114,10 @@ int main(int argc, char **argv)
77
114
  goto done;
78
115
  }
79
116
 
80
- /*
81
- * If `--help <command>` is specified, delegate to that command's
82
- * `--help` option. If no command is specified, run the `help`
83
- * command. Do this by updating the args to emulate that behavior.
84
- */
85
- if (!command || show_help) {
86
- help_args[0] = command ? (char *)command : "help";
87
- help_args[1] = command ? "--help" : NULL;
88
- help_args_len = command ? 2 : 1;
89
-
90
- command = help_args[0];
91
- args = help_args;
92
- args_len = help_args_len;
117
+ if (!command) {
118
+ help_args(&argc, argv);
119
+ ret = cmd_help(argc, argv);
120
+ goto done;
93
121
  }
94
122
 
95
123
  if ((cmd = cli_cmd_spec_byname(command)) == NULL) {
@@ -98,7 +126,7 @@ int main(int argc, char **argv)
98
126
  goto done;
99
127
  }
100
128
 
101
- ret = cmd->fn(args_len, args);
129
+ ret = cmd->fn(argc - 1, &argv[1]);
102
130
 
103
131
  done:
104
132
  git_libgit2_shutdown();
@@ -10,7 +10,7 @@
10
10
  * This file was produced by using the `rename.pl` script included with
11
11
  * adopt. The command-line specified was:
12
12
  *
13
- * ./rename.pl cli_opt --filename=opt --include=cli.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
13
+ * ./rename.pl cli_opt --filename=opt --include=common.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
14
14
  */
15
15
 
16
16
  #include <stdlib.h>
@@ -19,7 +19,11 @@
19
19
  #include <limits.h>
20
20
  #include <assert.h>
21
21
 
22
- #include "cli.h"
22
+ #if defined(__sun) || defined(__illumos__) || defined(__CYGWIN__)
23
+ # include <alloca.h>
24
+ #endif
25
+
26
+ #include "common.h"
23
27
  #include "opt.h"
24
28
 
25
29
  #ifdef _WIN32
@@ -46,7 +50,7 @@ GIT_INLINE(const cli_opt_spec *) spec_for_long(
46
50
  const char *arg)
47
51
  {
48
52
  const cli_opt_spec *spec;
49
- char *eql;
53
+ const char *eql;
50
54
  size_t eql_pos;
51
55
 
52
56
  eql = strchr(arg, '=');
@@ -73,7 +77,7 @@ GIT_INLINE(const cli_opt_spec *) spec_for_long(
73
77
 
74
78
  /* Handle --option=value arguments */
75
79
  if (spec->type == CLI_OPT_TYPE_VALUE &&
76
- eql &&
80
+ spec->name && eql &&
77
81
  strncmp(arg, spec->name, eql_pos) == 0 &&
78
82
  spec->name[eql_pos] == '\0') {
79
83
  *has_value = 1;
@@ -355,7 +359,7 @@ GIT_INLINE(const cli_opt_spec *) spec_for_sort(
355
359
  const char *arg)
356
360
  {
357
361
  int is_negated, has_value = 0;
358
- const char *value;
362
+ const char *value = NULL;
359
363
  const cli_opt_spec *spec = NULL;
360
364
  size_t idx = 0;
361
365
 
@@ -575,6 +579,28 @@ cli_opt_status_t cli_opt_parse(
575
579
  return validate_required(opt, specs, given_specs);
576
580
  }
577
581
 
582
+ int cli_opt_foreach(
583
+ const cli_opt_spec specs[],
584
+ char **args,
585
+ size_t args_len,
586
+ unsigned int flags,
587
+ int (*callback)(cli_opt *, void *),
588
+ void *callback_data)
589
+ {
590
+ cli_opt_parser parser;
591
+ cli_opt opt;
592
+ int ret;
593
+
594
+ cli_opt_parser_init(&parser, specs, args, args_len, flags);
595
+
596
+ while (cli_opt_parser_next(&opt, &parser)) {
597
+ if ((ret = callback(&opt, callback_data)) != 0)
598
+ return ret;
599
+ }
600
+
601
+ return 0;
602
+ }
603
+
578
604
  static int spec_name_fprint(FILE *file, const cli_opt_spec *spec)
579
605
  {
580
606
  int error;
@@ -10,7 +10,7 @@
10
10
  * This file was produced by using the `rename.pl` script included with
11
11
  * adopt. The command-line specified was:
12
12
  *
13
- * ./rename.pl cli_opt --filename=opt --include=cli.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
13
+ * ./rename.pl cli_opt --filename=opt --include=common.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
14
14
  */
15
15
 
16
16
  #ifndef CLI_opt_h__
@@ -275,8 +275,8 @@ typedef struct cli_opt_parser {
275
275
  size_t arg_idx;
276
276
  size_t in_args;
277
277
  size_t in_short;
278
- int needs_sort : 1,
279
- in_literal : 1;
278
+ unsigned int needs_sort : 1,
279
+ in_literal : 1;
280
280
  } cli_opt_parser;
281
281
 
282
282
  /**
@@ -300,6 +300,24 @@ cli_opt_status_t cli_opt_parse(
300
300
  size_t args_len,
301
301
  unsigned int flags);
302
302
 
303
+ /**
304
+ * Quickly executes the given callback for each argument.
305
+ *
306
+ * @param specs A NULL-terminated array of `cli_opt_spec`s that can be parsed
307
+ * @param args The arguments that will be parsed
308
+ * @param args_len The length of arguments to be parsed
309
+ * @param flags The `cli_opt_flag_t flags for parsing
310
+ * @param callback The callback to invoke for each specified option
311
+ * @param callback_data Data to be provided to the callback
312
+ */
313
+ int cli_opt_foreach(
314
+ const cli_opt_spec specs[],
315
+ char **args,
316
+ size_t args_len,
317
+ unsigned int flags,
318
+ int (*callback)(cli_opt *, void *),
319
+ void *callback_data);
320
+
303
321
  /**
304
322
  * Initializes a parser that parses the given arguments according to the
305
323
  * given specifications.