blob: a8a27b74aa4cc63fc5d73112c50bf881479ae1c4 [file] [log] [blame]
Kit Lo3c7ce142013-03-02 18:22:40 -05001<?php
2/*******************************************************************************
3 * Copyright (c) 2013 IBM Corporation and others.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Kit Lo (IBM) - [402192] Extract project source files from Git repositories for translation
11 *******************************************************************************/
12
13/*
14 * Extract properties or js files from update sites
15 */
16$temp_dir = "/tmp/tmp-babel/";
17$files = array();
18$files_collected = array(array());
19
20header("Content-type: text/plain");
21include("global.php");
22InitPage("");
23
24$headless = 0;
25if (!isset($User)) {
26 echo "User not defined - running headless\n";
27 $User = getGenieUser();
28 $headless = 1;
29}
30
31require(dirname(__FILE__) . "/../classes/file/file.class.php");
32global $dbh;
33
34$temp_unzips_dir = $temp_dir . "unzips/";
35if (is_dir($temp_unzips_dir)) {
36 exec("rm -rf $temp_unzips_dir");
37}
38mkdir($temp_unzips_dir, 0777, TRUE) || die("***ERROR: Cannot create working directory: $temp_unzips_dir\n");
39
40global $addon;
41$context = $addon->callHook('context');
42if ($context == "live") {
43 $rsync_host = "download.eclipse.org::eclipseFullMirror/";
44} else {
45 $rsync_host = "rsync.osuosl.org::eclipse/";
46}
47
48# Get all active update sites
49$sql = "SELECT * FROM project_source_locations AS m
50INNER JOIN release_train_projects AS r ON r.project_id = m.project_id AND r.version = m.version
51INNER JOIN release_trains AS t on t.train_id = r.train_id
52WHERE t.is_active = 1";
kitlo2c8d8a92018-04-19 13:25:09 -040053$rs_maps = mysqli_query($dbh, $sql);
kitlo1d027092018-04-19 17:44:07 -040054while($update_site = mysqli_fetch_assoc($rs_maps)) {
Kit Lo3c7ce142013-03-02 18:22:40 -050055 $site_url = $update_site['location'];
56 $project_id = $update_site['project_id'];
57 $version = $update_site['version'];
58
kitlo7cb16602019-01-11 00:13:47 -050059 # fix WTP version "3.12 (2018-12)"
kitlo79e51b02019-01-11 03:25:20 -050060 $version_dir = str_replace(" ", ".", $version);
61 $version_dir = str_replace("(", "", $version_dir);
62 $version_dir = str_replace(")", "", $version_dir);
kitlo7cb16602019-01-11 00:13:47 -050063
Kit Lo3c7ce142013-03-02 18:22:40 -050064 # Sample dirs:
65 # $site_url http://git.eclipse.org/c/platform/eclipse.platform.git/snapshot/I20130101-0800.zip
66 # $temp_snapshots_dir /tmp/tmp-babel/snapshots/eclipse/4.3/
67 # $temp_unzips_dir /tmp/tmp-babel/unzips/eclipse/4.3/
kitlo9d9d3dc2019-01-11 02:23:42 -050068 $temp_snapshots_dir = $temp_dir . "snapshots/" . $project_id . "/" . $version_dir . "/";
69 $temp_unzips_dir = $temp_dir . "unzips/" . $project_id . "/" . $version_dir . "/";
Kit Lo3c7ce142013-03-02 18:22:40 -050070
71 # Collect all files for this project version
72 if (!(isset($files_collected[$project_id]) && isset($files_collected[$project_id][$version]))) {
73 $files_collected[$project_id][$version] = 1;
74 $sql = "SELECT * FROM files WHERE project_id = \"$project_id\" AND version = \"$version\"";
kitlo2c8d8a92018-04-19 13:25:09 -040075 $rs_files = mysqli_query($dbh, $sql);
kitlo1d027092018-04-19 17:44:07 -040076 while ($myrow_files = mysqli_fetch_assoc($rs_files)) {
Kit Lo3c7ce142013-03-02 18:22:40 -050077 $file = new File();
78 $file->project_id = $myrow_files['project_id'];
79 $file->version = $myrow_files['version'];
80 $file->name = $myrow_files['name'];
81 $file->plugin_id = $myrow_files['plugin_id'];
82 $file->file_id = $myrow_files['file_id'];
83 $file->is_active = $myrow_files['is_active'];
84 $files[$file->file_id] = $file;
85 }
86 }
87
88 # Collect all plugin exclude patterns for this project version
89 $sql = "SELECT pattern FROM plugin_exclude_patterns WHERE project_id = \"$project_id\" AND version = \"$version\"";
kitlo2c8d8a92018-04-19 13:25:09 -040090 $rs_patterns = mysqli_query($dbh, $sql);
Kit Lo3c7ce142013-03-02 18:22:40 -050091 $patterns = Array();
92 # Add default exclude patterns
93 $patterns[] = "/^.*\/feature.properties$/";
94 $patterns[] = "/^.*\/build.properties$/";
95 $patterns[] = "/^.*\/pom.properties$/";
96 $patterns[] = "/^.*\.source\/.*$/";
97 $patterns[] = "/^.*\.test\/.*$/";
98 $patterns[] = "/^.*\.tests\/.*$/";
99 $patterns[] = "/^.*\.testing\/.*$/";
kitlo1d027092018-04-19 17:44:07 -0400100 while ($myrow_patterns = mysqli_fetch_assoc($rs_patterns)) {
Kit Lo3c7ce142013-03-02 18:22:40 -0500101 $patterns[] = $myrow_patterns['pattern'];
102 }
103
104 exec("mkdir -p $temp_snapshots_dir");
105 exec("wget $site_url -O ${temp_snapshots_dir}snapshot.zip");
106
107 # Make unzip dir
108 mkdir($temp_unzips_dir, 0777, TRUE);
109 chdir($temp_unzips_dir);
110 exec("unzip -o -q ${temp_snapshots_dir}snapshot.zip");
111
112 # Collect properties file names
113 $properties_file_names = array();
114 chdir($temp_unzips_dir);
115 exec("find . -name *.properties", $properties_file_names);
116 sort($properties_file_names);
117
118 # Parse each properties file
119 echo "Start processing properties files in project $project_id version $version...\n";
120 echo " Update site location: $site_url\n";
121 foreach ($properties_file_names as $properties_file_name) {
122 # extract plugin name
123 $file_name = $temp_unzips_dir . $properties_file_name;
124 $properties_file_name = substr($properties_file_name, strrpos($properties_file_name, "org."));
125 $plugin_id = substr($properties_file_name, 0, strpos($properties_file_name, "/"));
126 $pos = strpos($properties_file_name, '/');
127 if ($pos !== false) {
128 $properties_file_name = substr($properties_file_name, $pos);
129 }
130
131 # remove optional source dir, e.g. 'src' or 'src_ant'
132 $pos = stripos($properties_file_name, '/org/');
133 if ($pos !== false) {
134 $properties_file_name = substr($properties_file_name, $pos);
135 }
136 $pos = strripos($properties_file_name, '/com/');
137 if ($pos !== false) {
138 $properties_file_name = substr($properties_file_name, $pos);
139 }
140
141 # get file ID
142 $properties_file_name = $plugin_id . $properties_file_name;
143 $file_id = File::getFileID($properties_file_name, $project_id, $version);
144
145 # Match plugin exclude list
146 $match = false;
147 foreach ($patterns as $pattern) {
148 if (preg_match($pattern, $properties_file_name)) {
149 $match = true;
150 break;
151 }
152 }
153
154 if (!$match) {
kitlo045c1262018-08-04 21:00:43 -0400155 if ($file_id > 0 && array_key_exists($file_id, $files) && $files[$file_id] != null) {
Kit Lo3c7ce142013-03-02 18:22:40 -0500156 # Existing file
157 $file = $files[$file_id];
158 $file->is_active = 1;
159 unset($files[$file_id]);
160 } else {
161 # New file
162 $file = new File();
163 $file->project_id = $project_id;
164 $file->version = $version;
165 $file->name = $properties_file_name;
166 $file->plugin_id = $plugin_id;
167 $file->is_active = 1;
168 }
169 if (!$file->save()) {
170 echo "***ERROR: Cannot save file $file->name\n";
171 } else {
172 $file_contents = ereg_replace("\r\n?", "\n", file_get_contents($file_name));
173 $file->parseProperties($file_contents);
174 echo " $properties_file_name\n";
175 }
176 } else {
177 echo " !!! Excluding $properties_file_name\n";
178 }
179 }
180 echo "Done processing " . sizeof($properties_file_names) . " properties files in project $project_id version $version\n\n";
181
182 # Collect js file names
183 $js_file_names = array();
184 chdir($temp_unzips_dir);
185 exec("find . -name *.js | grep nls/root", $js_file_names);
186 sort($js_file_names);
187
188 # Parse each js file
189 echo "Start processing js files in project $project_id version $version...\n";
190 echo " Update site location: $site_url\n";
191 foreach ($js_file_names as $js_file_name) {
192 $file_name = $temp_unzips_dir . $js_file_name;
193 $js_file_name = substr($js_file_name, strrpos($js_file_name, "org.eclipse."));
194 $plugin_id = substr($js_file_name, 0, strpos($js_file_name, "/"));
195 $file_id = File::getFileID($js_file_name, $project_id, $version);
196
197 # Match plugin exclude list
198 $match = false;
199 foreach ($patterns as $pattern) {
200 if (preg_match($pattern, $js_file_name)) {
201 $match = true;
202 break;
203 }
204 }
205
206 if (!$match) {
207 if ($file_id > 0 && $files[$file_id] != null) {
208 # Existing file
209 $file = $files[$file_id];
210 $file->is_active = 1;
211 unset($files[$file_id]);
212 } else {
213 # New file
214 $file = new File();
215 $file->project_id = $project_id;
216 $file->version = $version;
217 $file->name = $js_file_name;
218 $file->plugin_id = $plugin_id;
219 $file->is_active = 1;
220 }
221 if (!$file->save()) {
222 echo "***ERROR: Cannot save file $file->name\n";
223 } else {
224 $file_contents = ereg_replace("\r\n?", "\n", file_get_contents($file_name));
225 $file->parseJs($file_contents);
226 echo " $js_file_name\n";
227 }
228 } else {
229 echo " !!! Excluding $js_file_name\n";
230 }
231 }
232 echo "Done processing " . sizeof($js_file_names) . " js files in project $project_id version $version\n\n";
233
234 chdir($temp_dir);
235 exec("rm -rf $temp_snapshots_dir");
236 exec("rm -rf $temp_unzips_dir");
237}
238
239# Deactivate the rest of the files
240echo "Start deactivating inactive properties or js files in all projects above...\n";
241foreach ($files as $file) {
242 if ($file->is_active == 1) {
243 $file->is_active = 0;
244 if (!$file->save()) {
245 echo "***ERROR: Cannot deactivate file $file->name\n";
246 }
247 echo " " . $file->name . "\n";
248 } else {
249 unset($files[$file->file_id]);
250 }
251}
252echo "Done deactivating " . sizeof($files) . " inactive properties or js files in all projects above\n\n";
253
254chdir($temp_dir);
255exec("rm -rf snapshots");
256exec("rm -rf unzips");
257
258if ($headless) {
259 $User = null;
260}
261
262echo "Done\n";
263?>