blob: 71c8fb9228ca0a2362f90f60f667d8cea4cc1b5e [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)) {
// Skip web directories
if (preg_match('/^\/gitroot\/www\.eclipse\.org\//', $repository)) continue;
// Skip the gerrit directory
if (preg_match('/^\/gitroot\/gerrit\//', $repository)) continue;
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.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.gmt.amw
/svnroot/modeling/org.eclipse.mdt.modisco
/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.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/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.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 now() on update now()
);";
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));
$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', description='$description' where path='$repository'");
}
function captureSvnRepository($path) {
if (!preg_match('/^\/svnroot\/([^\/]+)\/((?:org\.eclipse\.)?(.+))$/', $path, $matches)) return;
$name = mysql_real_escape_string($matches[3]);
$repo = mysql_real_escape_string($matches[2]);
$toplevel = mysql_real_escape_string($matches[1]);
$http = "http://dev.eclipse.org/svnroot/$toplevel/$repo";
if (!isValidUrl($http)) return;
dashboard_sql("insert ignore into repositories (name, path) values('$name', '$path')");
dashboard_sql("update repositories set name='$name', ssh='', http='$http', 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\/(.+)\.git$/', $path, $matches);
$partial = $matches[1];
$gerrit = "https://git.eclipse.org/r/p/$partial";
$known = getGerritRepositoryData();
if (isset($known[$partial])) return $gerrit;
return '';
}
/**
* Pull in the list of known repositories from Gerrit.
*
* TODO This only works for eclipse.org
*
* @return mixed
*/
function getGerritRepositoryData() {
$file = fopen('https://git.eclipse.org/r/projects/', 'r');
fgets($file); // Skip the first line
$data = '';
while ($line = fgets($file)) $data .= $line;
fclose($file);
return json_decode($data, true);
}
/**
* @deprecated
* @param unknown $path
* @return string
*/
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 @trim(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;
}
?>