* 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 FusionForge; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
+ * 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.
*/
forge_define_config_item ('default_server', 'scmcvs', forge_get_config ('web_host')) ;
$this->register () ;
}
-
+
function getDefaultServer() {
return forge_get_config('default_server', 'scmcvs');
}
if (!$project) {
return false ;
}
-
+
if ($project->usesPlugin($this->name)) {
$result = db_query_params('SELECT sum(commits) AS commits, sum(adds) AS adds FROM stats_cvs_group WHERE group_id=$1',
array ($project->getID())) ;
echo ' (CVS: '.sprintf(_('<strong>%1$s</strong> commits, <strong>%2$s</strong> adds'), number_format($commit_num, 0), number_format($add_num, 0)).")";
}
}
-
+
function getBlurb () {
return '<p>' . _('CVS documentation is available <a href="http://cvsbook.red-bean.com/">here</a>.') . '</p>';
}
function getInstructionsForAnon ($project) {
- $cvsrootend = $project->getSCMBox().':'.forge_get_config('repos_path', 'scmcvs').'/'.$project->getUnixName();
+ $cvsrootend = $this->getBoxForProject($project).':'.forge_get_config('repos_path', 'scmcvs').'/'.$project->getUnixName();
$b = '<h2>' . _('Anonymous CVS Access') . '</h2>';
$b .= '<p>';
$b .= _('This project\'s CVS repository can be checked out through anonymous (pserver) CVS with the following instruction set. The module you wish to check out must be specified as the <i>modulename</i>. When prompted for a password for <i>anonymous</i>, simply press the Enter key.');
}
function getInstructionsForRW ($project) {
- $cvsrootend = $project->getSCMBox().':'.forge_get_config('repos_path', 'scmcvs').'/'.$project->getUnixName();
+ $cvsrootend = $this->getBoxForProject($project).':'.forge_get_config('repos_path', 'scmcvs').'/'.$project->getUnixName();
if (session_loggedin()) {
$u =& user_get_object(user_getid()) ;
$d = $u->getUnixName() ;
function getSnapshotPara ($project) {
$b = "" ;
- $filename = $project->getUnixName().'-scm-latest.tar.gz';
+ $filename = $project->getUnixName().'-scm-latest.tar'.util_get_compressed_file_extension();
if (file_exists(forge_get_config('scm_snapshots_path').'/'.$filename)) {
$b .= '<p>[' ;
$b .= util_make_link ("/snapshots.php?group_id=".$project->getID(),
$result = db_query_params('SELECT u.realname, u.user_name, u.user_id, sum(commits) as commits, sum(adds) as adds, sum(adds+commits) as combined FROM stats_cvs_user s, users u WHERE group_id=$1 AND s.user_id=u.user_id AND (commits>0 OR adds >0) GROUP BY u.user_id, realname, user_name, u.user_id ORDER BY combined DESC, realname',
array ($project->getID()));
-
+
if (db_numrows($result) > 0) {
$b .= $HTML->boxMiddle(_('Repository Statistics'));
_('Commits')
);
$b .= $HTML->listTableTop($tableHeaders);
-
+
$i = 0;
$total = array('adds' => 0, 'commits' => 0);
-
+
while($data = db_fetch_array($result)) {
$b .= '<tr '. $HTML->boxGetAltRowStyle($i) .'>';
$b .= '<td width="50%">' ;
if (!$project) {
return false ;
}
-
+
if ($project->usesPlugin ($this->name)) {
if ($this->browserDisplayable ($project)) {
- print '<iframe src="'.util_make_url ("/scm/viewvc.php/?root=".$project->getUnixName()).'" frameborder="no" width=100% height=700></iframe>' ;
+ session_redirect("/scm/viewvc.php/?root=".$project->getUnixName());
}
}
}
if (!$project) {
return false ;
}
-
+
if (! $project->usesPlugin ($this->name)) {
return false;
}
$repo = forge_get_config('repos_path', 'scmcvs') . '/' . $project->getUnixName() ;
$locks_dir = forge_get_config('repos_path', 'scmcvs') . '/cvs-locks/' . $project->getUnixName() ;
- $unix_group = 'scm_' . $project->getUnixName() ;
$repo_exists = false ;
if (is_dir ($repo) && is_dir ("$repo/CVSROOT")) {
$repo_exists = true ;
}
-
+
if (!$repo_exists) {
system ("cvs -d $repo init") ;
system ("mkdir -p $locks_dir") ;
}
- system ("chgrp -R $unix_group $repo $locks_dir") ;
- system ("chmod 3777 $locks_dir") ;
- if ($project->enableAnonSCM()) {
- system ("chmod -R g+wXs,o+rX-w $repo") ;
+ if (forge_get_config('use_shell')) {
+ $unix_group = 'scm_' . $project->getUnixName() ;
+
+ system ("chgrp -R $unix_group $repo $locks_dir") ;
+ system ("chmod 3777 $locks_dir") ;
+ system ("echo \"SystemAuth=no\" > $repo/CVSROOT/config");
+ system ("echo \"LockDir=$locks_dir\" >> $repo/CVSROOT/config");
+ system ("echo \"UseNewInfoFmtStrings=yes\" >> $repo/CVSROOT/config");
+ if ($project->enableAnonSCM()) {
+ system ("chmod -R g+wXs,o+rX-w $repo") ;
+ system ("echo \"anonymous\" > $repo/CVSROOT/readers");
+ system ("echo \"anonymous:\" > $repo/CVSROOT/passwd");
+ } else {
+ system ("chmod -R g+wXs,o-rwx $repo") ;
+ system ("echo \"\" > $repo/CVSROOT/readers");
+ system ("echo \"\" > $repo/CVSROOT/passwd");
+ }
} else {
- system ("chmod -R g+wXs,o-rwx $repo") ;
+ $unix_user = forge_get_config ('apache_user') ;
+ $unix_group = forge_get_config ('apache_user') ;
+ system ("chown -R $unix_user:$unix_group $repo") ;
+ system ("chmod -R g-rwx,o-rwx $repo") ;
}
}
if (!$project) {
return false ;
}
-
+
if (! $project->usesPlugin ($this->name)) {
return false;
}
if ($params['mode'] == 'day') {
db_begin();
-
+
$year = $params ['year'] ;
$month = $params ['month'] ;
$day = $params ['day'] ;
$month_string = sprintf( "%04d%02d", $year, $month );
$day_begin = gmmktime( 0, 0, 0, $month, $day, $year);
$day_end = $day_begin + 86400;
-
+
$repo = forge_get_config('repos_path', 'scmcvs') . '/' . $project->getUnixName() ;
if (!is_dir ($repo) || !is_dir ("$repo/CVSROOT")) {
echo "No repository\n" ;
db_rollback () ;
return false ;
}
-
+
$cvs_co = 0;
$cvs_commit = 0;
$cvs_add = 0;
$usr_commit = array();
$usr_add = array();
-
+
$hist_file_path = $repo.'/CVSROOT/history';
- if (!file_exists($hist_file_path)
+ if (!file_exists($hist_file_path)
|| !is_readable($hist_file_path)
|| filesize($hist_file_path) == 0) {
// echo "No history file\n" ;
db_rollback () ;
return false ;
}
-
+
$hist_file =& fopen( $hist_file_path, 'r' );
if ( ! $hist_file ) {
echo "Unreadable history\n" ;
db_rollback () ;
return false ;
}
-
+
// cleaning stats_cvs_* table for the current day
$res = db_query_params ('DELETE FROM stats_cvs_group WHERE month=$1 AND day=$2 AND group_id=$3',
array ($month_string,
db_rollback () ;
return false ;
}
-
+
$res = db_query_params ('DELETE FROM stats_cvs_user WHERE month=$1 AND day=$2 AND group_id=$3',
array ($month_string,
$day,
db_rollback () ;
return false ;
}
-
+
// analyzing history file
while (!feof($hist_file)) {
continue;
}
list( $cvstime,$user,$curdir,$module,$rev,$file ) = explode( '|', $hist_line );
-
+
$type = substr($cvstime, 0, 1);
$time_parsed = hexdec( substr($cvstime, 1, 8) );
-
+
if ( ($time_parsed > $day_begin) && ($time_parsed < $day_end) ) {
if ( $type == 'M' ) {
$cvs_commit++;
db_rollback () ;
return false ;
}
-
+
// building the user list
$user_list = array_unique( array_merge( array_keys( $usr_add ), array_keys( $usr_commit ) ) );
-
+
foreach ( $user_list as $user ) {
// trying to get user id from user name
$u = &user_get_object_by_name ($user) ;
} else {
continue;
}
-
+
if (!db_query_params ('INSERT INTO stats_cvs_user (month,day,group_id,user_id,commits,adds) VALUES ($1,$2,$3,$4,$5,$6)',
array ($month_string,
$day,
if (!$project) {
return false ;
}
-
+
$group_name = $project->getUnixName() ;
- $snapshot = forge_get_config('scm_snapshots_path').'/'.$group_name.'-scm-latest.tar.gz';
- $tarball = forge_get_config('scm_tarballs_path').'/'.$group_name.'-scmroot.tar.gz';
+ $snapshot = forge_get_config('scm_snapshots_path').'/'.$group_name.'-scm-latest.tar'.util_get_compressed_file_extension();
+ $tarball = forge_get_config('scm_tarballs_path').'/'.$group_name.'-scmroot.tar'.util_get_compressed_file_extension();
if (! $project->usesPlugin ($this->name)) {
return false;
}
if (! $project->enableAnonSCM()) {
- unlink ($snapshot) ;
- unlink ($tarball) ;
+ if (file_exists($snapshot)) unlink ($snapshot) ;
+ if (file_exists($tarball)) unlink ($tarball) ;
return false;
}
if (is_dir ($repo) && is_dir ("$repo/CVSROOT")) {
$repo_exists = true ;
}
-
+
if (!$repo_exists) {
- unlink ($snapshot) ;
- unlink ($tarball) ;
+ if (file_exists($snapshot)) unlink ($snapshot) ;
+ if (file_exists($tarball)) unlink ($tarball) ;
return false ;
}
$today = date ('Y-m-d') ;
$dir = $project->getUnixName ()."-$today" ;
system ("mkdir -p $tmp/$dir") ;
- system ("cd $tmp/$dir ; cvs -d $repo checkout . > /dev/null 2>&1") ;
- system ("tar czCf $tmp $tmp/snapshot.tar.gz $dir") ;
- chmod ("$tmp/snapshot.tar.gz", 0644) ;
- copy ("$tmp/snapshot.tar.gz", $snapshot) ;
- unlink ("$tmp/snapshot.tar.gz") ;
+ system ("cd $tmp/$dir ; cvs -d $repo export -D now . > /dev/null 2>&1") ;
+ system ("tar cCf $tmp - $dir |".forge_get_config('compression_method')."> $tmp/snapshot") ;
+ chmod ("$tmp/snapshot", 0644) ;
+ copy ("$tmp/snapshot", $snapshot) ;
+ unlink ("$tmp/snapshot") ;
system ("rm -rf $tmp/$dir") ;
- system ("tar czCf $toprepo $tmp/tarball.tar.gz " . $project->getUnixName()) ;
- chmod ("$tmp/tarball.tar.gz", 0644) ;
- copy ("$tmp/tarball.tar.gz", $tarball) ;
- unlink ("$tmp/tarball.tar.gz") ;
+ system ("tar cCf $toprepo - ".$project->getUnixName() ."|".forge_get_config('compression_method')."> $tmp/tarball") ;
+ chmod ("$tmp/tarball", 0644) ;
+ copy ("$tmp/tarball", $tarball) ;
+ unlink ("$tmp/tarball") ;
system ("rm -rf $tmp") ;
}
}