function main() { $data = ensure_privileged_api_data_and_token(); $test_group_id = array_get($data, 'group'); if (!$test_group_id) { exit_with_error('TestGroupNotSpecified'); } $values = array(); if (array_key_exists('name', $data)) { $values['name'] = $data['name']; } if (array_key_exists('hidden', $data)) { $values['hidden'] = Database::to_database_boolean($data['hidden']); } if (!$values) { exit_with_error('NothingToUpdate'); } $db = connect(); $db->begin_transaction(); if (!$db->update_row('analysis_test_groups', 'testgroup', array('id' => $test_group_id), $values)) { $db->rollback_transaction(); exit_with_error('FailedToUpdateTestGroup', array('id' => $test_group_id, 'values' => $values)); } if (array_get($data, 'hidden')) { $db->query_and_get_affected_rows('UPDATE build_requests SET request_status = $1 WHERE request_group = $2 AND request_status = $3', array('canceled', $test_group_id, 'pending')); } $db->commit_transaction(); exit_with_success(); }
function main() { $data = ensure_privileged_api_data_and_token(); $analysis_task_id = array_get($data, 'task'); $bug_tracker_id = array_get($data, 'bugTracker'); $bug_number = array_get($data, 'number'); $bug_id = array_get($data, 'bugToDelete'); $db = connect(); $db->begin_transaction(); if ($bug_id) { require_format('BugToDelete', $bug_id, '/^\\d+$/'); $count = $db->query_and_get_affected_rows("DELETE FROM bugs WHERE bug_id = \$1", array($bug_id)); if ($count != 1) { $db->rollback_transaction(); exit_with_error('UnexpectedNumberOfAffectedRows', array('affectedRows' => $count)); } } else { require_format('AnalysisTask', $analysis_task_id, '/^\\d+$/'); require_format('BugTracker', $bug_tracker_id, '/^\\d+$/'); require_format('BugNumber', $bug_number, '/^\\d+$/'); $bug_id = $db->insert_row('bugs', 'bug', array('task' => $analysis_task_id, 'tracker' => $bug_tracker_id, 'number' => $bug_number)); } $db->commit_transaction(); exit_with_success(array('bugId' => $bug_id)); }
function main() { $data = ensure_privileged_api_data_and_token(); $run_id = array_get($data, 'run'); if (!$run_id) { exit_with_error('MissingRunId'); } $db = connect(); $run = $db->select_first_row('test_runs', 'run', array('id' => $run_id)); if (!$run) { exit_with_error('InvalidRun', array('run' => $run_id)); } $marked_outlier = array_get($data, 'markedOutlier'); $db->begin_transaction(); $db->update_row('test_runs', 'run', array('id' => $run_id), array('id' => $run_id, 'marked_outlier' => $marked_outlier ? 't' : 'f')); $db->commit_transaction(); exit_with_success(); }
function main() { $data = ensure_privileged_api_data_and_token(); $analysis_task_id = array_get($data, 'task'); if (!$analysis_task_id) { exit_with_error('AnalysisTaskNotSpecified'); } $values = array(); if (array_key_exists('name', $data)) { $values['name'] = $data['name']; } if (array_key_exists('result', $data)) { require_match_one_of_values('Result', $data['result'], array(null, 'progression', 'regression', 'unchanged', 'inconclusive')); $values['result'] = $data['result']; } if (array_key_exists('needed', $data)) { $needed = $data['needed']; if ($needed === null) { $values['needed'] = null; } else { if (in_array($needed, array(0, false))) { $values['needed'] = Database::to_database_boolean(false); } else { if (in_array($needed, array(1, true))) { $values['needed'] = Database::to_database_boolean(true); } else { exit_with_error('InvalidValueForFeedback', array('value' => $data['needed'])); } } } } if (!$values) { exit_with_error('NothingToUpdate'); } $db = connect(); $db->begin_transaction(); if (!$db->update_row('analysis_tasks', 'task', array('id' => $analysis_task_id), $values)) { $db->rollback_transaction(); exit_with_error('FailedToUpdateTask', array('id' => $analysis_task_id, 'values' => $values)); } $db->commit_transaction(); exit_with_success(); }
function main() { $data = ensure_privileged_api_data_and_token(); $analysis_task_id = array_get($data, 'task'); $repository_id = array_get($data, 'repository'); $revision = array_get($data, 'revision'); $kind = array_get($data, 'kind'); $commit_id_to_diassociate = array_get($data, 'commit'); $db = connect(); $db->begin_transaction(); require_format('AnalysisTask', $analysis_task_id, '/^\\d+$/'); if ($commit_id_to_diassociate) { require_format('Commit', $commit_id_to_diassociate, '/^\\d*$/'); $count = $db->query_and_get_affected_rows("DELETE FROM task_commits WHERE taskcommit_task = \$1 AND taskcommit_commit = \$2", array($analysis_task_id, $commit_id_to_diassociate)); if ($count != 1) { $db->rollback_transaction(); exit_with_error('UnexpectedNumberOfAffectedRows', array('affectedRows' => $count)); } } else { require_format('Repository', $repository_id, '/^\\d+$/'); require_format('Kind', $kind, '/^(cause|fix)$/'); $commit_info = array('repository' => $repository_id, 'revision' => $revision); $commit_rows = $db->query_and_fetch_all('SELECT commit_id FROM commits WHERE commit_repository = $1 AND commit_revision LIKE $2 LIMIT 2', array($repository_id, '%' . Database::escape_for_like($revision) . '%')); if (count($commit_rows) > 1) { $db->rollback_transaction(); exit_with_error('AmbiguousRevision', $commit_info); } else { if (!$commit_rows) { $db->rollback_transaction(); exit_with_error('CommitNotFound', $commit_info); } } $commit_id = $commit_rows[0]['commit_id']; $association = array('task' => $analysis_task_id, 'commit' => $commit_id, 'is_fix' => Database::to_database_boolean($kind == 'fix')); $commit_id = $db->update_or_insert_row('task_commits', 'taskcommit', array('task' => $analysis_task_id, 'commit' => $commit_id), $association, 'commit'); if (!$commit_id) { $db->rollback_transaction(); exit_with_error('FailedToAssociateCommit', $association); } } $db->commit_transaction(); exit_with_success(); }
function main() { $data = ensure_privileged_api_data_and_token(); $test_group_id = array_get($data, 'group'); if (!$test_group_id) { exit_with_error('TestGroupNotSpecified'); } $values = array(); if (array_key_exists('name', $data)) { $values['name'] = $data['name']; } if (!$values) { exit_with_error('NothingToUpdate'); } $db = connect(); $db->begin_transaction(); if (!$db->update_row('analysis_test_groups', 'testgroup', array('id' => $test_group_id), $values)) { $db->rollback_transaction(); exit_with_error('FailedToUpdateTestGroup', array('id' => $test_group_id, 'values' => $values)); } $db->commit_transaction(); exit_with_success(); }
function main() { $data = ensure_privileged_api_data_and_token(); $analysis_task_id = array_get($data, 'task'); $bug_tracker_id = array_get($data, 'bugTracker'); $bug_number = array_get($data, 'number'); $bug_id = array_get($data, 'bugToDelete'); $should_delete = array_get($data, 'shouldDelete'); $db = connect(); $db->begin_transaction(); if ($bug_id) { // V2 compatibility require_format('BugToDelete', $bug_id, '/^\\d+$/'); $count = $db->query_and_get_affected_rows("DELETE FROM bugs WHERE bug_id = \$1", array($bug_id)); if ($count != 1) { $db->rollback_transaction(); exit_with_error('UnexpectedNumberOfAffectedRows', array('affectedRows' => $count)); } } else { require_format('AnalysisTask', $analysis_task_id, '/^\\d+$/'); require_format('BugTracker', $bug_tracker_id, '/^\\d+$/'); require_format('BugNumber', $bug_number, '/^\\d+$/'); if ($should_delete) { // V3 $count = $db->query_and_get_affected_rows("DELETE FROM bugs WHERE bug_task = \$1 AND bug_tracker = \$2 AND bug_number = \$3", array($analysis_task_id, $bug_tracker_id, $bug_number)); if ($count < 1) { // FIXME: We should forbid duplicate bugs (same bug number on same tracker for same task) $db->rollback_transaction(); exit_with_error('UnexpectedNumberOfAffectedRows', array('affectedRows' => $count)); } } else { $bug_id = $db->insert_row('bugs', 'bug', array('task' => $analysis_task_id, 'tracker' => $bug_tracker_id, 'number' => $bug_number)); } } $db->commit_transaction(); exit_with_success(array('bugId' => $bug_id)); }