archive: use parseopt for local-only options

Replace the hand-rolled parsers that find and remove --remote and --exec
by a parseopt parser that also handles --output.

All three options only have a meaning if no remote server is used or on
the local side.  They must be rejected by upload-archive and should not
be sent to the server by archive.

We can't use a single parser for both remote and local side because the
remote end possibly understands a different set of options than the
local side.  A local parser would then wrongly accuse options valid on
the other side as being incorrect.

This patch implements a very forgiving parser that understands only the
three options mentioned above.  All others are passed to the normal,
complete parser in archive.c (running either locally in archive, or
remotely in upload-archive).  This normal parser definition contains
dummy entries for the three options, in order for them to appear in the
help screen.

The parseopt parser allows multiple occurrences of --remote and --exec
unlike the previous one; the one specified last wins.  This looseness
is acceptable, I think.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2 files changed
tree: 676f1744408510fe58212ae8b6b4ac2b7d3312b4
  1. arm/
  2. compat/
  3. contrib/
  4. Documentation/
  5. git-gui/
  6. gitk-git/
  7. gitweb/
  8. mozilla-sha1/
  9. perl/
  10. ppc/
  11. t/
  12. templates/
  13. xdiff/
  14. .gitattributes
  15. .gitignore
  16. .mailmap
  17. abspath.c
  18. alias.c
  19. alloc.c
  20. archive-tar.c
  21. archive-zip.c
  22. archive.c
  23. archive.h
  24. attr.c
  25. attr.h
  26. base85.c
  27. blob.c
  28. blob.h
  29. branch.c
  30. branch.h
  31. builtin-add.c
  32. builtin-annotate.c
  33. builtin-apply.c
  34. builtin-archive.c
  35. builtin-blame.c
  36. builtin-branch.c
  37. builtin-bundle.c
  38. builtin-cat-file.c
  39. builtin-check-attr.c
  40. builtin-check-ref-format.c
  41. builtin-checkout-index.c
  42. builtin-checkout.c
  43. builtin-clean.c
  44. builtin-clone.c
  45. builtin-commit-tree.c
  46. builtin-commit.c
  47. builtin-config.c
  48. builtin-count-objects.c
  49. builtin-describe.c
  50. builtin-diff-files.c
  51. builtin-diff-index.c
  52. builtin-diff-tree.c
  53. builtin-diff.c
  54. builtin-fast-export.c
  55. builtin-fetch--tool.c
  56. builtin-fetch-pack.c
  57. builtin-fetch.c
  58. builtin-fmt-merge-msg.c
  59. builtin-for-each-ref.c
  60. builtin-fsck.c
  61. builtin-gc.c
  62. builtin-grep.c
  63. builtin-help.c
  64. builtin-http-fetch.c
  65. builtin-init-db.c
  66. builtin-log.c
  67. builtin-ls-files.c
  68. builtin-ls-remote.c
  69. builtin-ls-tree.c
  70. builtin-mailinfo.c
  71. builtin-mailsplit.c
  72. builtin-merge-base.c
  73. builtin-merge-file.c
  74. builtin-merge-ours.c
  75. builtin-merge-recursive.c
  76. builtin-merge.c
  77. builtin-mv.c
  78. builtin-name-rev.c
  79. builtin-pack-objects.c
  80. builtin-pack-refs.c
  81. builtin-prune-packed.c
  82. builtin-prune.c
  83. builtin-push.c
  84. builtin-read-tree.c
  85. builtin-receive-pack.c
  86. builtin-reflog.c
  87. builtin-remote.c
  88. builtin-rerere.c
  89. builtin-reset.c
  90. builtin-rev-list.c
  91. builtin-rev-parse.c
  92. builtin-revert.c
  93. builtin-rm.c
  94. builtin-send-pack.c
  95. builtin-shortlog.c
  96. builtin-show-branch.c
  97. builtin-show-ref.c
  98. builtin-stripspace.c
  99. builtin-symbolic-ref.c
  100. builtin-tag.c
  101. builtin-tar-tree.c
  102. builtin-unpack-objects.c
  103. builtin-update-index.c
  104. builtin-update-ref.c
  105. builtin-upload-archive.c
  106. builtin-verify-pack.c
  107. builtin-verify-tag.c
  108. builtin-write-tree.c
  109. builtin.h
  110. bundle.c
  111. bundle.h
  112. cache-tree.c
  113. cache-tree.h
  114. cache.h
  115. check-builtins.sh
  116. check-racy.c
  117. check_bindir
  118. color.c
  119. color.h
  120. combine-diff.c
  121. command-list.txt
  122. commit.c
  123. commit.h
  124. config.c
  125. config.mak.in
  126. configure.ac
  127. connect.c
  128. convert.c
  129. copy.c
  130. COPYING
  131. csum-file.c
  132. csum-file.h
  133. ctype.c
  134. daemon.c
  135. date.c
  136. decorate.c
  137. decorate.h
  138. delta.h
  139. diff-delta.c
  140. diff-lib.c
  141. diff-no-index.c
  142. diff.c
  143. diff.h
  144. diffcore-break.c
  145. diffcore-delta.c
  146. diffcore-order.c
  147. diffcore-pickaxe.c
  148. diffcore-rename.c
  149. diffcore.h
  150. dir.c
  151. dir.h
  152. editor.c
  153. entry.c
  154. environment.c
  155. exec_cmd.c
  156. exec_cmd.h
  157. fast-import.c
  158. fetch-pack.h
  159. fixup-builtins
  160. fsck.c
  161. fsck.h
  162. generate-cmdlist.sh
  163. git-add--interactive.perl
  164. git-am.sh
  165. git-archimport.perl
  166. git-bisect.sh
  167. git-compat-util.h
  168. git-cvsexportcommit.perl
  169. git-cvsimport.perl
  170. git-cvsserver.perl
  171. git-filter-branch.sh
  172. git-instaweb.sh
  173. git-lost-found.sh
  174. git-merge-octopus.sh
  175. git-merge-one-file.sh
  176. git-merge-resolve.sh
  177. git-mergetool.sh
  178. git-parse-remote.sh
  179. git-pull.sh
  180. git-quiltimport.sh
  181. git-rebase--interactive.sh
  182. git-rebase.sh
  183. git-relink.perl
  184. git-repack.sh
  185. git-request-pull.sh
  186. git-send-email.perl
  187. git-sh-setup.sh
  188. git-stash.sh
  189. git-submodule.sh
  190. git-svn.perl
  191. GIT-VERSION-GEN
  192. git-web--browse.sh
  193. git.c
  194. git.spec.in
  195. graph.c
  196. graph.h
  197. grep.c
  198. grep.h
  199. hash-object.c
  200. hash.c
  201. hash.h
  202. help.c
  203. help.h
  204. http-push.c
  205. http-walker.c
  206. http.c
  207. http.h
  208. ident.c
  209. imap-send.c
  210. index-pack.c
  211. INSTALL
  212. levenshtein.c
  213. levenshtein.h
  214. list-objects.c
  215. list-objects.h
  216. ll-merge.c
  217. ll-merge.h
  218. lockfile.c
  219. log-tree.c
  220. log-tree.h
  221. mailmap.c
  222. mailmap.h
  223. Makefile
  224. match-trees.c
  225. merge-file.c
  226. merge-index.c
  227. merge-recursive.c
  228. merge-recursive.h
  229. merge-tree.c
  230. mktag.c
  231. mktree.c
  232. name-hash.c
  233. object.c
  234. object.h
  235. pack-check.c
  236. pack-redundant.c
  237. pack-refs.c
  238. pack-refs.h
  239. pack-revindex.c
  240. pack-revindex.h
  241. pack-write.c
  242. pack.h
  243. pager.c
  244. parse-options.c
  245. parse-options.h
  246. patch-delta.c
  247. patch-id.c
  248. patch-ids.c
  249. patch-ids.h
  250. path.c
  251. pkt-line.c
  252. pkt-line.h
  253. preload-index.c
  254. pretty.c
  255. progress.c
  256. progress.h
  257. quote.c
  258. quote.h
  259. reachable.c
  260. reachable.h
  261. read-cache.c
  262. README
  263. reflog-walk.c
  264. reflog-walk.h
  265. refs.c
  266. refs.h
  267. remote.c
  268. remote.h
  269. rerere.c
  270. rerere.h
  271. revision.c
  272. revision.h
  273. run-command.c
  274. run-command.h
  275. send-pack.h
  276. server-info.c
  277. setup.c
  278. sha1-lookup.c
  279. sha1-lookup.h
  280. sha1_file.c
  281. sha1_name.c
  282. shallow.c
  283. shell.c
  284. shortlog.h
  285. show-index.c
  286. sideband.c
  287. sideband.h
  288. sigchain.c
  289. sigchain.h
  290. strbuf.c
  291. strbuf.h
  292. string-list.c
  293. string-list.h
  294. symlinks.c
  295. tag.c
  296. tag.h
  297. tar.h
  298. test-chmtime.c
  299. test-ctype.c
  300. test-date.c
  301. test-delta.c
  302. test-dump-cache-tree.c
  303. test-genrandom.c
  304. test-match-trees.c
  305. test-parse-options.c
  306. test-path-utils.c
  307. test-sha1.c
  308. test-sha1.sh
  309. test-sigchain.c
  310. thread-utils.c
  311. thread-utils.h
  312. trace.c
  313. transport.c
  314. transport.h
  315. tree-diff.c
  316. tree-walk.c
  317. tree-walk.h
  318. tree.c
  319. tree.h
  320. unpack-file.c
  321. unpack-trees.c
  322. unpack-trees.h
  323. update-server-info.c
  324. upload-pack.c
  325. usage.c
  326. userdiff.c
  327. userdiff.h
  328. utf8.c
  329. utf8.h
  330. var.c
  331. walker.c
  332. walker.h
  333. wrapper.c
  334. write_or_die.c
  335. ws.c
  336. wt-status.c
  337. wt-status.h
  338. xdiff-interface.c
  339. xdiff-interface.h