rugged 1.4.5 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (424) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +1 -0
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_remote.c +10 -10
  7. data/ext/rugged/rugged_repo.c +2 -7
  8. data/ext/rugged/rugged_settings.c +5 -0
  9. data/lib/rugged/tree.rb +4 -0
  10. data/lib/rugged/version.rb +1 -1
  11. data/vendor/libgit2/CMakeLists.txt +16 -3
  12. data/vendor/libgit2/COPYING +40 -0
  13. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  14. data/vendor/libgit2/cmake/FindPCRE.cmake +3 -4
  15. data/vendor/libgit2/cmake/FindPCRE2.cmake +1 -1
  16. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +1 -1
  17. data/vendor/libgit2/cmake/SelectHashes.cmake +62 -14
  18. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
  19. data/vendor/libgit2/include/git2/branch.h +2 -2
  20. data/vendor/libgit2/include/git2/common.h +11 -0
  21. data/vendor/libgit2/include/git2/config.h +6 -6
  22. data/vendor/libgit2/include/git2/deprecated.h +2 -0
  23. data/vendor/libgit2/include/git2/errors.h +17 -3
  24. data/vendor/libgit2/include/git2/merge.h +1 -1
  25. data/vendor/libgit2/include/git2/status.h +5 -2
  26. data/vendor/libgit2/include/git2/sys/remote.h +15 -0
  27. data/vendor/libgit2/include/git2/sys/transport.h +9 -5
  28. data/vendor/libgit2/include/git2/version.h +27 -6
  29. data/vendor/libgit2/src/CMakeLists.txt +104 -214
  30. data/vendor/libgit2/src/README.md +12 -0
  31. data/vendor/libgit2/src/cli/CMakeLists.txt +53 -0
  32. data/vendor/libgit2/src/cli/README.md +26 -0
  33. data/vendor/libgit2/src/cli/cli.h +20 -0
  34. data/vendor/libgit2/src/cli/cmd.c +21 -0
  35. data/vendor/libgit2/src/cli/cmd.h +33 -0
  36. data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
  37. data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
  38. data/vendor/libgit2/src/cli/cmd_hash_object.c +135 -0
  39. data/vendor/libgit2/src/cli/cmd_help.c +86 -0
  40. data/vendor/libgit2/src/cli/error.h +51 -0
  41. data/vendor/libgit2/src/cli/main.c +106 -0
  42. data/vendor/libgit2/src/cli/opt.c +669 -0
  43. data/vendor/libgit2/src/cli/opt.h +349 -0
  44. data/vendor/libgit2/src/cli/opt_usage.c +194 -0
  45. data/vendor/libgit2/src/cli/opt_usage.h +35 -0
  46. data/vendor/libgit2/src/cli/progress.c +345 -0
  47. data/vendor/libgit2/src/cli/progress.h +117 -0
  48. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  49. data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
  50. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  51. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  52. data/vendor/libgit2/src/features.h.in +9 -0
  53. data/vendor/libgit2/src/libgit2/CMakeLists.txt +131 -0
  54. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +1 -1
  55. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +14 -9
  56. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +20 -17
  57. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +1 -1
  58. data/vendor/libgit2/src/libgit2/common.h +55 -0
  59. data/vendor/libgit2/src/{config.c → libgit2/config.c} +2 -2
  60. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +1 -1
  61. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +1 -0
  62. data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
  63. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +31 -1
  64. data/vendor/libgit2/src/{index.c → libgit2/index.c} +6 -6
  65. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +2 -2
  66. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +3 -3
  67. data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +5 -0
  68. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +20 -23
  69. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +2 -1
  70. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +9 -9
  71. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +1 -1
  72. data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +0 -1
  73. data/vendor/libgit2/src/{object.c → libgit2/object.c} +1 -0
  74. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +2 -2
  75. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +2 -21
  76. data/vendor/libgit2/src/{oid.h → libgit2/oid.h} +35 -2
  77. data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
  78. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +24 -18
  79. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +3 -2
  80. data/vendor/libgit2/src/{path.c → libgit2/path.c} +1 -0
  81. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +11 -1
  82. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +6 -2
  83. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +1 -1
  84. data/vendor/libgit2/src/{remote.h → libgit2/remote.h} +1 -1
  85. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +1 -0
  86. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +15 -5
  87. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +1 -1
  88. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +12 -0
  89. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +91 -326
  90. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +1 -1
  91. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +16 -23
  92. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +1 -1
  93. data/vendor/libgit2/src/util/CMakeLists.txt +74 -0
  94. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
  95. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  96. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  97. data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
  98. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  99. data/vendor/libgit2/src/{date.c → util/date.c} +4 -3
  100. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +1 -1
  101. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +1 -1
  102. data/vendor/libgit2/src/{fs_path.c → util/fs_path.c} +17 -11
  103. data/vendor/libgit2/src/{fs_path.h → util/fs_path.h} +1 -1
  104. data/vendor/libgit2/src/{futils.c → util/futils.c} +44 -2
  105. data/vendor/libgit2/src/{futils.h → util/futils.h} +2 -1
  106. data/vendor/libgit2/src/{common.h → util/git2_util.h} +13 -59
  107. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  108. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  109. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +1 -1
  110. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  111. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.c +55 -0
  112. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  113. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.c +46 -0
  114. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  115. data/vendor/libgit2/src/util/hash/openssl.c +194 -0
  116. data/vendor/libgit2/src/util/hash/openssl.h +45 -0
  117. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +355 -0
  118. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  119. data/vendor/libgit2/src/util/hash/sha.h +70 -0
  120. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  121. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  122. data/vendor/libgit2/src/{hash.c → util/hash.c} +17 -1
  123. data/vendor/libgit2/src/{hash.h → util/hash.h} +5 -3
  124. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  125. data/vendor/libgit2/src/{net.c → util/net.c} +0 -1
  126. data/vendor/libgit2/src/{net.h → util/net.h} +1 -1
  127. data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
  128. data/vendor/libgit2/src/{posix.h → util/posix.h} +1 -1
  129. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +1 -1
  130. data/vendor/libgit2/src/{rand.c → util/rand.c} +7 -3
  131. data/vendor/libgit2/src/{rand.h → util/rand.h} +1 -1
  132. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  133. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  134. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  135. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +1 -1
  136. data/vendor/libgit2/src/{str.h → util/str.h} +1 -1
  137. data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
  138. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  139. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  140. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -1
  141. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -1
  142. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -1
  143. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  144. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  145. data/vendor/libgit2/src/{util.c → util/util.c} +1 -1
  146. data/vendor/libgit2/src/{util.h → util/util.h} +1 -1
  147. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  148. data/vendor/libgit2/src/{vector.h → util/vector.h} +1 -1
  149. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  150. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  151. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  152. data/vendor/libgit2/src/{win32 → util/win32}/findfile.h +1 -1
  153. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  154. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +1 -1
  155. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -1
  156. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +1 -1
  157. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  158. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  159. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  160. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
  161. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +1 -1
  162. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  163. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  164. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +1 -1
  165. metadata +390 -361
  166. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  167. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  168. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  169. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  170. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  171. data/vendor/libgit2/src/hash/sha1.h +0 -40
  172. /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  173. /data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +0 -0
  174. /data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +0 -0
  175. /data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +0 -0
  176. /data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +0 -0
  177. /data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +0 -0
  178. /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  179. /data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +0 -0
  180. /data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +0 -0
  181. /data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +0 -0
  182. /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
  183. /data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +0 -0
  184. /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
  185. /data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +0 -0
  186. /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  187. /data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +0 -0
  188. /data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +0 -0
  189. /data/vendor/libgit2/src/{buf.c → libgit2/buf.c} +0 -0
  190. /data/vendor/libgit2/src/{buf.h → libgit2/buf.h} +0 -0
  191. /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
  192. /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
  193. /data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +0 -0
  194. /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
  195. /data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +0 -0
  196. /data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +0 -0
  197. /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
  198. /data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +0 -0
  199. /data/vendor/libgit2/src/{commit.h → libgit2/commit.h} +0 -0
  200. /data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +0 -0
  201. /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
  202. /data/vendor/libgit2/src/{config.h → libgit2/config.h} +0 -0
  203. /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
  204. /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
  205. /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
  206. /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
  207. /data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +0 -0
  208. /data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +0 -0
  209. /data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +0 -0
  210. /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  211. /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
  212. /data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +0 -0
  213. /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  214. /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  215. /data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +0 -0
  216. /data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +0 -0
  217. /data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +0 -0
  218. /data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +0 -0
  219. /data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +0 -0
  220. /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  221. /data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +0 -0
  222. /data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +0 -0
  223. /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
  224. /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  225. /data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +0 -0
  226. /data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +0 -0
  227. /data/vendor/libgit2/src/{diff_stats.h → libgit2/diff_stats.h} +0 -0
  228. /data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +0 -0
  229. /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  230. /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
  231. /data/vendor/libgit2/src/{email.c → libgit2/email.c} +0 -0
  232. /data/vendor/libgit2/src/{email.h → libgit2/email.h} +0 -0
  233. /data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +0 -0
  234. /data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +0 -0
  235. /data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +0 -0
  236. /data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +0 -0
  237. /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  238. /data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +0 -0
  239. /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
  240. /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
  241. /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  242. /data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +0 -0
  243. /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
  244. /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
  245. /data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +0 -0
  246. /data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +0 -0
  247. /data/vendor/libgit2/src/{index.h → libgit2/index.h} +0 -0
  248. /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  249. /data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +0 -0
  250. /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
  251. /data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +0 -0
  252. /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  253. /data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +0 -0
  254. /data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +0 -0
  255. /data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +0 -0
  256. /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  257. /data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +0 -0
  258. /data/vendor/libgit2/src/{message.c → libgit2/message.c} +0 -0
  259. /data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +0 -0
  260. /data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +0 -0
  261. /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  262. /data/vendor/libgit2/src/{object.h → libgit2/object.h} +0 -0
  263. /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  264. /data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +0 -0
  265. /data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +0 -0
  266. /data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +0 -0
  267. /data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +0 -0
  268. /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
  269. /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
  270. /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
  271. /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
  272. /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
  273. /data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +0 -0
  274. /data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +0 -0
  275. /data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +0 -0
  276. /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
  277. /data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +0 -0
  278. /data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +0 -0
  279. /data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +0 -0
  280. /data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +0 -0
  281. /data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +0 -0
  282. /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  283. /data/vendor/libgit2/src/{path.h → libgit2/path.h} +0 -0
  284. /data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +0 -0
  285. /data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +0 -0
  286. /data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +0 -0
  287. /data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +0 -0
  288. /data/vendor/libgit2/src/{push.c → libgit2/push.c} +0 -0
  289. /data/vendor/libgit2/src/{push.h → libgit2/push.h} +0 -0
  290. /data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +0 -0
  291. /data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +0 -0
  292. /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  293. /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  294. /data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +0 -0
  295. /data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +0 -0
  296. /data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +0 -0
  297. /data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +0 -0
  298. /data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +0 -0
  299. /data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +0 -0
  300. /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  301. /data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +0 -0
  302. /data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +0 -0
  303. /data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +0 -0
  304. /data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +0 -0
  305. /data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +0 -0
  306. /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
  307. /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
  308. /data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +0 -0
  309. /data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +0 -0
  310. /data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +0 -0
  311. /data/vendor/libgit2/src/{status.c → libgit2/status.c} +0 -0
  312. /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  313. /data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +0 -0
  314. /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  315. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +0 -0
  316. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  317. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +0 -0
  318. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
  319. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +0 -0
  320. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +0 -0
  321. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  322. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  323. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  324. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  325. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +0 -0
  326. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
  327. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
  328. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  329. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
  330. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  331. /data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +0 -0
  332. /data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +0 -0
  333. /data/vendor/libgit2/src/{sysdir.c → libgit2/sysdir.c} +0 -0
  334. /data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +0 -0
  335. /data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +0 -0
  336. /data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +0 -0
  337. /data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +0 -0
  338. /data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +0 -0
  339. /data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +0 -0
  340. /data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +0 -0
  341. /data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +0 -0
  342. /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
  343. /data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +0 -0
  344. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +0 -0
  345. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +0 -0
  346. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +0 -0
  347. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
  348. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +0 -0
  349. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -0
  350. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
  351. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  352. /data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +0 -0
  353. /data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +0 -0
  354. /data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +0 -0
  355. /data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +0 -0
  356. /data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +0 -0
  357. /data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +0 -0
  358. /data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +0 -0
  359. /data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +0 -0
  360. /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
  361. /data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +0 -0
  362. /data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +0 -0
  363. /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  364. /data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +0 -0
  365. /data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +0 -0
  366. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/git-xdiff.h +0 -0
  367. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +0 -0
  368. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +0 -0
  369. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
  370. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +0 -0
  371. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
  372. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +0 -0
  373. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +0 -0
  374. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
  375. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +0 -0
  376. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +0 -0
  377. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +0 -0
  378. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
  379. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
  380. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +0 -0
  381. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
  382. /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
  383. /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
  384. /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
  385. /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
  386. /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
  387. /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  388. /data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +0 -0
  389. /data/vendor/libgit2/src/{date.h → util/date.h} +0 -0
  390. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +0 -0
  391. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  392. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  393. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  394. /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
  395. /data/vendor/libgit2/src/{khash.h → util/khash.h} +0 -0
  396. /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
  397. /data/vendor/libgit2/src/{posix.c → util/posix.c} +0 -0
  398. /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  399. /data/vendor/libgit2/src/{regexp.c → util/regexp.c} +0 -0
  400. /data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +0 -0
  401. /data/vendor/libgit2/src/{str.c → util/str.c} +0 -0
  402. /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
  403. /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  404. /data/vendor/libgit2/src/{thread.h → util/thread.h} +0 -0
  405. /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  406. /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  407. /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
  408. /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  409. /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  410. /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
  411. /data/vendor/libgit2/src/{win32 → util/win32}/findfile.c +0 -0
  412. /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  413. /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  414. /data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +0 -0
  415. /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  416. /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  417. /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
  418. /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  419. /data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +0 -0
  420. /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  421. /data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +0 -0
  422. /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
  423. /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
  424. /data/vendor/libgit2/src/{zstream.c → util/zstream.c} +0 -0
