On Fri, Jul 27, 2012 at 01:08:34AM +0800, Tay Ray Chuan wrote: > > Perhaps we should audit "isatty()" calls and replace them with a > > helper function that does this kind of thing consistently in a more > > robust way (my recent favorite is Linus's somewhat anal logic used > > in builtin/merge.c::default_edit_option()). > > Any specific callers to isatty() you have in mind? A quick grep shows > that a significant portion of the "offenders" are isatty(2) calls to > determine whether to display progress, I think those are ok. Yeah, those are probably fine. Grep reveals that besides isatty(2) and the merge default_edit_option check, we have: - isatty(1) for checking auto-output munging, including auto-colors, auto-columns, and the pager. These are all fine, as they are not about interactivity, but specifically about whether stdout is a tty. - isatty(0) in commit.c to print a message when reading "-F -" from stdin. OK. - isatty(0) in pack-redundant to avoid reading stdin when it is a terminal (a questionable choice, perhaps, but not really something that would want a full interactivity check). - isatty(0) check in cmd_revert to set opts.edit automatically. This one should match merge's behavior. - isatty(0) in shortlog; this is a compatibility hack as shortlog traditionally accepted log output on stdin, but can now be used stand-alone. OK. So I think the only one that could be improved is the one in cmd_revert. > The credential helper has some prompting functionality that is close > to what I intend to do here, but I think it can make some assumptions > about stdin/stdout that we can't, as you have pointed out. So that > leaves merge-edit and this patch as the beneficiaries of a > builtin/merge.c::default_edit_option() refactor. That's just off the > top of my head. The credential code uses git_terminal_prompt, which actually opens /dev/tty directly. So it is probably sane to use for your new prompt, but it does not (and should not) rely on isatty. > Perhaps the helper function could be named "git_can_prompt()" and > placed in prompt.c? Please don't. The isatty() checks have nothing to do with whether git_prompt can run. The only thing such a git_can_prompt function should do is see if we can open /dev/tty. The isatty check in merge.c is more about "are we interactive, so that it is sane to run $EDITOR". -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html