예제 #1
0
function main($path)
{
    if (count($path) > 1) {
        exit_with_error('InvalidRequest');
    }
    $db = new Database();
    if (!$db->connect()) {
        exit_with_error('DatabaseConnectionFailure');
    }
    $task_id = array_get($_GET, 'task');
    $query = array();
    if ($task_id) {
        $triggerable = find_triggerable_for_task($db, $task_id);
        if (!$triggerable) {
            exit_with_error('TriggerableNotFoundForTask', array('task' => $task_id));
        }
        $query['id'] = $triggerable['id'];
    }
    $id_to_triggerable = array();
    foreach ($db->select_rows('build_triggerables', 'triggerable', $query) as $row) {
        $id = $row['triggerable_id'];
        $repositories = array();
        $id_to_triggerable[$id] = array('id' => $id, 'name' => $row['triggerable_name'], 'acceptedRepositories' => &$repositories);
    }
    foreach ($db->select_rows('triggerable_repositories', 'trigrepo', array()) as $row) {
        $triggerable = array_get($id_to_triggerable, $row['trigrepo_triggerable']);
        if ($triggerable) {
            array_push($triggerable['acceptedRepositories'], $row['trigrepo_repository']);
        }
    }
    exit_with_success(array('triggerables' => array_values($id_to_triggerable)));
}
예제 #2
0
function main()
{
    $db = connect();
    $data = ensure_privileged_api_data_and_token_or_slave($db);
    $author = remote_user_name($data);
    $task_id = array_get($data, 'task');
    $name = array_get($data, 'name');
    $root_sets = array_get($data, 'rootSets');
    $repetition_count = intval(array_get($data, 'repetitionCount', 1));
    if (!$name) {
        exit_with_error('MissingName');
    }
    if (!$root_sets) {
        exit_with_error('MissingRootSets');
    }
    if ($repetition_count < 1) {
        exit_with_error('InvalidRepetitionCount', array('repetitionCount' => $repetition_count));
    }
    $task = $db->select_first_row('analysis_tasks', 'task', array('id' => $task_id));
    if (!$task) {
        exit_with_error('InvalidTask', array('task' => $task_id));
    }
    $triggerable = find_triggerable_for_task($db, $task_id);
    if (!$triggerable) {
        exit_with_error('TriggerableNotFoundForTask', array('task' => $task_id));
    }
    $commit_sets = commit_sets_from_root_sets($db, $root_sets);
    $db->begin_transaction();
    $root_set_id_list = array();
    foreach ($commit_sets as $commit_list) {
        $root_set_id = $db->insert_row('root_sets', 'rootset', array());
        foreach ($commit_list as $commit) {
            $db->insert_row('roots', 'root', array('set' => $root_set_id, 'commit' => $commit), 'commit');
        }
        array_push($root_set_id_list, $root_set_id);
    }
    $group_id = $db->insert_row('analysis_test_groups', 'testgroup', array('task' => $task['task_id'], 'name' => $name, 'author' => $author));
    $order = 0;
    for ($i = 0; $i < $repetition_count; $i++) {
        foreach ($root_set_id_list as $root_set_id) {
            $db->insert_row('build_requests', 'request', array('triggerable' => $triggerable['id'], 'platform' => $triggerable['platform'], 'test' => $triggerable['test'], 'group' => $group_id, 'order' => $order, 'root_set' => $root_set_id));
            $order++;
        }
    }
    $db->commit_transaction();
    exit_with_success(array('testGroupId' => $group_id));
}