Пример #1
0
function main($post_data)
{
    $db = new Database();
    if (!$db->connect()) {
        exit_with_error('DatabaseConnectionFailure');
    }
    $report = json_decode($post_data, true);
    verify_slave($db, $report);
    $commits = array_get($report, 'commits', array());
    foreach ($commits as $commit_info) {
        if (!array_key_exists('repository', $commit_info)) {
            exit_with_error('MissingRepositoryName', array('commit' => $commit_info));
        }
        if (!array_key_exists('revision', $commit_info)) {
            exit_with_error('MissingRevision', array('commit' => $commit_info));
        }
        require_format('Revision', $commit_info['revision'], '/^[A-Za-z0-9 \\.]+$/');
        if (array_key_exists('author', $commit_info) && !is_array($commit_info['author'])) {
            exit_with_error('InvalidAuthorFormat', array('commit' => $commit_info));
        }
    }
    $db->begin_transaction();
    foreach ($commits as $commit_info) {
        $repository_id = $db->select_or_insert_row('repositories', 'repository', array('name' => $commit_info['repository']));
        if (!$repository_id) {
            $db->rollback_transaction();
            exit_with_error('FailedToInsertRepository', array('commit' => $commit_info));
        }
        $author = array_get($commit_info, 'author');
        $committer_id = NULL;
        if ($author) {
            $account = array_get($author, 'account');
            $committer_query = array('repository' => $repository_id, 'account' => $account);
            $committer_data = $committer_query;
            $name = array_get($author, 'name');
            if ($name) {
                $committer_data['name'] = $name;
            }
            $committer_id = $db->update_or_insert_row('committers', 'committer', $committer_query, $committer_data);
            if (!$committer_id) {
                $db->rollback_transaction();
                exit_with_error('FailedToInsertCommitter', array('committer' => $committer_data));
            }
        }
        $parent_revision = array_get($commit_info, 'parent');
        $parent_id = NULL;
        if ($parent_revision) {
            $parent_commit = $db->select_first_row('commits', 'commit', array('repository' => $repository_id, 'revision' => $parent_revision));
            if (!$parent_commit) {
                $db->rollback_transaction();
                exit_with_error('FailedToFindParentCommit', array('commit' => $commit_info));
            }
            $parent_id = $parent_commit['commit_id'];
        }
        $data = array('repository' => $repository_id, 'revision' => $commit_info['revision'], 'parent' => $parent_id, 'order' => array_get($commit_info, 'order'), 'time' => array_get($commit_info, 'time'), 'committer' => $committer_id, 'message' => array_get($commit_info, 'message'), 'reported' => true);
        $db->update_or_insert_row('commits', 'commit', array('repository' => $repository_id, 'revision' => $data['revision']), $data);
    }
    $db->commit_transaction();
    exit_with_success();
}
Пример #2
0
function main($id, $path, $post_data)
{
    if (!$id && (count($path) < 1 || count($path) > 2)) {
        exit_with_error('InvalidRequest');
    }
    $db = new Database();
    if (!$db->connect()) {
        exit_with_error('DatabaseConnectionFailure');
    }
    $report = $post_data ? json_decode($post_data, true) : array();
    $updates = array_get($report, 'buildRequestUpdates');
    if ($updates) {
        verify_slave($db, $report);
        update_builds($db, $updates);
    }
    $requests_fetcher = new BuildRequestsFetcher($db);
    if ($id) {
        $requests_fetcher->fetch_request($id);
    } else {
        $triggerable_query = array('name' => array_get($path, 0));
        $triggerable = $db->select_first_row('build_triggerables', 'triggerable', $triggerable_query);
        if (!$triggerable) {
            exit_with_error('TriggerableNotFound', $triggerable_query);
        }
        $requests_fetcher->fetch_incomplete_requests_for_triggerable($triggerable['triggerable_id']);
    }
    exit_with_success(array('buildRequests' => $requests_fetcher->results_with_resolved_ids(), 'rootSets' => $requests_fetcher->root_sets(), 'roots' => $requests_fetcher->roots(), 'updates' => $updates));
}
function main($post_data)
{
    $db = new Database();
    if (!$db->connect()) {
        exit_with_error('DatabaseConnectionFailure');
    }
    $report = json_decode($post_data, true);
    verify_slave($db, $report);
    $triggerable_name = array_get($report, 'triggerable');
    $triggerable = $db->select_first_row('build_triggerables', 'triggerable', array('name' => $triggerable_name));
    if (!$triggerable) {
        exit_with_error('TriggerableNotFound', array('triggerable' => $triggerable_name));
    }
    $triggerable_id = $triggerable['triggerable_id'];
    $configurations = array_get($report, 'configurations');
    if (!is_array($configurations)) {
        exit_with_error('InvalidConfigurations', array('configurations' => $configurations));
    }
    foreach ($configurations as $entry) {
        if (!is_array($entry) || !array_key_exists('test', $entry) || !array_key_exists('platform', $entry)) {
            exit_with_error('InvalidConfigurationEntry', array('configurationEntry' => $entry));
        }
    }
    $db->begin_transaction();
    if ($db->query_and_get_affected_rows('DELETE FROM triggerable_configurations WHERE trigconfig_triggerable = $1', array($triggerable_id)) === false) {
        $db->rollback_transaction();
        exit_with_error('FailedToDeleteExistingConfigurations', array('triggerable' => $triggerable_id));
    }
    foreach ($configurations as $entry) {
        $config_info = array('test' => $entry['test'], 'platform' => $entry['platform'], 'triggerable' => $triggerable_id);
        if (!$db->insert_row('triggerable_configurations', 'trigconfig', $config_info, null)) {
            $db->rollback_transaction();
            exit_with_error('FailedToInsertConfiguration', array('entry' => $entry));
        }
    }
    $db->commit_transaction();
    exit_with_success();
}
Пример #4
0
function ensure_privileged_api_data_and_token_or_slave($db)
{
    $data = ensure_privileged_api_data();
    if (should_authenticate_as_slave($data)) {
        verify_slave($db, $data);
    } else {
        if (!verify_token(array_get($data, 'token'))) {
            exit_with_error('InvalidToken');
        }
    }
    return $data;
}