@@ -0,0 +1,349 @@
1
+ /*
2
+ * Copyright (c), Edward Thomson <ethomson@edwardthomson.com>
3
+ * All rights reserved.
4
+ *
5
+ * This file is part of adopt, distributed under the MIT license.
6
+ * For full terms and conditions, see the included LICENSE file.
7
+ *
8
+ * THIS FILE IS AUTOMATICALLY GENERATED; DO NOT EDIT.
9
+ *
10
+ * This file was produced by using the `rename.pl` script included with
11
+ * adopt. The command-line specified was:
12
+ *
13
+ * ./rename.pl cli_opt --filename=opt --include=cli.h --inline=GIT_INLINE --header-guard=CLI_opt_h__ --lowercase-status --without-usage
14
+ */
15
+
16
+ #ifndef CLI_opt_h__
17
+ #define CLI_opt_h__
18
+
19
+ #include <stdio.h>
20
+ #include <stdint.h>
21
+
22
+ /**
23
+ * The type of argument to be parsed.
24
+ */
25
+ typedef enum {
26
+ CLI_OPT_TYPE_NONE = 0,
27
+
28
+ /**
29
+ * An option that, when specified, sets a given value to true.
30
+ * This is useful for options like "--debug". A negation
31
+ * option (beginning with "no-") is implicitly specified; for
32
+ * example "--no-debug". The `value` pointer in the returned
33
+ * option will be set to `1` when this is specified, and set to
34
+ * `0` when the negation "no-" option is specified.
35
+ */
36
+ CLI_OPT_TYPE_BOOL,
37
+
38
+ /**
39
+ * An option that, when specified, sets the given `value` pointer
40
+ * to the specified `switch_value`. This is useful for booleans
41
+ * where you do not want the implicit negation that comes with an
42
+ * `CLI_OPT_TYPE_BOOL`, or for switches that multiplex a value, like
43
+ * setting a mode. For example, `--read` may set the `value` to
44
+ * `MODE_READ` and `--write` may set the `value` to `MODE_WRITE`.
45
+ */
46
+ CLI_OPT_TYPE_SWITCH,
47
+
48
+ /**
49
+ * An option that, when specified, increments the given
50
+ * `value` by the given `switch_value`. This can be specified
51
+ * multiple times to continue to increment the `value`.
52
+ * (For example, "-vvv" to set verbosity to 3.)
53
+ */
54
+ CLI_OPT_TYPE_ACCUMULATOR,
55
+
56
+ /**
57
+ * An option that takes a value, for example `-n value`,
58
+ * `-nvalue`, `--name value` or `--name=value`.
59
+ */
60
+ CLI_OPT_TYPE_VALUE,
61
+
62
+ /**
63
+ * A bare "--" that indicates that arguments following this are
64
+ * literal. This allows callers to specify things that might
65
+ * otherwise look like options, for example to operate on a file
66
+ * named "-rf" then you can invoke "program -- -rf" to treat
67
+ * "-rf" as an argument not an option.
68
+ */
69
+ CLI_OPT_TYPE_LITERAL,
70
+
71
+ /**
72
+ * A single argument, not an option. When options are exhausted,
73
+ * arguments will be matches in the order that they're specified
74
+ * in the spec list. For example, if two `CLI_OPT_TYPE_ARGS` are
75
+ * specified, `input_file` and `output_file`, then the first bare
76
+ * argument on the command line will be `input_file` and the
77
+ * second will be `output_file`.
78
+ */
79
+ CLI_OPT_TYPE_ARG,
80
+
81
+ /**
82
+ * A collection of arguments. This is useful when you want to take
83
+ * a list of arguments, for example, multiple paths. When specified,
84
+ * the value will be set to the first argument in the list.
85
+ */
86
+ CLI_OPT_TYPE_ARGS,
87
+ } cli_opt_type_t;
88
+
89
+ /**
90
+ * Additional information about an option, including parsing
91
+ * restrictions and usage information to be displayed to the end-user.
92
+ */
93
+ typedef enum {
94
+ /** Defaults for the argument. */
95
+ CLI_OPT_USAGE_DEFAULT = 0,
96
+
97
+ /** This argument is required. */
98
+ CLI_OPT_USAGE_REQUIRED = (1u << 0),
99
+
100
+ /**
101
+ * This is a multiple choice argument, combined with the previous
102
+ * argument. For example, when the previous argument is `-f` and
103
+ * this optional is applied to an argument of type `-b` then one
104
+ * of `-f` or `-b` may be specified.
105
+ */
106
+ CLI_OPT_USAGE_CHOICE = (1u << 1),
107
+
108
+ /**
109
+ * This argument short-circuits the remainder of parsing.
110
+ * Useful for arguments like `--help`.
111
+ */
112
+ CLI_OPT_USAGE_STOP_PARSING = (1u << 2),
113
+
114
+ /** The argument's value is optional ("-n" or "-n foo") */
115
+ CLI_OPT_USAGE_VALUE_OPTIONAL = (1u << 3),
116
+
117
+ /** This argument should not be displayed in usage. */
118
+ CLI_OPT_USAGE_HIDDEN = (1u << 4),
119
+
120
+ /** In usage, show the long format instead of the abbreviated format. */
121
+ CLI_OPT_USAGE_SHOW_LONG = (1u << 5),
122
+ } cli_opt_usage_t;
123
+
124
+ typedef enum {
125
+ /** Default parsing behavior. */
126
+ CLI_OPT_PARSE_DEFAULT = 0,
127
+
128
+ /**
129
+ * Parse with GNU `getopt_long` style behavior, where options can
130
+ * be intermixed with arguments at any position (for example,
131
+ * "file1 --help file2".) Like `getopt_long`, this can mutate the
132
+ * arguments given.
133
+ */
134
+ CLI_OPT_PARSE_GNU = (1u << 0),
135
+
136
+ /**
137
+ * Force GNU `getopt_long` style behavior; the `POSIXLY_CORRECT`
138
+ * environment variable is ignored.
139
+ */
140
+ CLI_OPT_PARSE_FORCE_GNU = (1u << 1),
141
+ } cli_opt_flag_t;
142
+
143
+ /** Specification for an available option. */
144
+ typedef struct cli_opt_spec {
145
+ /** Type of option expected. */
146
+ cli_opt_type_t type;
147
+
148
+ /** Name of the long option. */
149
+ const char *name;
150
+
151
+ /** The alias is the short (one-character) option alias. */
152
+ const char alias;
153
+
154
+ /**
155
+ * If this spec is of type `CLI_OPT_TYPE_BOOL`, this is a pointer
156
+ * to an `int` that will be set to `1` if the option is specified.
157
+ *
158
+ * If this spec is of type `CLI_OPT_TYPE_SWITCH`, this is a pointer
159
+ * to an `int` that will be set to the opt's `switch_value` (below)
160
+ * when this option is specified.
161
+ *
162
+ * If this spec is of type `CLI_OPT_TYPE_ACCUMULATOR`, this is a
163
+ * pointer to an `int` that will be incremented by the opt's
164
+ * `switch_value` (below). If no `switch_value` is provided then
165
+ * the value will be incremented by 1.
166
+ *
167
+ * If this spec is of type `CLI_OPT_TYPE_VALUE`,
168
+ * `CLI_OPT_TYPE_VALUE_OPTIONAL`, or `CLI_OPT_TYPE_ARG`, this is
169
+ * a pointer to a `char *` that will be set to the value
170
+ * specified on the command line.
171
+ *
172
+ * If this spec is of type `CLI_OPT_TYPE_ARGS`, this is a pointer
173
+ * to a `char **` that will be set to the remaining values
174
+ * specified on the command line.
175
+ */
176
+ void *value;
177
+
178
+ /**
179
+ * If this spec is of type `CLI_OPT_TYPE_SWITCH`, this is the value
180
+ * to set in the option's `value` pointer when it is specified. If
181
+ * this spec is of type `CLI_OPT_TYPE_ACCUMULATOR`, this is the value
182
+ * to increment in the option's `value` pointer when it is
183
+ * specified. This is ignored for other opt types.
184
+ */
185
+ int switch_value;
186
+
187
+ /**
188
+ * Optional usage flags that change parsing behavior and how
189
+ * usage information is shown to the end-user.
190
+ */
191
+ uint32_t usage;
192
+
193
+ /**
194
+ * The name of the value, provided when creating usage information.
195
+ * This is required only for the functions that display usage
196
+ * information and only when a spec is of type `CLI_OPT_TYPE_VALUE,
197
+ * `CLI_OPT_TYPE_ARG` or `CLI_OPT_TYPE_ARGS``.
198
+ */
199
+ const char *value_name;
200
+
201
+ /**
202
+ * Optional short description of the option to display to the
203
+ * end-user. This is only used when creating usage information.
204
+ */
205
+ const char *help;
206
+ } cli_opt_spec;
207
+
208
+ /** Return value for `cli_opt_parser_next`. */
209
+ typedef enum {
210
+ /** Parsing is complete; there are no more arguments. */
211
+ CLI_OPT_STATUS_DONE = 0,
212
+
213
+ /**
214
+ * This argument was parsed correctly; the `opt` structure is
215
+ * populated and the value pointer has been set.
216
+ */
217
+ CLI_OPT_STATUS_OK = 1,
218
+
219
+ /**
220
+ * The argument could not be parsed correctly, it does not match
221
+ * any of the specifications provided.
222
+ */
223
+ CLI_OPT_STATUS_UNKNOWN_OPTION = 2,
224
+
225
+ /**
226
+ * The argument matched a spec of type `CLI_OPT_VALUE`, but no value
227
+ * was provided.
228
+ */
229
+ CLI_OPT_STATUS_MISSING_VALUE = 3,
230
+
231
+ /** A required argument was not provided. */
232
+ CLI_OPT_STATUS_MISSING_ARGUMENT = 4,
233
+ } cli_opt_status_t;
234
+
235
+ /** An option provided on the command-line. */
236
+ typedef struct cli_opt {
237
+ /** The status of parsing the most recent argument. */
238
+ cli_opt_status_t status;
239
+
240
+ /**
241
+ * The specification that was provided on the command-line, or
242
+ * `NULL` if the argument did not match an `cli_opt_spec`.
243
+ */
244
+ const cli_opt_spec *spec;
245
+
246
+ /**
247
+ * The argument as it was specified on the command-line, including
248
+ * dashes, eg, `-f` or `--foo`.
249
+ */
250
+ char *arg;
251
+
252
+ /**
253
+ * If the spec is of type `CLI_OPT_VALUE` or `CLI_OPT_VALUE_OPTIONAL`,
254
+ * this is the value provided to the argument.
255
+ */
256
+ char *value;
257
+
258
+ /**
259
+ * If the argument is of type `CLI_OPT_ARGS`, this is the number of
260
+ * arguments remaining. This value is persisted even when parsing
261
+ * is complete and `status` == `CLI_OPT_STATUS_DONE`.
262
+ */
263
+ size_t args_len;
264
+ } cli_opt;
265
+
266
+ /* The internal parser state. Callers should not modify this structure. */
267
+ typedef struct cli_opt_parser {
268
+ const cli_opt_spec *specs;
269
+ char **args;
270
+ size_t args_len;
271
+ unsigned int flags;
272
+
273
+ /* Parser state */
274
+ size_t idx;
275
+ size_t arg_idx;
276
+ size_t in_args;
277
+ size_t in_short;
278
+ int needs_sort : 1,
279
+ in_literal : 1;
280
+ } cli_opt_parser;
281
+
282
+ /**
283
+ * Parses all the command-line arguments and updates all the options using
284
+ * the pointers provided. Parsing stops on any invalid argument and
285
+ * information about the failure will be provided in the opt argument.
286
+ *
287
+ * This is the simplest way to parse options; it handles the initialization
288
+ * (`parser_init`) and looping (`parser_next`).
289
+ *
290
+ * @param opt The The `cli_opt` information that failed parsing
291
+ * @param specs A NULL-terminated array of `cli_opt_spec`s that can be parsed
292
+ * @param args The arguments that will be parsed
293
+ * @param args_len The length of arguments to be parsed
294
+ * @param flags The `cli_opt_flag_t flags for parsing
295
+ */
296
+ cli_opt_status_t cli_opt_parse(
297
+ cli_opt *opt,
298
+ const cli_opt_spec specs[],
299
+ char **args,
300
+ size_t args_len,
301
+ unsigned int flags);
302
+
303
+ /**
304
+ * Initializes a parser that parses the given arguments according to the
305
+ * given specifications.
306
+ *
307
+ * @param parser The `cli_opt_parser` that will be initialized
308
+ * @param specs A NULL-terminated array of `cli_opt_spec`s that can be parsed
309
+ * @param args The arguments that will be parsed
310
+ * @param args_len The length of arguments to be parsed
311
+ * @param flags The `cli_opt_flag_t flags for parsing
312
+ */
313
+ void cli_opt_parser_init(
314
+ cli_opt_parser *parser,
315
+ const cli_opt_spec specs[],
316
+ char **args,
317
+ size_t args_len,
318
+ unsigned int flags);
319
+
320
+ /**
321
+ * Parses the next command-line argument and places the information about
322
+ * the argument into the given `opt` data.
323
+ *
324
+ * @param opt The `cli_opt` information parsed from the argument
325
+ * @param parser An `cli_opt_parser` that has been initialized with
326
+ * `cli_opt_parser_init`
327
+ * @return true if the caller should continue iterating, or 0 if there are
328
+ * no arguments left to process.
329
+ */
330
+ cli_opt_status_t cli_opt_parser_next(
331
+ cli_opt *opt,
332
+ cli_opt_parser *parser);
333
+
334
+ /**
335
+ * Prints the status after parsing the most recent argument. This is
336
+ * useful for printing an error message when an unknown argument was
337
+ * specified, or when an argument was specified without a value.
338
+ *
339
+ * @param file The file to print information to
340
+ * @param command The name of the command to use when printing (optional)
341
+ * @param opt The option that failed to parse
342
+ * @return 0 on success, -1 on failure
343
+ */
344
+ int cli_opt_status_fprint(
345
+ FILE *file,
346
+ const char *command,
347
+ const cli_opt *opt);
348
+
349
+ #endif /* CLI_opt_h__ */
@@ -0,0 +1,194 @@
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 "cli.h"
9
+ #include "str.h"
10
+
11
+ static int print_spec_name(git_str *out, const cli_opt_spec *spec)
12
+ {
13
+ if (spec->type == CLI_OPT_TYPE_VALUE && spec->alias &&
14
+ !(spec->usage & CLI_OPT_USAGE_VALUE_OPTIONAL) &&
15
+ !(spec->usage & CLI_OPT_USAGE_SHOW_LONG))
16
+ return git_str_printf(out, "-%c <%s>", spec->alias, spec->value_name);
17
+ if (spec->type == CLI_OPT_TYPE_VALUE && spec->alias &&
18
+ !(spec->usage & CLI_OPT_USAGE_SHOW_LONG))
19
+ return git_str_printf(out, "-%c [<%s>]", spec->alias, spec->value_name);
20
+ if (spec->type == CLI_OPT_TYPE_VALUE &&
21
+ !(spec->usage & CLI_OPT_USAGE_VALUE_OPTIONAL))
22
+ return git_str_printf(out, "--%s[=<%s>]", spec->name, spec->value_name);
23
+ if (spec->type == CLI_OPT_TYPE_VALUE)
24
+ return git_str_printf(out, "--%s=<%s>", spec->name, spec->value_name);
25
+ if (spec->type == CLI_OPT_TYPE_ARG)
26
+ return git_str_printf(out, "<%s>", spec->value_name);
27
+ if (spec->type == CLI_OPT_TYPE_ARGS)
28
+ return git_str_printf(out, "<%s>...", spec->value_name);
29
+ if (spec->type == CLI_OPT_TYPE_LITERAL)
30
+ return git_str_printf(out, "--");
31
+ if (spec->alias && !(spec->usage & CLI_OPT_USAGE_SHOW_LONG))
32
+ return git_str_printf(out, "-%c", spec->alias);
33
+ if (spec->name)
34
+ return git_str_printf(out, "--%s", spec->name);
35
+
36
+ GIT_ASSERT(0);
37
+ }
38
+
39
+ /*
40
+ * This is similar to adopt's function, but modified to understand
41
+ * that we have a command ("git") and a "subcommand" ("checkout").
42
+ * It also understands a terminal's line length and wrap appropriately,
43
+ * using a `git_str` for storage.
44
+ */
45
+ int cli_opt_usage_fprint(
46
+ FILE *file,
47
+ const char *command,
48
+ const char *subcommand,
49
+ const cli_opt_spec specs[])
50
+ {
51
+ git_str usage = GIT_BUF_INIT, opt = GIT_BUF_INIT;
52
+ const cli_opt_spec *spec;
53
+ size_t i, prefixlen, linelen;
54
+ bool choice = false, next_choice = false, optional = false;
55
+ int error;
56
+
57
+ /* TODO: query actual console width. */
58
+ int console_width = 80;
59
+
60
+ if ((error = git_str_printf(&usage, "usage: %s", command)) < 0)
61
+ goto done;
62
+
63
+ if (subcommand &&
64
+ (error = git_str_printf(&usage, " %s", subcommand)) < 0)
65
+ goto done;
66
+
67
+ linelen = git_str_len(&usage);
68
+ prefixlen = linelen + 1;
69
+
70
+ for (spec = specs; spec->type; ++spec) {
71
+ if (!choice)
72
+ optional = !(spec->usage & CLI_OPT_USAGE_REQUIRED);
73
+
74
+ next_choice = !!((spec + 1)->usage & CLI_OPT_USAGE_CHOICE);
75
+
76
+ if (spec->usage & CLI_OPT_USAGE_HIDDEN)
77
+ continue;
78
+
79
+ if (choice)
80
+ git_str_putc(&opt, '|');
81
+ else
82
+ git_str_clear(&opt);
83
+
84
+ if (optional && !choice)
85
+ git_str_putc(&opt, '[');
86
+ if (!optional && !choice && next_choice)
87
+ git_str_putc(&opt, '(');
88
+
89
+ if ((error = print_spec_name(&opt, spec)) < 0)
90
+ goto done;
91
+
92
+ if (!optional && choice && !next_choice)
93
+ git_str_putc(&opt, ')');
94
+ else if (optional && !next_choice)
95
+ git_str_putc(&opt, ']');
96
+
97
+ if ((choice = next_choice))
98
+ continue;
99
+
100
+ if (git_str_oom(&opt)) {
101
+ error = -1;
102
+ goto done;
103
+ }
104
+
105
+ if (linelen > prefixlen &&
106
+ console_width > 0 &&
107
+ linelen + git_str_len(&opt) + 1 > (size_t)console_width) {
108
+ git_str_putc(&usage, '\n');
109
+
110
+ for (i = 0; i < prefixlen; i++)
111
+ git_str_putc(&usage, ' ');
112
+
113
+ linelen = prefixlen;
114
+ } else {
115
+ git_str_putc(&usage, ' ');
116
+ linelen += git_str_len(&opt) + 1;
117
+ }
118
+
119
+ git_str_puts(&usage, git_str_cstr(&opt));
120
+
121
+ if (git_str_oom(&usage)) {
122
+ error = -1;
123
+ goto done;
124
+ }
125
+ }
126
+
127
+ error = fprintf(file, "%s\n", git_str_cstr(&usage));
128
+
129
+ done:
130
+ error = (error < 0) ? -1 : 0;
131
+
132
+ git_str_dispose(&usage);
133
+ git_str_dispose(&opt);
134
+ return error;
135
+ }
136
+
137
+ int cli_opt_usage_error(
138
+ const char *subcommand,
139
+ const cli_opt_spec specs[],
140
+ const cli_opt *invalid_opt)
141
+ {
142
+ cli_opt_status_fprint(stderr, PROGRAM_NAME, invalid_opt);
143
+ cli_opt_usage_fprint(stderr, PROGRAM_NAME, subcommand, specs);
144
+ return CLI_EXIT_USAGE;
145
+ }
146
+
147
+ int cli_opt_help_fprint(
148
+ FILE *file,
149
+ const cli_opt_spec specs[])
150
+ {
151
+ git_str help = GIT_BUF_INIT;
152
+ const cli_opt_spec *spec;
153
+ int error = 0;
154
+
155
+ /* Display required arguments first */
156
+ for (spec = specs; spec->type; ++spec) {
157
+ if (! (spec->usage & CLI_OPT_USAGE_REQUIRED) ||
158
+ (spec->usage & CLI_OPT_USAGE_HIDDEN))
159
+ continue;
160
+
161
+ git_str_printf(&help, " ");
162
+
163
+ if ((error = print_spec_name(&help, spec)) < 0)
164
+ goto done;
165
+
166
+ git_str_printf(&help, ": %s\n", spec->help);
167
+ }
168
+
169
+ /* Display the remaining arguments */
170
+ for (spec = specs; spec->type; ++spec) {
171
+ if ((spec->usage & CLI_OPT_USAGE_REQUIRED) ||
172
+ (spec->usage & CLI_OPT_USAGE_HIDDEN))
173
+ continue;
174
+
175
+ git_str_printf(&help, " ");
176
+
177
+ if ((error = print_spec_name(&help, spec)) < 0)
178
+ goto done;
179
+
180
+ git_str_printf(&help, ": %s\n", spec->help);
181
+
182
+ }
183
+
184
+ if (git_str_oom(&help) ||
185
+ p_write(fileno(file), help.ptr, help.size) < 0)
186
+ error = -1;
187
+
188
+ done:
189
+ error = (error < 0) ? -1 : 0;
190
+
191
+ git_str_dispose(&help);
192
+ return error;
193
+ }
194
+
@@ -0,0 +1,35 @@
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_opt_usage_h__
9
+ #define CLI_opt_usage_h__
10
+
11
+ /**
12
+ * Prints usage information to the given file handle.
13
+ *
14
+ * @param file The file to print information to
15
+ * @param command The name of the command to use when printing
16
+ * @param subcommand The name of the subcommand (eg "checkout") to use when printing, or NULL to skip
17
+ * @param specs The specifications allowed by the command
18
+ * @return 0 on success, -1 on failure
19
+ */
20
+ int cli_opt_usage_fprint(
21
+ FILE *file,
22
+ const char *command,
23
+ const char *subcommand,
24
+ const cli_opt_spec specs[]);
25
+
26
+ int cli_opt_usage_error(
27
+ const char *subcommand,
28
+ const cli_opt_spec specs[],
29
+ const cli_opt *invalid_opt);
30
+
31
+ int cli_opt_help_fprint(
32
+ FILE *file,
33
+ const cli_opt_spec specs[]);
34
+
35
+ #endif /* CLI_opt_usage_h__ */