59 lines
2.1 KiB
PHP
59 lines
2.1 KiB
PHP
<?php
|
|
|
|
require_once('../include/json-header.php');
|
|
require_once('../include/commit-log-fetcher.php');
|
|
|
|
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_id = CommitLogFetcher::find_commit_id_by_revision($db, $repository_id, $revision);
|
|
if ($commit_id < 0) {
|
|
$db->rollback_transaction();
|
|
exit_with_error('AmbiguousRevision', $commit_info);
|
|
} else if (!$commit_id) {
|
|
$db->rollback_transaction();
|
|
exit_with_error('CommitNotFound', $commit_info);
|
|
}
|
|
|
|
$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();
|
|
}
|
|
|
|
main();
|
|
|
|
?>
|