18 def clean_export_folder(path): |
19 def clean_export_folder(path): |
19 print("Removing %s" % path) |
20 print("Removing %s" % path) |
20 if os.path.isdir(path): |
21 if os.path.isdir(path): |
21 shutil.rmtree(path, ignore_errors=True) |
22 shutil.rmtree(path, ignore_errors=True) |
22 |
23 |
23 def do_export_version(path, version): |
24 def do_export_version(path, version, *export_keys): |
24 print("Export version %s"%str(version)) |
25 print("Export version %s with keys %s" % (str(version), repr(export_keys))) |
25 |
26 |
26 local("hg archive -r \'%s\' \"%s\"" % (str(version),path)) |
27 for export_key in export_keys: |
|
28 export_path = os.path.join(path,export_key) |
|
29 |
|
30 repo_url = env.repos[export_key] |
|
31 url_part = urlparse.urlparse(repo_url) |
|
32 if url_part.scheme or url_part.netloc: |
|
33 # this is a remote repo. Let's clone first |
|
34 clone_path = os.path.join(path,'clone',export_keys) |
|
35 os.makedirs(clone_path) |
|
36 local("hg clone \"%s\" \"%s\"" % (repo_url,clone_path)) |
|
37 else: |
|
38 clone_path = repo_url |
|
39 |
|
40 with lcd(clone_path): |
|
41 local("hg archive -r \'%s\' \"%s\"" % (str(version),export_path)) |
|
42 |
27 print("Export version %s done"%str(version)) |
43 print("Export version %s done"%str(version)) |
28 |
44 |
29 |
45 |
30 def get_remote_env(remotepath, remotevirtualenvpath, platform_web_module, settings_key): |
46 def get_remote_env(remotepath, remotevirtualenvpath, platform_web_module, settings_key): |
31 activate_path = os.path.join(remotevirtualenvpath, "bin/activate") |
47 activate_path = os.path.join(remotevirtualenvpath, "bin/activate") |
189 |
208 |
190 def sync_install_build(build_path): |
209 def sync_install_build(build_path): |
191 res_trans = None |
210 res_trans = None |
192 try: |
211 try: |
193 res_trans = sync_build(build_path) |
212 res_trans = sync_build(build_path) |
194 install_build(res_trans[0], env.remote_virtualenv_path) |
213 install_build(res_trans[0], env.remote_path['virtualenv']) |
195 finally: |
214 finally: |
196 if res_trans: |
215 if res_trans: |
197 remove_build(res_trans[0]) |
216 remove_build(res_trans[0]) |
198 |
217 |
199 |
218 |
200 def do_sync_web(version, export_path): |
219 def do_sync_web(version, export_path): |
201 print("do_sync_web with version %s and path %s" % (version,export_path)) |
220 print("do_sync_web with version %s and path %s" % (version,export_path)) |
|
221 #sync web |
202 web_path = os.path.join(export_path,"web/") |
222 web_path = os.path.join(export_path,"web/") |
203 rsync_export(web_path, env.remote_web_path, env.web_rsync_filters) |
223 rsync_export(web_path, env.remote_path['web'], env.rsync_filters['web']) |
|
224 #sync src |
|
225 src_path = os.path.join(export_path,"src/") |
|
226 rsync_export(src_path, env.remote_path['src'], env.rsync_filters['web']) |
|
227 |
204 |
228 |
205 def check_folder_access(): |
229 def check_folder_access(): |
206 print("Check folder access") |
230 print("Check folder access") |
207 # get remote user |
231 # get remote user |
208 for folder_path in env.folders: |
232 for folder_path in env.folders: |
209 if not os.path.isabs(folder_path): |
233 if not os.path.isabs(folder_path): |
210 folder_path = env.remote_web_path.rstrip("/")+ "/" + folder_path |
234 folder_path = env.remote_path['web'].rstrip("/")+ "/" + folder_path |
211 with settings(warn_only=True): |
235 with settings(warn_only=True): |
212 if not exists(folder_path): |
236 if not exists(folder_path): |
213 run("mkdir -p \"%s\"" % folder_path) |
237 run("mkdir -p \"%s\"" % folder_path) |
214 run("chown -R -c :%s \"%s\"" % (env.web_group, folder_path)) |
238 run("chown -R -c :%s \"%s\"" % (env.web_group, folder_path)) |
215 run("chmod -R -c g+w \"%s\"" % folder_path) |
239 run("chmod -R -c g+w \"%s\"" % folder_path) |
216 @task |
240 @task |
217 def relaunch_server(do_collectstatic=True): |
241 def relaunch_server(do_collectstatic=True): |
218 print("Relaunch server") |
242 print("Relaunch server") |
219 check_folder_access() |
243 check_folder_access() |
220 if do_collectstatic: |
244 if do_collectstatic: |
221 collectstatic(env.remote_web_path, env.remote_virtualenv_path, env.platform_web_module) |
245 collectstatic(env.remote_path['web'], env.remote_path['virtualenv'], env.platform_web_module) |
222 sudo(env.web_relaunch_cmd, shell=False) |
246 sudo(env.web_relaunch_cmd, shell=False) |
223 |
247 |
224 @task |
248 @task |
225 def sync_web(version): |
249 def sync_web(version): |
226 print(green("sync web with version %s" % version)) |
250 print(green("sync web with version %s" % version)) |
227 export_path = export_version(version) |
251 export_path = export_version(version, 'web') |
228 do_sync_web(version, export_path) |
252 export_path_full = os.path.join(export_path,'web') |
229 create_config(export_path) |
253 do_sync_web(version, export_path_full) |
|
254 create_config(export_path_full) |
230 clean_export_folder(export_path) |
255 clean_export_folder(export_path) |
231 relaunch_server() |
256 relaunch_server() |
232 |
257 |
233 @task |
258 @task |
234 def sync_ldt(version): |
259 def sync_ldt(version): |
235 print(green("sync ldt with version %s" % version)) |
260 print(green("sync ldt with version %s" % version)) |
236 export_path = export_version(version) |
261 export_path = export_version(version, 'ldt') |
237 do_sync_ldt(version, export_path) |
262 export_path_full = os.path.join(export_path,'ldt') |
|
263 do_sync_ldt(version, export_path_full) |
238 clean_export_folder(export_path) |
264 clean_export_folder(export_path) |
239 relaunch_server() |
265 relaunch_server() |
240 |
266 |
241 @task |
267 @task |
242 def update_lib(version, package): |
268 def update_lib(version, package): |
243 print(green("update ldt with version %s" % version)) |
269 print(green("update ldt with version %s" % version)) |
244 export_path = export_version(version) |
270 export_path = export_version(version,'web') |
245 lib_path = os.path.join(export_path, "virtualenv", "res", "lib") |
271 export_path_full = os.path.join(export_path,'web') |
|
272 lib_path = os.path.join(export_path_full, "virtualenv", "res", "lib") |
246 |
273 |
247 f, pathname, description = imp.find_module("patch", [lib_path]) |
274 f, pathname, description = imp.find_module("patch", [lib_path]) |
248 patch = imp.load_module("patch", f, pathname, description) |
275 patch = imp.load_module("patch", f, pathname, description) |
249 f, pathname, description = imp.find_module("lib_create_env", [lib_path]) |
276 f, pathname, description = imp.find_module("lib_create_env", [lib_path]) |
250 lib_create_env = imp.load_module("lib_create_env", f, pathname, description) |
277 lib_create_env = imp.load_module("lib_create_env", f, pathname, description) |
251 |
278 |
252 package_path = os.path.join(export_path, "virtualenv", "res", "src", lib_create_env.URLS[package]['local']) |
279 package_path = os.path.join(export_path_full, "virtualenv", "res", "src", lib_create_env.URLS[package]['local']) |
253 |
280 |
254 sync_install_build(package_path) |
281 sync_install_build(package_path_full) |
255 clean_export_folder(export_path) |
282 clean_export_folder(export_path) |
256 relaunch_server() |
283 relaunch_server() |
257 |
284 |
258 @task |
285 @task |
259 def sync_platform(version): |
286 def sync_platform(version): |
260 print(green("sync platform with version %s" % version)) |
287 print(green("sync platform with version %s" % version)) |
261 export_path = export_version(version) |
288 export_path = export_version(version, 'ldt', 'web') |
262 do_sync_ldt(version, export_path) |
289 export_path_ldt = os.path.join(export_path,'ldt') |
263 do_sync_web(version, export_path) |
290 export_path_web = os.path.join(export_path,'web') |
264 create_config(export_path) |
291 do_sync_ldt(version, export_path_ldt) |
|
292 do_sync_web(version, export_path_web) |
|
293 create_config(export_path_web) |
265 clean_export_folder(export_path) |
294 clean_export_folder(export_path) |
266 relaunch_server() |
295 relaunch_server() |
267 |
296 |
268 @task |
297 @task |
269 def create_virtualenv(version): |
298 def create_virtualenv(version): |
270 print(green("create virtualenv with version %s" % version)) |
299 print(green("create virtualenv with version %s" % version)) |
271 export_path = export_version(version) |
300 export_path = export_version(version, 'web') |
|
301 export_path_web = os.path.join(export_path,'web') |
272 venv_remote_export_path = "" |
302 venv_remote_export_path = "" |
273 try: |
303 try: |
274 virtualenv_path = os.path.join(export_path, "virtualenv") |
304 virtualenv_path = os.path.join(export_path_web, "virtualenv") |
275 |
305 |
276 venv_remote_export_path = os.path.join(env.remote_venv_export_path, env.export_prefix, version,"virtualenv") |
306 venv_remote_export_path = os.path.join(env.remote_path['venv_export'], env.export_prefix, version,"virtualenv") |
277 rsync_export(virtualenv_path, venv_remote_export_path, env.venv_rsync_filters) |
307 rsync_export(virtualenv_path, venv_remote_export_path, env.rsync_filters['venv']) |
278 do_create_virtualenv(venv_remote_export_path, env.remote_virtualenv_path) |
308 do_create_virtualenv(venv_remote_export_path, env.remote_path['virtualenv']) |
279 finally: |
309 finally: |
280 clean_export_folder(export_path) |
310 clean_export_folder(export_path) |
281 if venv_remote_export_path: |
311 if venv_remote_export_path: |
282 clean_rsync_folder(venv_remote_export_path) |
312 clean_rsync_folder(venv_remote_export_path) |
|
313 |
|
314 |