X-Git-Url: http://git.webkit.org/?p=WebKit-https.git;a=blobdiff_plain;f=Websites%2Fperf.webkit.org%2Fpublic%2Fapi%2Freport-commits.php;h=fb2cab40d1b39de506115823c72bffda04120eba;hp=2c3fee3f78972e2b4615df08e5b95883d32326f0;hb=245aee9884212eb91c4a491b70069d1284b13934;hpb=c0265c6128e4f68d7f5806e171b0239e28ab8a0c diff --git a/Websites/perf.webkit.org/public/api/report-commits.php b/Websites/perf.webkit.org/public/api/report-commits.php index 2c3fee3..fb2cab4 100644 --- a/Websites/perf.webkit.org/public/api/report-commits.php +++ b/Websites/perf.webkit.org/public/api/report-commits.php @@ -9,7 +9,7 @@ function main($post_data) { $report = json_decode($post_data, true); - verify_builder($db, $report); + verify_slave($db, $report); $commits = array_get($report, 'commits', array()); @@ -18,12 +18,9 @@ function main($post_data) { exit_with_error('MissingRepositoryName', array('commit' => $commit_info)); if (!array_key_exists('revision', $commit_info)) exit_with_error('MissingRevision', array('commit' => $commit_info)); - if (!ctype_alnum($commit_info['revision'])) - exit_with_error('InvalidRevision', array('commit' => $commit_info)); - if (!array_key_exists('time', $commit_info)) - exit_with_error('MissingTimestamp', array('commit' => $commit_info)); - if (!array_key_exists('author', $commit_info) || !is_array($commit_info['author'])) - exit_with_error('MissingAuthorOrInvalidFormat', 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(); @@ -34,25 +31,41 @@ function main($post_data) { exit_with_error('FailedToInsertRepository', array('commit' => $commit_info)); } - $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) { + $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('FailedToFindParentCommit', array('commit' => $commit_info)); + exit_with_error('FailedToInsertCommitter', array('committer' => $committer_data)); } - $parent_id = $parent_commit['commit_id']; + } + + $previous_commit_revision = array_get($commit_info, 'previousCommit'); + $previous_commit_id = NULL; + if ($previous_commit_revision) { + $previous_commit = $db->select_first_row('commits', 'commit', array('repository' => $repository_id, 'revision' => $previous_commit_revision)); + if (!$previous_commit) { + $db->rollback_transaction(); + exit_with_error('FailedToFindPreviousCommit', array('commit' => $commit_info)); + } + $previous_commit_id = $previous_commit['commit_id']; } $data = array( 'repository' => $repository_id, 'revision' => $commit_info['revision'], - 'parent' => $parent_id, - 'time' => $commit_info['time'], - 'author_name' => array_get($commit_info['author'], 'name'), - 'author_email' => array_get($commit_info['author'], 'email'), - 'message' => $commit_info['message'], + 'previous_commit' => $previous_commit_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); @@ -62,20 +75,6 @@ function main($post_data) { exit_with_success(); } -function verify_builder($db, $report) { - array_key_exists('builderName', $report) or exit_with_error('MissingBuilderName'); - array_key_exists('builderPassword', $report) or exit_with_error('MissingBuilderPassword'); - - $builder_info = array( - 'name' => $report['builderName'], - 'password_hash' => hash('sha256', $report['builderPassword']) - ); - - $matched_builder = $db->select_first_row('builders', 'builder', $builder_info); - if (!$matched_builder) - exit_with_error('BuilderNotFound', array('name' => $builder_info['name'])); -} - main($HTTP_RAW_POST_DATA); ?>