git pre-push вызывает ошибку сломанной трубы - PullRequest
0 голосов
/ 04 мая 2018

У меня есть большой скрипт предварительного подключения, который я поддерживаю для запуска проверок кода, сборки, запуска регрессии и отправки по электронной почте набора замечаний к выпуску. Некоторое время он работал, но были сделаны некоторые недавние изменения, и теперь, когда мы делаем git push, это приводит к ошибке «Сломанная труба». Похоже, что ни одно из моих изменений не делает ничего, что могло бы вызвать ошибку канала.

Я попытался запустить с GIT_TRACE и через strace, и мне не совсем понятно, в чем проблема:

... Email Sent Successfully No errors! 
[{WIFEXITED(s) &&  WEXITSTATUS(s) == 0}], 0, NULL) = 125625
--- SIGCHLD (Child exited) @ 0 (0) 
--- write(4, "009c4a23dfcd66ae44d23435e45a2371"..., 156) = -1 EPIPE (Broken pipe)
--- SIGPIPE (Broken pipe) @ 0 (0)
--- +++ killed by SIGPIPE +++

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Да, ответ действительно был таймером ServerAliveInterval. Сервер закрыт, поэтому произошел сбой.

0 голосов
/ 04 мая 2018

Требуется предварительный толчок, чтобы прочитать его стандартный ввод, который состоит из серии строк в форме, описанной в документации githooks . То есть вход может иметь длину много строк, а не только одну. Иногда это может быть только одна строка, но иногда это будет больше.

Если ваша ловушка перед нажатием не может прочитать все стандартного ввода, и Git записывает много ввода, запись Git в закрытый сейчас канал приведет к ошибке EPIPE и SIGPIPE сигнал. Так как это происходит, вы не должны читать весь ввод. Чтобы исправить это, прочитайте остальную часть ввода.

...