7

I'm looking for a way to have git-commit wait for standard input. I'm coding this in PHP, as my bash skills are non-existant, so I thougth doing a regular

<?php
$input = trim(fgets(STDIN));
fscanf(STDIN, "%d\n", $line);
?>

would do the trick, and wait until I write stuff in to continue, but it just goes ahead and continues executing my PHP script anyways.

The idea behind this is that after I tag a release, git will push HEAD to the testing webserver, send a couple of tweets, and let me write in some details about the release in the CHANGELOG.

While I can achieve the writing to a file (using exec('mate -w')), I'd like it to hang on until I do a quick test on the server. This would enable me to rollback if I notice any errors (lazy, I know).

Thanks for any help!

Roberto
  • 1,864
  • 1
  • 29
  • 41

2 Answers2

4

Most git hooks either have something special fed to there stdin, or have stdin detached from the terminal. They are all designed to be run non-interactively, so I don't believe that a hook is suitable for what you want to do. You can, of course, manually talk to /dev/tty but I don't think that it's a very good idea.

I also don't believe that the 'pre-commit' hook is suitable to your task, surely not every commit that you make will be a release of some sort? A 'post-receive' hook on the testing webserver machine sounds more appropriate.

CB Bailey
  • 700,257
  • 99
  • 619
  • 646
  • Yes, actually I found I'd be better off keeping some variables on the .git/config file for these purposes, and having the server do these related tasks. It was more a problem of my idea of a workflow than git itself, it turns out. Thanks! – Roberto Jul 02 '09 at 16:56
3

I need user input in my post-merge hook (written in PHP).

I solved it with this piece of code: trim(exec('exec < /dev/tty && read input && echo $input'))

Don't ask, it works ;)

nickel715
  • 2,103
  • 1
  • 21
  • 25