Связной пост-фиксатор SVN, отправляющий сообщение клиенту

Я пишу post-commit script в bash, и я хотел бы передать сообщения обратно клиенту, который совершает коммит. Однако

echo my message >&2

не возвращает его клиенту. Возможно ли отправить сообщения назад с помощью фиксации после фиксации?

Ответ 1

Прикрепление post-commit hook делает:

все, что крючок, напечатанный на stderr, будет перенаправлен обратно клиенту, что упростит диагностику сбоев крюка.

вы можете проверить, не является ли это простой вопрос с цитатой:

echo "my message" >&2

В этих примерах крюка вы можете увидеть, что в кавычки echo to >&2 включены кавычки.

В главе bash по перенаправлению также приводятся примеры с кавычками.

Однако, поскольку pmod подробно описывает его ответ, это сообщение stderr не будет видно если статус выхода script отличается от 0, как показано в "подрывной пост-фиксации: напечатать сообщение об ошибке, которое пользователь может увидеть?"

#!/bin/bash
echo "test" >&2
exit 1

Ответ 2

Крючок покажет STDERR только в случае сбоя (и, как вы теперь можете, hook не отображает STDOUT). Таким образом, вам нужно вернуть ненулевой код из вашего script, чтобы передать "мое сообщение" пользователю (просто добавьте exit 1 после эха).

Посмотрите здесь:

Если хэт post-commit возвращает ненулевой статус выхода, не прерываться, поскольку он уже завершен. Однако все, что крючок, напечатанный на stderr, будет перенаправлен обратно клиенту, что облегчает диагностику отказов крюка.

Ответ 3

У меня была та же проблема, с Apache и mod_svn. Оказалось, что маршаллинг терпит неудачу, когда текст, составленный на маршаллинге, содержит символы &, < или >. После подстановки их &amp;, &lt; и &gt; текст прошел.