blob: bd2bc3dc072c2d3d371be7e811f6fef25d048c36 [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/tycho';
//$path = '/home/wayne/git/www';
scanForRepositories($path);
function scanForRepositories($path) {
createTables();
$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)) {
captureRepository(trim($repository));
}
pclose($handle);
}
function createTables() {
$sql = "create table if not exists repositories (
name varchar(100) not null,
path varchar(255) not null primary key,
git varchar(255),
gerrit varchar(255),
http varchar(255),
github varchar(255),
description varchar(1024)
);";
dashboard_sql(preg_replace('/\s/', ' ', $sql));
}
function captureRepository($repository) {
$name = mysql_real_escape_string(getName($repository));
$git = mysql_real_escape_string("git://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));
$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', gerrit='$gerrit', http='$http', github='$github', description='$description' where path='$repository'");
}
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 $this->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 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;
}
// Pull in a list of repostories
// For each...
// Grab the description file, remember the contents.
// Build the probable Gerrit URL, test. If not 404, remember.
// Build the probable GitHub URL, test. If not 404, remember.
?>