Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: utils.py

Issue 29330389: Issue 2956 - Ensure the correct version of jsshell is present (Closed)
Left Patch Set: Use regexp to match version number and tidy things up Created Nov. 19, 2015, 10:45 a.m.
Right Patch Set: Remove JSSHELL_VERSION variable Created Nov. 23, 2015, 1:58 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « .hgignore ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 # coding: utf-8 1 # coding: utf-8
2 2
3 # This Source Code is subject to the terms of the Mozilla Public License 3 # This Source Code is subject to the terms of the Mozilla Public License
4 # version 2.0 (the "License"). You can obtain a copy of the License at 4 # version 2.0 (the "License"). You can obtain a copy of the License at
5 # http://mozilla.org/MPL/2.0/. 5 # http://mozilla.org/MPL/2.0/.
6 6
7 from contextlib import closing
7 import os 8 import os
8 import platform 9 import platform
9 import re
10 from StringIO import StringIO 10 from StringIO import StringIO
11 import shutil
12 import subprocess
13 import sys 11 import sys
14 import urllib 12 import urllib
15 import zipfile 13 import zipfile
16 14
17 JSSHELL_VERSION = "JavaScript-C31.5.0esrpre" 15 JSSHELL_DIR = "mozilla-esr31"
18 JSSHELL_URL = ("https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly" 16 JSSHELL_URL = ("https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly"
19 "/2015/02/2015-02-25-00-22-19-mozilla-esr31/jsshell-%s.zip") 17 "/2015/02/2015-02-25-00-22-19-%s/jsshell-%%s.zip" % JSSHELL_DIR)
18
19 JSSHELL_SUPPORTED_PLATFORMS = {
20 "win32": "win32",
21 "linux2": {
22 "i686": "linux-i686",
23 "x86_64": "linux-x86_64"
24 },
25 "darwin": "mac"
26 }
20 27
21 def ensureJSShell(): 28 def ensureJSShell():
22 baseDir = os.path.dirname(__file__) 29 baseDir = os.path.dirname(__file__)
23 shell_dir = os.path.join(baseDir, 'mozilla') 30 shell_dir = os.path.join(baseDir, JSSHELL_DIR)
24 31
25 if not os.path.exists(shell_dir): 32 if not os.path.exists(shell_dir):
26 os.makedirs(shell_dir) 33 os.makedirs(shell_dir)
27 if sys.platform == 'win32': 34 if sys.platform == 'win32':
28 path = os.path.join(shell_dir, 'js.exe') 35 path = os.path.join(shell_dir, 'js.exe')
29 else: 36 else:
30 path = os.path.join(shell_dir, 'js') 37 path = os.path.join(shell_dir, 'js')
31 38
32 if os.path.exists(path): 39 if os.path.exists(path):
33 # Return the path if jsshell is present and its version is correct 40 return path
34 match = re.search(r"^Version: (.+)$",
35 subprocess.check_output([path, "--help"]), re.MULTILINE)
36 if match and match.group(1) == JSSHELL_VERSION:
37 return path
38 # Otherwise remove the old / faulty version, we'll re-download
39 shutil.rmtree(shell_dir)
Sebastian Noack 2015/11/19 20:21:43 I'm not sure whether this is a good idea. Imagine
kzar 2015/11/20 09:02:00 That's true, but the current behaviour is to somew
40 os.makedirs(shell_dir)
41 41
42 supported_platforms = {
43 'win32': 'win32',
44 'linux2': {
45 'i686': 'linux-i686',
46 'x86_64': 'linux-x86_64'
47 },
48 'darwin': 'mac',
49 }
50 try: 42 try:
51 build = supported_platforms[sys.platform] 43 build = JSSHELL_SUPPORTED_PLATFORMS[sys.platform]
52 if isinstance(build, dict): 44 if isinstance(build, dict):
53 build = build[platform.machine()] 45 build = build[platform.machine()]
54 except KeyError: 46 except KeyError:
55 raise Exception('Platform %s (%s) not supported by JS shell' % ( 47 raise Exception('Platform %s (%s) not supported by JS shell' % (
56 sys.platform, platform.machine() 48 sys.platform, platform.machine()
57 )) 49 ))
58 50
59 data = StringIO(urllib.urlopen(JSSHELL_URL % build).read()) 51 with closing(urllib.urlopen(JSSHELL_URL % build)) as response, \
60 zip = zipfile.ZipFile(data) 52 zipfile.ZipFile(StringIO(response.read())) as zip:
61 zip.extractall(shell_dir) 53 zip.extractall(shell_dir)
62 zip.close()
63 54
64 if not os.path.exists(path): 55 if not os.path.exists(path):
65 raise Exception('Downloaded package didn\'t contain JS shell executable') 56 raise Exception('Downloaded package didn\'t contain JS shell executable')
66 57
67 try: 58 try:
68 os.chmod(path, 0700) 59 os.chmod(path, 0700)
69 except: 60 except:
70 pass 61 pass
71 62
72 return path 63 return path
LEFTRIGHT
« .hgignore ('k') | no next file » | Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Toggle Comments ('s')

Powered by Google App Engine
This is Rietveld