send-email: validate & reconfirm interactive responses

People answer 'y' to "Who should the emails appear to be from?"  and
'n' to "Message-ID to be used as In-Reply-To for the first email?"
for some unknown reason.  While it is possible that your local
username really is "y" and you are sending the mail to your local
colleagues, it is possible, and some might even say it is likely,
that it is a user error.

Fortunately, our interactive prompter already has input validation
mechanism built-in.  Enhance it so that we can optionally reconfirm
and allow the user to pass an input that does not validate, and
"softly" require input to the sender, in-reply-to, and recipient to
contain "@" and "." in this order, which would catch most cases of
mistakes.

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