blob: 24e68d99bffe424396acb822ab834d133341f62f [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2010, 2012 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wayne Beaton (Eclipse Foundation)- initial API and implementation
*******************************************************************************/
require_once dirname(__FILE__) . '/common/common-functions.inc';
$path = '/gitroot/';
//$path = '/home/wayne/git/www';
scanForRepositories($path);
function scanForRepositories($path) {
createTables();
scanForGitRepositories($path);
scanForSvnRepositories('/svnroot/');
}
function scanForGitRepositories($path) {
$find="find $path -type d -name *.git | xargs -I '{}' git --git-dir={} rev-parse --git-dir 2> /dev/null";
$handle = popen($find, 'r');
while ($repository = fgets($handle)) {
captureGitRepository(trim($repository));
}
pclose($handle);
}
function scanForSvnRepositories($path) {
// $find="find /svnroot/ -type f -name fs-type 2> /dev/null | sed 's|/db/fs-type||'";
// $handle = popen($find, 'r');
// while ($repository = fgets($handle)) {
// captureSvnRepository(trim($repository));
// }
// pclose($handle);
/*
* /svnroot/ isn't accessible on Pebbles. I could ask webmaster, but what's
* the point? We're not making any new SVN repositories. Instead here's a
* hard-coded list of the SVN repositories we have in Oct 2012.
*/
$svn = "/svnroot/modeling/org.eclipse.gmt.mofscript
/svnroot/modeling/org.eclipse.gmt.am3
/svnroot/modeling/org.eclipse.emft.henshin
/svnroot/modeling/test.tmf.xtext
/svnroot/modeling/org.eclipse.mdt.sphinx
/svnroot/modeling/test.m2t.xpand
/svnroot/modeling/org.eclipse.emft.edapt
/svnroot/modeling/org.eclipse.epsilon
/svnroot/modeling/org.eclipse.emft.facet
/svnroot/modeling/org.eclipse.emft.facet.back
/svnroot/modeling/org.eclipse.gmt.viatra2
/svnroot/modeling/org.eclipse.mdt.papyrus
/svnroot/modeling/org.eclipse.emft.featuremodel
/svnroot/modeling/org.eclipse.emf.egf
/svnroot/modeling/org.eclipse.tmf.tcs
/svnroot/modeling/org.eclipse.emf.mxf
/svnroot/modeling/org.eclipse.gmt.amw
/svnroot/modeling/org.eclipse.mdt.modisco
/svnroot/modeling/org.eclipse.gmt.omcw
/svnroot/technology/org.eclipse.imp
/svnroot/technology/eu.geclipse
/svnroot/technology/org.eclipse.scout
/svnroot/technology/org.eclipse.stem
/svnroot/technology/org.eclipse.higgins
/svnroot/technology/org.eclipse.vtp
/svnroot/technology/org.eclipse.rtsc
/svnroot/technology/org.eclipse.osee
/svnroot/technology/org.eclipse.subversive
/svnroot/sandbox
/svnroot/rt/org.eclipse.gemini.blueprint
/svnroot/rt/org.eclipse.jetty
/svnroot/rt/org.eclipse.gemini.jpa
/svnroot/rt/org.eclipse.gemini
/svnroot/rt/org.eclipse.persistence
/svnroot/rt/org.eclipse.gemini.management
/svnroot/rt/org.eclipse.smila
/svnroot/rt/org.eclipse.gemini.naming
/svnroot/tools/org.eclipse.buckminster
/svnroot/tools/org.eclipse.mylyn.reviews
/svnroot/tools/org.eclipse.tcf
/svnroot/tools/org.eclipse.buckminster.back
/svnroot/tools/org.eclipse.objectteams
/svnroot/tools/org.eclipse.sequoyah
/svnroot/tools/org.eclipse.windowbuilder
/svnroot/tools/org.eclipse.mat
/svnroot/eclipse/org.eclipse.ufacekit.back
/svnroot/eclipse/org.eclipse.ufacekit
/svnroot/soa/org.eclipse.ebpm.120612
/svnroot/soa/org.eclipse.stp.sca-tools
/svnroot/soa/org.eclipse.swordfish
/svnroot/soa/org.eclipse.ebam
/svnroot/soa/org.eclipse.jwt
/svnroot/soa/org.eclipse.ebpm
/svnroot/soa/org.eclipse.mangrove
/svnroot/soa/org.eclipse.ebpm.bad";
foreach(split("\n", $svn) as $path) {
captureSvnRepository($path);
}
}
function createTables() {
$sql = "create table if not exists repositories (
name varchar(100) not null,
path varchar(255) not null primary key,
git varchar(255),
ssh varchar(255),
gerrit varchar(255),
http varchar(255),
github varchar(255),
google varchar(255),
description varchar(1024),
ts timestamp default current_timestamp on update current_timestamp
);";
dashboard_sql(preg_replace('/\s/', ' ', $sql));
}
function captureGitRepository($repository) {
$name = mysql_real_escape_string(getName($repository));
$git = mysql_real_escape_string("git://git.eclipse.org$repository");
$ssh = mysql_real_escape_string("ssh://userid@git.eclipse.org$repository");
$gerrit = mysql_real_escape_string(getGerritUrl($repository));
$http = mysql_real_escape_string(getHttpUrl($repository));
$github = mysql_real_escape_string(getGitHubUrl($repository));
$google = mysql_real_escape_string(getGoogleSourceUrl($repository));
$description = mysql_real_escape_string(getDescription($repository));
dashboard_sql("insert ignore into repositories (name, path) values('$name', '$repository')");
dashboard_sql("update repositories set name='$name', git='$git', ssh='$ssh', gerrit='$gerrit', google='$google', http='$http', github='$github', description='$description' where path='$repository'");
}
function captureSvnRepository($path) {
if (!preg_match('/^\/svnroot\/(?:[^\/]+\/)?(?:org\.eclipse\.)?(.+)$/', $path, $matches)) return;
if (!isValidUrl("https://dev.eclipse.org$path")) return;
$name = mysql_real_escape_string($matches[1]);
$ssh = mysql_real_escape_string("https://dev.eclipse.org$path");
dashboard_sql("insert ignore into repositories (name, path) values('$name', '$path')");
dashboard_sql("update repositories set name='$name', ssh='$ssh', http='$ssh', description='The project\'s SVN Repository' where path='$path'");
}
function getName($path) {
if (preg_match('/org\.eclipse\.(.*)\.git$/', $path, $matches)) {
return $matches[1];
} else if (preg_match('/org\.eclipse\.(.*)$/', $path, $matches)) {
return $matches[1];
} else if (preg_match('/([^\/]*)\.git$/', $path, $matches)) {
return $matches[1];
} else if (preg_match('/([^\/]*)$/', $path, $matches)) {
return $matches[1];
} else {
return $path;
}
}
function getHttpUrl($path) {
preg_match('/\/gitroot\/(.+)/', $path, $matches);
$partial = $matches[1];
return "http://git.eclipse.org/c/$partial";
}
function getGerritUrl($path) {
preg_match('/\/gitroot\/(.+)/', $path, $matches);
$partial = $matches[1];
$gerrit = "https://git.eclipse.org/r/p/$partial";
return isValidUrl($gerrit) ? $gerrit : '';
}
function getGitHubUrl($path) {
$url = "https://github.com/eclipse/" . getName($path);
return isValidUrl($url) ? $url : '';
}
function getGoogleSourceUrl($path) {
preg_match('/^\/gitroot\/(.*)\.git$/', $path, $matches);
$name = $matches[1];
$url = "https://eclipse.googlesource.com/$name/";
return isValidUrl($url) ? $url : '';
}
function getDescription($path) {
return @file_get_contents("$path/description");
}
function isValidUrl($url) {
foreach(get_headers($url) as $header) {
if (preg_match('/^HTTP.*(\d)\d\d/', $header, $matches)) {
// We are happy with 200 or 300 codes.
return $matches[1] == '2' || $matches[1] == '3';
}
}
return false;
}
?>