+Fusionforge-X.X:
+* [#658] Docman: Basic Webdav write mkcol, delete, put, move support (TrivialDev)
+* [#657] Docman: Add move mass actions (TrivialDev)
+* [#747] Docman: Direct link to file details (TrivialDev)
+* [#692] FRS: Reorganise code (TrivialDev)
+* [#697] FRS: Enable widget "My monitored packages" (TrivialDev)
+* [#705] FRS: Provide new role settings (TrivialDev)
+* [#713] FRS: Add delete packages, releases or files mass action (TrivialDev)
+* [#737] FRS: Provide link to download any release as ZIP file (TrivialDev)
+* [#656] General: drop tipsy plugin, use standard jQuery UI tooltip already provided (TrivialDev)
+* [#663] General: FusionForge Theme & jQuery UI theme sync (TrivialDev)
+* [#664] General: Update the jQuery & jQuery UI frameworks (TrivialDev)
+* [#669] General: feedback, error_msg, warning_msg are now store in cookie. (TrivialDev)
+* [#716] General: Update the jQuery Auto-height plugin (TrivialDev)
+* Plugin scmhook: Update git post-receive eMail hook (tarent solutions GmbH, Teckids e.V.)
+* [#684] Widget Public Area: display FRS link (TrivialDev)
+* [#743] Widget My Latest Commits: New widget to display user commits on "My Page"
+ Widget Project Latest Commits: New widget to display the 5 latest commits on the project page (TrivialDev)
+* [#745] Widget Project Latest Documents: enhancement, add actions buttons (monitor, delete) (TrivialDev)
+* [#655] Tracker: enable support for multi-select extrafield in roadmap (TrivialDev)
+* [#662] Forum: store the attached file on FS. (TrivialDev)
+* [#719] Plugin SCM GIT: activity log entry link to commit log in SCM browsing tab (TrivialDev)
+* [#724] Plugin SCM HG (Mercurial): display the Repository History stats block (TrivialDev)
+* [#725] Plugin SCM HG (Mercurial): add support for project activity tab (TrivialDev)
+* [#726] Plugin SCM HG (Mercurial): activity log entry link to commit log in SCM browsing tab (TrivialDev)
+* [#734] Plugin AuthLDAP: support LPAP_OPT_REFERRALS option, needed by ActiveDirectory Server (TrivialDev)
+
Fusionforge-5.3.3:
+ * User e-mail change: simplify confirmation hash to avoid mangling in some versions of Thunderbird [#738] (Inria)
+ * SCM: use 'shell_host' variable (or failing that, 'web_host') to document where users can SSH to the group shared directory [#698] (Inria)
+ * SCM stats: fix order in stats block [#736] (TrivialDev)
+ * System replication: refresh nscd cache before applying changes
* Plugin AuthLDAP: error and warning messages displayed twice [#732] (TrivialDev)
* Plugin scmhook: fix display when only one SCM plugin enabled [#735] (TrivialDev)
* Plugin Hudson: fix global status in Hudson Job widget [#740] (TrivialDev)
--- /dev/null
+#! /usr/bin/php -f
+<?php
+/**
+ * FusionForge source control management
+ *
+ * Copyright 2009, Roland Mas
+ *
+ * This file is part of FusionForge. FusionForge is free software;
+ * you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the Licence, or (at your option)
+ * any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with FusionForge; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+require dirname(__FILE__).'/../../common/include/env.inc.php';
+require_once $gfcommon.'include/pre.php';
+require_once $gfcommon.'include/cron_utils.php';
+
+// Plugins subsystem
+require_once $gfcommon.'include/Plugin.class.php' ;
+require_once $gfcommon.'include/PluginManager.class.php' ;
+
+// SCM-specific plugins subsystem
+require_once $gfcommon.'include/SCMPlugin.class.php' ;
+
++// Sync nss-pgsql
++cron_reload_nscd();
++
+session_set_admin ();
+
+setup_plugin_manager();
+
+$res = db_query_params('SELECT group_id FROM groups WHERE status=$1 AND use_scm=1 ORDER BY group_id DESC',
+ array ('A'));
+if (!$res) {
+ $this->setError('Unable to get list of projects using SCM: '.db_error());
+ return false;
+}
+
+$output = '';
+while ($data = db_fetch_array ($res)) {
+ $hook_params = array('group_id' => $data['group_id'], 'output' => '') ;
+ plugin_hook_by_reference ('scm_create_repo', $hook_params) ;
+ $output .= $hook_params['output'];
+}
+
+$hook_params = array ('output' => '') ;
+plugin_hook_by_reference ('scm_update_repolist', $hook_params) ;
+$output .= $hook_params['output'];
+
+cron_entry(27, $output);
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>
--- /dev/null
+#! /usr/bin/php
+<?php
+/**
+ * Fusionforge Cron Job
+ *
+ * The rest Copyright 2002-2005 (c) GForge Team
+ * Copyright 2012, Franck Villaume - TrivialDev
+ * Copyright © 2013 Thorsten Glaser, tarent solutions GmbH
+ * http://fusionforge.org/
+ *
+ * This file is part of FusionForge. FusionForge is free software;
+ * you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the Licence, or (at your option)
+ * any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with FusionForge; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ * This file creates blank user home directories and
+ * creates a group home directory with a template in it.
+
+#
+# * hosts
+#
+<VirtualHost 192.168.1.5>
+ ServerName gforge.company.com
+ ServerAlias *.gforge.company.com
+ VirtualDocumentRoot /home/groups/%1/htdocs
+# disabled for CVE-2014-6275
+# Only enable it if you know what you are doing, by default all scripts run as Apache
+# VirtualScriptAlias /home/groups/%1/cgi-bin
+
+ <Directory /home/groups>
+ Options Indexes FollowSymlinks
+ AllowOverride All
+ order allow,deny
+ allow from all
+
+ </Directory>
+ LogFormat "%h %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" gforge
+ CustomLog "|/usr/local/sbin/cronolog /home/groups/%1/logs/%Y/%m/%d/gforge.log" gforge
+ # Ensure that we don't try to use SSL on SSL Servers
+ <IfModule apache_ssl.c>
+ SSLDisable
+ </IfModule>
+</VirtualHost>
+
+*/
+
+require dirname(__FILE__).'/../../common/include/env.inc.php';
+require_once $gfcommon.'include/pre.php';
+require $gfcommon.'include/cron_utils.php';
+
++// Sync nss-pgsql
++cron_reload_nscd();
++
+setup_gettext_from_sys_lang();
+define('USER_DEFAULT_GROUP', 'users');
+// error variable
+$err = '';
+
+/*
+ * check whether directory prefices are set
+ * and create the prefix directories unless they exist
+ */
+
+if (!($gpfx = forge_get_config('groupdir_prefix'))) {
+ // this should be set in configuration
+ exit();
+}
+
+if (!is_dir($gpfx)) {
+ @mkdir($gpfx, 0755, true);
+}
+
+if (!($hpfx = forge_get_config('homedir_prefix'))) {
+ // this should be set in configuration
+ exit();
+}
+rtrim($hpfx, '/');
+
+if (!is_dir($hpfx)) {
+ @mkdir($hpfx, 0755, true);
+}
+
+if (forge_get_config('use_ftp_uploads')) {
+ if (!($ftp_pfx = forge_get_config('ftp_upload_dir'))) {
+ // this should be set in the configuration
+ exit();
+ }
+
+ if (!is_dir($ftp_pfx)) {
+ @mkdir($ftp_pfx, 0755, true);
+ }
+} else {
+ /* signal that we do not use FTP */
+ $ftp_pfx = false;
+}
+
+/* read in the group home template file */
+$contents = '';
+if (($fo = fopen(dirname(__FILE__) . '/../../templates/default_page.php', 'r'))) {
+ while (!feof($fo)) {
+ $contents .= fread($fo, 8192);
+ }
+ fclose($fo);
+} else {
+ $err .= 'Default Page not found';
+}
+
+/* create user homes */
+$dirs = array_flip(glob("$hpfx/*/"));
+$res = db_query_params('SELECT DISTINCT(user_name) FROM nss_usergroups', array());
+foreach(util_result_column_to_array($res,0) as $uname) {
+ $uhome = "$hpfx/$uname/";
+ if (!isset($dirs[$uhome])) {
+ mkdir($uhome);
+ chmod($uhome, 0755);
+ chown($uhome, $uname);
+ chgrp($uhome, USER_DEFAULT_GROUP);
+ }
+}
+
+/* create project/group homes */
+$res = db_query_params('SELECT unix_group_name, group_name FROM groups WHERE status=$1', array('A'));
+while ($row = pg_fetch_array($res)) {
+ $groupname = $row['unix_group_name'] ;
+
+ if ($ftp_pfx && !is_dir($ftp_pfx . '/' . $groupname)) {
+ @mkdir($ftp_pfx . '/' . $groupname);
+ //XXX chown/chgrp/chmod?
+ }
+
+ $ghome = $gpfx . '/' . $groupname;
+ if (!is_dir($ghome)) {
+ @mkdir($ghome); // perms not defined here because of umask
+ chmod($ghome, 02771); // teamwork + access to htdocs/ for apache
+ /* this is safe as this directory still belongs to root */
+ @mkdir($ghome . '/htdocs');
+ chmod($ghome . '/htdocs', 02775); // access to public pages
+ #@mkdir($ghome . '/cgi-bin');
+
+ /* write substituted template to group home */
+ if (($fw = fopen($ghome . '/htdocs/index.html', 'w'))) {
+ fwrite($fw, str_replace('##comment##',
+ _('Default Web Page for groups that haven\'t setup their page yet'),
+ str_replace('##purpose##',
+ _('Please replace this file with your own website'),
+ str_replace('##welcome_to##',
+ sprintf(_('Welcome to %s'), $row['group_name']),
+ str_replace('##body##',
+ _("We're Sorry but this Project hasn't uploaded their personal webpage yet.").'<br />'.
+ sprintf(_('Please check back soon for updates or visit <a href="%s">the project page</a>.'),
+ util_make_url('/projects/' . $row['unix_group_name'])),
+ $contents)))));
+ fclose($fw);
+ }
+
+ if (forge_get_config('use_manual_uploads')) {
+ @mkdir($ghome . '/incoming');
+ }
+
+ system("chown -R root:$groupname $ghome");
+ system("chmod -R g+w $ghome");
+ }
+}
+
+cron_entry(25,$err);
--- /dev/null
- $this->reload_nscd();
+<?php
+/*
+ * Copyright (C) 2014 Roland Mas
+ *
+ * This file is part of FusionForge.
+ *
+ * FusionForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+require_once dirname(dirname(__FILE__)).'/Testing/SeleniumForge.php';
+
+class SSHTest extends FForge_SeleniumTestCase
+{
+ function testSSH()
+ {
+ $this->init();
+
+ $this->uploadSshKey();
+
+ // Run the cronjobs
+ $this->cron("shell/homedirs.php");
+
+ $verbose = 0;
+ $v = '';
+ if ($verbose) {
+ system("echo 'Trying SSH' 1>&2", $ret);
+ $v = "-v";
+ }
+ system("ssh $v ".FORGE_ADMIN_USERNAME."@".HOST." id", $ret);
+ $this->assertEquals($ret, 0);
+ if ($verbose) {
+ system("echo 'End of SSH run' 1>&2", $ret);
+ }
+ }
+
+ /**
+ * Method that is called after Selenium actions.
+ *
+ * @param string $action
+ */
+ protected function defaultAssertions($action)
+ {
+ if ($action == 'waitForPageToLoad') {
+ $this->assertTrue($this->isElementPresent("//h1")
+ || $this->isElementPresent("//.[@class='page_footer']"));
+ }
+ }
+
+}
+?>
--- /dev/null
- $this->reload_nscd();
+<?php
+/*
+ * Copyright (C) 2012 Roland Mas
+ *
+ * This file is part of FusionForge.
+ *
+ * FusionForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+require_once dirname(dirname(__FILE__)).'/Testing/SeleniumForge.php';
+
+function mysystem($cmd, &$ret=null) {
+ print "Running: $cmd\n";
+ ob_flush();
+ system($cmd, $ret);
+}
+
+class ScmBzrTest extends FForge_SeleniumTestCase
+{
+ function testScmBzr()
+ {
+ $this->skip_on_rpm_installs();
+ $this->skip_on_src_installs();
+
+ $this->activatePlugin('scmbzr');
+ $this->populateStandardTemplate('empty');
+ $this->init();
+
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=Admin");
+ $this->clickAndWait("link=Tools");
+ $this->clickAndWait("link=Source Code Admin");
+ $this->click("//input[@name='scmradio' and @value='scmbzr']");
+ $this->clickAndWait("submit");
+
+ $this->uploadSshKey();
+
+ // Run the cronjob to create repositories
+ $this->cron("scm/create_scm_repos.php");
+ $this->cron("shell/homedirs.php");
+
+ // Check that the repo is present and Loggerhead shows it (even if empty)
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=SCM");
+
+ $this->open(ROOT.'/scm/loggerhead/');
+ $this->assertTextPresent("Browsing (root)");
+ $this->click("link=projecta");
+ $this->waitForPageToLoad(60000);
+ $this->assertTextPresent("Browsing (root)/projecta");
+
+ // Get the address of the repo
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=SCM");
+ $p = $this->getText("//tt[contains(.,'bzr checkout bzr+ssh')]");
+ $p = preg_replace(",^bzr checkout ,", "", $p);
+ $p = preg_replace(",/branchname$,", "", $p);
+
+ // Create a local branch, push it to the repo
+ mysystem("bzr whoami 'admin <admin@admin.tld>'");
+ $t = exec("mktemp -d /tmp/bzrTest.XXXXXX");
+ mysystem("cd $t && bzr init --quiet trunk >/dev/null", $ret);
+ $this->assertEquals($ret, 0);
+
+ mysystem("echo 'this is a simple text' > $t/trunk/mytext.txt");
+ mysystem("cd $t/trunk && bzr add --quiet && bzr commit -m'Adding file' --quiet", $ret);
+ mysystem("echo 'another simple text' >> $t/trunk/mytext.txt");
+ mysystem("cd $t/trunk && bzr add --quiet && bzr commit -m'Modifying file' --quiet", $ret);
+ $this->assertEquals($ret, 0);
+
+ mysystem("cd $t/trunk && bzr push --quiet $p/trunk", $ret);
+ $this->assertEquals($ret, 0);
+
+ $this->open(ROOT.'/scm/loggerhead/');
+ $this->assertTextPresent("Browsing (root)");
+ $this->click("link=projecta");
+ $this->waitForPageToLoad(60000);
+ $this->assertTextPresent("Browsing (root)/projecta");
+ $this->assertTextPresent("trunk");
+ $this->click("link=trunk");
+ $this->waitForPageToLoad(60000);
+ $this->assertTextPresent("Modifying file");
+ $this->assertTextNotPresent("Adding file");
+ $this->click("link=Changes");
+ $this->waitForPageToLoad(60000);
+ $this->assertTextPresent("Modifying file");
+ $this->assertTextPresent("Adding file");
+
+ mysystem("rm -fr $t");
+ }
+}
+?>
--- /dev/null
- $this->reload_nscd();
+<?php
+/*
+ * Copyright (C) 2012 Roland Mas
+ *
+ * This file is part of FusionForge.
+ *
+ * FusionForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+require_once dirname(dirname(__FILE__)).'/Testing/SeleniumForge.php';
+
+class ScmGitSSHTest extends FForge_SeleniumTestCase
+{
+ function testScmGitSSH()
+ {
+ $this->activatePlugin('scmgit');
+ $this->populateStandardTemplate('empty');
+ $this->init();
+
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=Admin");
+ $this->clickAndWait("link=Tools");
+ $this->clickAndWait("link=Source Code Admin");
+ $this->click("//input[@name='scmradio' and @value='scmgit']");
+ $this->clickAndWait("submit");
+
+ $this->uploadSshKey();
+
+ // Run the cronjob to create repositories
+ $this->cron("scm/create_scm_repos.php");
+ $this->cron("shell/homedirs.php");
+
+ // Get the address of the repo
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=SCM");
+ $p = $this->getText("//tt[contains(.,'git clone git+ssh')]");
+ $p = preg_replace(",^git clone ,", "", $p);
+
+ // Create a local clone, add stuff, push it to the repo
+ system("git config --global core.askpass ''", $ret);
+ $this->assertEquals($ret, 0);
+ $t = exec("mktemp -d /tmp/gitTest.XXXXXX");
+ system("cd $t && git clone --quiet $p", $ret);
+ $this->assertEquals($ret, 0);
+
+ system("echo 'this is a simple text' > $t/projecta/mytext.txt");
+ system("cd $t/projecta && git add mytext.txt && git commit --quiet -a -m'Adding file'", $ret);
+ system("echo 'another simple text' >> $t/projecta/mytext.txt");
+ system("cd $t/projecta && git commit --quiet -a -m'Modifying file'", $ret);
+ $this->assertEquals($ret, 0);
+
+ system("cd $t/projecta && git push --quiet --all", $ret);
+ $this->assertEquals($ret, 0);
+
+ // Check that the changes appear in gitweb
+ $this->open(ROOT.'/plugins/scmgit/cgi-bin/gitweb.cgi?a=project_list;pf=projecta');
+ $this->waitForPageToLoad();
+ $this->assertElementPresent("//.[@class='page_footer']");
+ $this->assertTextPresent("projecta.git");
+ $this->click("link=projecta/projecta.git");
+ $this->waitForPageToLoad();
+ $this->assertTextPresent("Modifying file");
+ $this->assertTextPresent("Adding file");
+
+ system("rm -fr $t");
+ }
+
+ /**
+ * Method that is called after Selenium actions.
+ *
+ * @param string $action
+ */
+ protected function defaultAssertions($action)
+ {
+ if ($action == 'waitForPageToLoad') {
+ $this->assertTrue($this->isElementPresent("//h1")
+ || $this->isElementPresent("//.[@class='page_footer']"));
+ }
+ }
+
+}
+?>
--- /dev/null
- $this->reload_nscd();
+<?php
+/*
+ * Copyright (C) 2012 Roland Mas
+ *
+ * This file is part of FusionForge.
+ *
+ * FusionForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+require_once dirname(dirname(__FILE__)).'/Testing/SeleniumForge.php';
+
+class ScmSvnSSHTest extends FForge_SeleniumTestCase
+{
+ function testScmSvnSSH()
+ {
+ $forge_get_config = RUN_JOB_PATH."/forge_get_config";
+ $config_path = rtrim(`$forge_get_config config_path`);
+ file_put_contents("$config_path/config.ini.d/zzz-buildbot-svnsshtest",
+ "[scmsvn]\n"."use_ssh = yes\n"."use_dav = no\n");
+
+ $this->activatePlugin('scmsvn');
+ $this->populateStandardTemplate('empty');
+ $this->init();
+
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=Admin");
+ $this->clickAndWait("link=Tools");
+ $this->clickAndWait("link=Source Code Admin");
+ $this->click("//input[@name='scmradio' and @value='scmsvn']");
+ $this->clickAndWait("submit");
+
+ $this->uploadSshKey();
+
+ // Run the cronjob to create repositories
+ $this->cron("scm/create_scm_repos.php");
+ $this->cron("shell/homedirs.php");
+
+ // Get the address of the repo
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=SCM");
+ $p = $this->getText("//tt[contains(.,'svn checkout svn+ssh')]");
+ $p = preg_replace(",^svn checkout ,", "", $p);
+
+ // Create a local checkout, commit stuff
+ $t = exec("mktemp -d /tmp/svnTest.XXXXXX");
+ system("cd $t && svn checkout $p projecta", $ret);
+ $this->assertEquals($ret, 0);
+
+ system("echo 'this is a simple text' > $t/projecta/mytext.txt");
+ system("cd $t/projecta && svn add mytext.txt && svn commit -m'Adding file'", $ret);
+ system("echo 'another simple text' >> $t/projecta/mytext.txt");
+ system("cd $t/projecta && svn commit -m'Modifying file'", $ret);
+ $this->assertEquals($ret, 0);
+
+ // Check that the changes appear in svnweb
+ $this->open(ROOT);
+ $this->clickAndWait("link=ProjectA");
+ $this->clickAndWait("link=SCM");
+ $this->clickAndWait("link=Browse Subversion Repository");
+ $this->assertTextPresent("Modifying file");
+ $this->assertTextNotPresent("Adding file");
+
+ system("rm -fr $t");
+ }
+
+ /**
+ * Method that is called after Selenium actions.
+ *
+ * @param string $action
+ */
+ protected function defaultAssertions($action)
+ {
+ if ($action == 'waitForPageToLoad') {
+ $this->assertTrue($this->isElementPresent("//h1")
+ || $this->isElementPresent("//.[@class='page_footer']"));
+ }
+ }
+
+}
+?>
}
if (defined('DB_INIT_CMD')) {
// Reload a fresh database before running this test suite.
- system(DB_INIT_CMD);
+ $ret = 0;
+ passthru(DB_INIT_CMD, $ret);
+ ob_flush();
+ if ($ret != 0)
+ die('DB_INIT_CMD ('.DB_INIT_CMD.') failed');
}
- $this->reload_nscd();
$this->setBrowser('*firefox');
$this->setBrowserUrl(URL);