Example #1
0
function main($paths)
{
    if (count($paths) < 1 || count($paths) > 2) {
        exit_with_error('InvalidRequest');
    }
    $db = new Database();
    if (!$db->connect()) {
        exit_with_error('DatabaseConnectionFailure');
    }
    $fetcher = new CommitLogFetcher($db);
    if (!is_numeric($paths[0])) {
        $repository_id = $fetcher->repository_id_from_name($paths[0]);
        if (!$repository_id) {
            exit_with_error('RepositoryNotFound', array('repositoryName' => $paths[0]));
        }
    } else {
        $repository_id = intval($paths[0]);
    }
    $filter = array_get($paths, 1);
    $commits = array();
    if (!$filter) {
        $keyword = array_get($_GET, 'keyword');
        $from = array_get($_GET, 'from');
        $to = array_get($_GET, 'to');
        $commits = $fetcher->fetch_between($repository_id, $from, $to, $keyword);
    } else {
        if ($filter == 'oldest') {
            $commits = $fetcher->fetch_oldest($repository_id);
        } else {
            if ($filter == 'latest') {
                $commits = $fetcher->fetch_latest($repository_id);
            } else {
                if ($filter == 'last-reported') {
                    $commits = $fetcher->fetch_last_reported($repository_id);
                } else {
                    if (ctype_alnum($filter)) {
                        $commits = $fetcher->fetch_revision($repository_id, $filter);
                    } else {
                        $matches = array();
                        if (!preg_match('/([A-Za-z0-9]+)[\\:\\-]([A-Za-z0-9]+)/', $filter, $matches)) {
                            exit_with_error('UnknownFilter', array('repositoryName' => $repository_name, 'filter' => $filter));
                        }
                        $commits = $fetcher->fetch_between($repository_id, $matches[1], $matches[2]);
                    }
                }
            }
        }
    }
    if (!is_array($commits)) {
        exit_with_error('FailedToFetchCommits', array('repository' => $repository_id, 'filter' => $filter));
    }
    exit_with_success(array('commits' => $commits));
}
function fetch_associated_data_for_tasks($db, &$tasks)
{
    $task_ids = array();
    $task_by_id = array();
    foreach ($tasks as &$task) {
        array_push($task_ids, $task['id']);
        $task_by_id[$task['id']] =& $task;
    }
    $bugs = $db->query_and_fetch_all('SELECT bug_id AS "id", bug_task AS "task", bug_tracker AS "bugTracker", bug_number AS "number"
        FROM bugs WHERE bug_task = ANY ($1)', array('{' . implode(', ', $task_ids) . '}'));
    if (!is_array($bugs)) {
        exit_with_error('FailedToFetchBugs');
    }
    foreach ($bugs as $bug) {
        $associated_task =& $task_by_id[$bug['task']];
        array_push($associated_task['bugs'], $bug['id']);
    }
    $commit_log_fetcher = new CommitLogFetcher($db);
    $commits = $commit_log_fetcher->fetch_for_tasks($task_ids, $task_by_id);
    if (!is_array($commits)) {
        exit_with_error('FailedToFetchCommits');
    }
    $task_build_counts = $db->query_and_fetch_all('SELECT
        testgroup_task AS "task",
        count(testgroup_id) as "total",
        sum(case when request_status = \'failed\' or request_status = \'completed\' or request_status = \'canceled\' then 1 else 0 end) as "finished"
        FROM analysis_test_groups, build_requests
        WHERE request_group = testgroup_id AND testgroup_task = ANY($1) GROUP BY testgroup_task', array('{' . implode(', ', $task_ids) . '}'));
    if (!is_array($task_build_counts)) {
        exit_with_error('FailedToFetchTestGroups');
    }
    foreach ($task_build_counts as $build_count) {
        $task =& $task_by_id[$build_count['task']];
        $task['buildRequestCount'] = $build_count['total'];
        $task['finishedBuildRequestCount'] = $build_count['finished'];
        $task['category'] = determine_category($task);
    }
    return array('analysisTasks' => $tasks, 'bugs' => $bugs, 'commits' => $commits);
}