Я создал ловушку Subversion, которая выполняет различные функции, включая отправку электронных писем и обновление рабочей копии на сервере. Когда это запускается из Bash Propt, он работает отлично. При запуске через TortoiseSVN или Netbeans при фиксации, электронные письма и т. Д. Отправляются, но обновление не выполняется, также не появляются ошибки Это php-файл, и я использую метод backtick для запуска команд bash. Другие команды bash запускаются для составления электронных писем, так что это не проблема.
Вот строка, которая должна запустить обновление и записать результат. $ location извлекается из базы данных местоположений рабочей копии.
$update_output = `/usr/local/bin/svn update /home/$location >> update.log`;
Спасибо
Джеймс
Редактировать, более полный сценарий:
#!/usr/local/bin/php
<?
$REPOS = $argv[1];
$REV = $argv[2];
$output[] = `/usr/local/bin/svnlook dirs-changed -r $REV $REPOS`;
foreach($output as $line)
{
preg_match("$([^/]+)$", $line, $array);
$projects[] = $array[0];
}
$projects = array_unique($projects);
$mysqli = new mysqli('localhost', 'svn_user', 'pringles', 'svn_maindb');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
foreach($projects as $project)
{
$query = "SELECT * FROM Project WHERE name = '$project' LIMIT 1";
$result = $mysqli->query($query);
$row = $result->fetch_assoc();
$proj_id = $row['id'];
$location = $row['location'];
if(!empty($location))
{
$update_output = `/usr/local/bin/svn update /home/$location >> update.log`;
}
/* The below line only works when the script is run by hand */
$test = `/usr/bin/lessecho test >> /home/svn/repo/hooks/update.log`;
/* Grab user from DB and call send_email for user */
}
function send_email($REPOS, $REV, $programmer, $email)
{
$author = `/usr/local/bin/svnlook author -r $REV $REPOS`;
$message .= "Project Committed By $author
Comments:
";
$message .= `/usr/local/bin/svnlook log -r $REV $REPOS`;
$message .= "
===========List of Changes========
U = Updated
A = Added
D = Deleted
";
$message .= `/usr/local/bin/svnlook changed -r $REV $REPOS`;
/* Compose and Send Email */
}