[JSC] Reenable ChakraCore/test/Math/max.js on ARMv7 and MIPS
[WebKit.git] / Websites / perf.webkit.org / public / admin / platforms.php
1 <?php
2
3 include('../include/admin-header.php');
4
5 function merge_platforms($platform_to_merge, $destination_platform) {
6     global $db;
7
8     $db->begin_transaction();
9
10     // First, move all test runs to the test configurations in the destination for all test configurations that
11     // exist in both the original platform and the platform into which we're merging.
12     if ($db->query_and_get_affected_rows('UPDATE test_runs SET run_config = destination.config_id
13         FROM test_configurations as merged, test_configurations as destination
14         WHERE merged.config_platform = $1 AND destination.config_platform = $2
15             AND run_config = merged.config_id
16             AND destination.config_type = merged.config_type
17             AND destination.config_metric = merged.config_metric', array($platform_to_merge, $destination_platform)) === FALSE) {
18         $db->rollback_transaction();
19         return notice("Failed to migrate test runs for $platform_to_merge that have test configurations in $destination_platform.");
20     }
21
22     // Then migrate test configurations that don't exist in the destination platform to the new platform
23     // so that test runs associated with those configurations are moved to the destination.
24     if ($db->query_and_get_affected_rows('UPDATE test_configurations as merged SET config_platform = $2
25         WHERE config_platform = $1 AND NOT EXISTS (SELECT * FROM test_configurations as destination WHERE
26             merged.config_platform = $1 AND destination.config_platform = $2
27                 AND destination.config_type = merged.config_type
28                 AND destination.config_metric = merged.config_metric)',
29         array($platform_to_merge, $destination_platform)) === FALSE) {
30         $db->rollback_transaction();
31         return notice("Failed to migrate test configurations for $platform_to_merge.");
32     }
33
34     if ($db->query_and_fetch_all('SELECT * FROM test_runs, test_configurations WHERE run_config = config_id AND config_platform = $1 LIMIT 1', array($platform_to_merge))) {
35         // We should never reach here.
36         $db->rollback_transaction();
37         return notice('Failed to migrate all test runs.');
38     }
39
40     if ($db->query_and_get_affected_rows('UPDATE analysis_tasks SET task_platform = $1 WHERE task_platform = $2',
41         array($destination_platform, $platform_to_merge)) === FALSE) {
42         $db->rollback_transaction();
43         return notice('Failed to migrate analysis tasks.');
44     }
45
46     $db->query_and_get_affected_rows('DELETE FROM triggerable_configurations WHERE trigconfig_platform = $1',
47         array($platform_to_merge));
48
49     if ($db->query_and_get_affected_rows('UPDATE build_requests SET request_platform = $1 WHERE request_platform = $2',
50         array($destination_platform, $platform_to_merge)) === FALSE) {
51         $db->rollback_transaction();
52         return notice('Failed to migrate build requests.');
53     }
54
55     $db->query_and_get_affected_rows('DELETE FROM platforms WHERE platform_id = $1', array($platform_to_merge));
56     $db->commit_transaction();
57 }
58
59 if ($db) {
60     if ($action == 'update') {
61         if (update_field('platforms', 'platform', 'name')
62             || update_field('platforms', 'platform', 'group')
63             || update_boolean_field('platforms', 'platform', 'hidden'))
64             regenerate_manifest();
65         else
66             notice('Invalid parameters.');
67     } else if ($action == 'merge')
68         merge_platforms(intval($_POST['id']), intval($_POST['destination']));
69
70     $platforms = $db->fetch_table('platforms', 'platform_name');
71
72     function merge_list($platform_row) {
73         global $db;
74         global $platforms;
75
76         $id = $platform_row['platform_id'];
77         $content = <<< END
78 <form method="POST"><input type="hidden" name="id" value="$id">
79 <select name="destination">
80 END;
81
82         foreach ($platforms as $platform) {
83             if ($platform['platform_id'] == $id)
84                 continue;
85             $content .= <<< END
86 <option value="{$platform['platform_id']}">{$platform['platform_name']}</option>
87 END;
88         }
89
90         $content .= <<< END
91 </select>
92 <button type="submit" name="action" value="merge">Merge</button>
93 </form>
94 END;
95         return array($content);
96     }
97
98     $platform_group_options = $db->fetch_table('platform_groups', 'platformgroup_name');
99     array_push($platform_group_options, array('platformgroup_id' => NULL, 'platformgroup_name' => '-'));
100     function platform_group_list($platform_row)
101     {
102         global $platform_group_options;
103         $id = intval($platform_row['platform_id']);
104         $platform_group_id = array_get($platform_row, 'platform_group');
105         $content = <<< END
106 <form method="POST"><input type="hidden" name="id" value="$id">
107 <select name="group">
108 END;
109
110         foreach ($platform_group_options as &$group_option) {
111             $selection_string = $group_option['platformgroup_id'] == $platform_group_id ? " selected" : "";
112             $content .= <<< END
113 <option value="{$group_option['platformgroup_id']}"{$selection_string}>{$group_option['platformgroup_name']}</option>
114 END;
115         }
116
117         $content .= <<< END
118 </select>
119 <button type="submit" name="action" value="update">Update</button>
120 </form>
121 END;
122         return array($content);
123     }
124
125     $page = new AdministrativePage($db, 'platforms', 'platform', array(
126         'name' => array('editing_mode' => 'string'),
127         'hidden' => array('editing_mode' => 'boolean'),
128         'platform group' => array('custom' => function ($platform_row) { return platform_group_list($platform_row); }),
129         'merge into' => array('custom' => function ($platform_row) { return merge_list($platform_row); }),
130     ));
131
132     $page->render_table('name');
133 }
134
135 include('../include/admin-footer.php');
136
137 ?>