У меня есть скучная проблема, которую я не могу решить.
Что я пытаюсь сделать?
post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass --submit-as=admin -p --target-groups=reviewers
Все в порядке, когда я пробую это из bash, войдя в систему как мой пользователь. Обзор отправляется, публикуется и т. д. ==> Все разрешения и другие различные настройки в порядке.
Что произойдет, если я попробую сделать это из посткоммит-хука SVN?
Ресурсы зафиксированы, но операция svn зависает — на самом деле хук post-commit не завершается.
В чем заключается проблема?
post-review выполняется как пользователь, который выполняет хук post-commit - в данном случае пользователь www-data Apache. То есть, когда я запускаю команду как www-data:
sudo -u www-data post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass! --submit-as=admin -p --target-groups=reviewers -d
Я получаю (обратите внимание на параметр -d в команде после проверки - DEBUG):
RBTools 0.4.1
Home = /home/borislav
Password for 'www-data':
Вот где он зависает, ожидая ввода пароля. Операция фиксации не может завершиться, и она просто остается там. Я уже обсуждал это с ребятами изГруппа ReviewBoard в Google в этом посте.
С другой стороны, когда я выполняю ту же команду с отладочным выводом, но как myuser, я получаю:
RBTools 0.4.1
Home = /home/borislav
HTTP GETting api/
HTTP GETting http://reviews.example.test/api/info/
Using the new web API
TTP GETting http://reviews.example.test/api/repositories/
HTTP GETting http://reviews.example.test/api/repositories/1/
HTTP GETting http://reviews.example.test/api/repositories/1/info/
HTTP GETting http://reviews.example.test/api/repositories/2/
HTTP GETting http://reviews.example.test/api/repositories/2/info/
HTTP GETting http://reviews.example.test/api/repositories/3/
HTTP GETting http://reviews.example.test/api/repositories/3/info/
HTTP GETting http://reviews.example.test/api/repositories/4/
HTTP GETting http://reviews.example.test/api/repositories/4/info/
Attempting to create review request on http://xxx.xxx.xxx.xxx/svn/testRepo2 for None
Submitting the review request as admin
HTTP POSTing to http://reviews.example.test/api/review-requests/: {'submit_as': 'admin', 'repository': 'http://xxx.xxx.xxx.xxx/svn/testRepo2'}
Review request created
Attempting to set field 'target_groups' to 'reviewers' for review request '22'
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'target_groups': 'reviewers'}
Uploading diff, size: 2316
HTTP POSTing to http://reviews.example.test/api/review-requests/22/diffs/: {'basedir': '/'}
Publishing
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'public': 1}
Review request #22 posted.
http://reviews.example.test/r/22/
Так что на самом деле все с размещением/публикацией и т. д. работает.
Один из разработчиков ReveiwBoard заявил, что«Мы не отображаем строку «Пароль для ''». Так что это исходит из чего-то совершенно другого».
Я уверен, что это какое-то разрешение на выполнение. Оно должно работать на Ubuntu Server, так что думаю, Debian.
Мне было интересно, связано ли это как-то с парадигмой «без входа root» в Ubuntu.
Я не пробовал использовать другой дистрибутив Linux, поскольку это не вариант, поскольку сервер SVN размещен на Ubuntu Server.
Вы можете проверитьэто обсуждение у меня былос ребятами из группы ReviewBoard в Google.после-обзорДвоичный файл находится по адресу:/usr/local/bin/post-review
Я попробовал добавить разрешения дляwww-данныеиметь возможность выполнитьпосле-обзорв файле sudoers, но безуспешно.
Какое решение вы можете предложить?
Заранее спасибо, Борислав.
решение1
Запрос пароля на самом деле исходит от svn, а не от post-review. post-review вызывает двоичный файл svn для извлечения изменений из репозитория.
Вы не видите запрос пароля как ваш пользователь, потому что вы уже аутентифицировались, и svn сохранил вашу информацию об аутентификации. Вы еще не сделали этого как пользователь www-data, поэтому svn запрашивает пароль.
Самый простой способ исправить это — войти в систему как пользователь www-data и пройти аутентификацию в репозитории, чтобы учетные данные были кэшированы.