All of lore.kernel.org
 help / color / mirror / Atom feed
From: Orgad Shaneh <orgads@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Orgad Shaneh via GitGitGadget <gitgitgadget@gmail.com>,
	Git List <git@vger.kernel.org>
Subject: Re: [PATCH v4 1/2] hooks: allow input from stdin for commit-related hooks
Date: Fri, 20 Nov 2020 07:23:12 +0200	[thread overview]
Message-ID: <CAGHpTBKHmdjqrz1ABdGUUz7AwcixU_VBy1DQzybpFizqVo8C7A@mail.gmail.com> (raw)
In-Reply-To: <CAPig+cSN=-7KWgDcXM8po44PEKi27U6mJEEL0mj_wrTJBUf=WA@mail.gmail.com>

On Thu, Nov 19, 2020 at 11:23 PM Eric Sunshine <sunshine@sunshineco.com> wrote:
>
> On Thu, Nov 19, 2020 at 3:57 PM Orgad Shaneh via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
> > Let hooks receive user input if applicable.
> > [...]
> > This allows for example prompting the user to choose an issue
> > in prepare-commit-msg, and add "Fixes #123" to the commit message.
> >
> > Another possible use-case is running sanity test on pre-commit,
> > and having a prompt like "This and that issue were found in your
> > changes. Are you sure you want to commit? [Y/N]".
>
> These use-cases really help readers understand the motivation for this
> change. Good.
>
> > Allow stdin only for commit-related hooks. Some of the other
> > hooks pass their own input to the hook, so don't change them.
> >
> > Note: If pre-commit reads from stdin, and git commit is executed
> > with -F - (read message from stdin), the message is not read
> > correctly. This is fixed in the follow-up commit.
>
> Rather than making such a fundamental change and having to deal with
> the fallout by introducing complexity to handle various special-cases
> which pop up now and in the future, I wonder if it makes more sense to
> instead just update documentation to tell hook authors to read
> explicitly from the console rather than expecting stdin to be
> available (since stdin may already be consumed for other purposes when
> dealing with hooks or commands which invoke the hooks).

On the first revision I had several links in the commit message to
users who solved it this way. This solution however is not optimal.
I have a prepare-commit-msg hook that requires user interaction for
choosing an issue. This hook must work from the terminal and also
from GUI applications like IDE.

Currently the hook always pops a GUI window, but when using it
from the terminal this is inconvenient (and when running over
remote SSH without X forwarding it can't work), so I'd like it to be
usable also from the terminal.

To achieve that, I created 2 classes - one for terminal and one
for GUI, and trying to choose the correct class by checking if
stdin is a tty. The condition looks like this (Ruby):
client = STDIN.tty? ? Terminal.new : GUI.new

At this point I was surprised to discover that Git closes stdin,
so the condition is never satisfied, and I always end up with GUI.

As I mentioned, I need it to work also when executed from
GUI applications, so just reading from the console will not work
in my case. I tried other ways to detect "running from terminal"
without the tty condition, but couldn't. The environment variables
are identical when running in a GUI terminal and in the IDE.

Can you suggest an alternative way to determine if I can accept user
input from the console or not?

- Orgad

  parent reply	other threads:[~2020-11-20  5:23 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-17 15:02 [PATCH] hooks: allow input from stdin Orgad Shaneh via GitGitGadget
2020-11-17 19:59 ` Junio C Hamano
2020-11-19 15:50 ` [PATCH v2] " Orgad Shaneh via GitGitGadget
2020-11-19 15:56   ` [PATCH v3] hooks: allow input from stdin for commit-related hooks Orgad Shaneh via GitGitGadget
2020-11-19 19:16     ` Junio C Hamano
2020-11-19 20:41       ` Orgad Shaneh
2020-11-19 20:56     ` [PATCH v4 0/2] " Orgad Shaneh via GitGitGadget
2020-11-19 20:56       ` [PATCH v4 1/2] " Orgad Shaneh via GitGitGadget
2020-11-19 21:23         ` Eric Sunshine
2020-11-19 21:32           ` Junio C Hamano
2020-11-20  5:23           ` Orgad Shaneh [this message]
2020-11-20  6:38             ` Eric Sunshine
2020-11-20  6:48               ` Eric Sunshine
2020-11-20  7:16                 ` Orgad Shaneh
2020-11-20 18:13               ` Junio C Hamano
2020-11-20 10:59             ` Ævar Arnfjörð Bjarmason
2020-11-20 12:34               ` Orgad Shaneh
2020-11-19 20:56       ` [PATCH v4 2/2] commit: fix stdin conflict between message and hook Orgad Shaneh via GitGitGadget
2020-12-09 20:06       ` [PATCH v5 0/2] hooks: allow input from stdin for commit-related hooks Orgad Shaneh via GitGitGadget
2020-12-09 20:06         ` [PATCH v5 1/2] hooks: lay foundations for passing stdin to hooks Orgad Shaneh via GitGitGadget
2020-12-09 20:06         ` [PATCH v5 2/2] hooks: allow input from stdin for commit-related hooks Orgad Shaneh via GitGitGadget
2020-12-09 22:37           ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAGHpTBKHmdjqrz1ABdGUUz7AwcixU_VBy1DQzybpFizqVo8C7A@mail.gmail.com \
    --to=orgads@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=sunshine@sunshineco.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.