Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: download_firefox_nightly.py

Issue 942783002: Simplifying Firefox download script, fixing bugs, disabling on win/mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/webrtc/webrtc.DEPS/
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Downloads a Firefox Nightly build for the current platform.""" 6 """Downloads a Firefox Nightly build for the current platform."""
7 7
8 import datetime 8 import datetime
9 import glob 9 import glob
10 import os 10 import os
11 import shutil 11 import shutil
12 import sys 12 import sys
13 import subprocess 13 import subprocess
14 import tarfile 14 import tarfile
15 import time 15 import time
16 import zipfile 16 import zipfile
17 17
18 from optparse import OptionParser 18 from optparse import OptionParser
19 19
20 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 20 BASE_DIR = os.path.dirname(os.path.abspath(__file__))
21 THIRD_PARTY_DIR = os.path.abspath(os.path.join(BASE_DIR, 'third_party')) 21 THIRD_PARTY_DIR = os.path.abspath(os.path.join(BASE_DIR, 'third_party'))
22 22
23 sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozdownload')) 23 sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozdownload'))
24 sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozinfo')) 24 sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozinfo'))
25 25
26 from mozdownload import scraper 26 from mozdownload import scraper
27 import utils
27 28
28 29
29 def _Touch(a_file): 30 def _Touch(a_file):
30 with open(a_file, 'a'): 31 with open(a_file, 'a'):
31 os.utime(a_file, None) 32 os.utime(a_file, None)
32 33
33 34
34 def _GetFirefoxArchivesSortedOnModifiedDate(target_dir): 35 def _GetFirefoxArchivesSortedOnModifiedDate(target_dir):
35 firefox_archives = glob.glob(os.path.join(target_dir, '*tar.bz2')) 36 firefox_archives = glob.glob(os.path.join(target_dir, '*tar.bz2'))
36 if not firefox_archives: 37 if not firefox_archives:
(...skipping 14 matching lines...) Expand all
51 for old_archive in rest: 52 for old_archive in rest:
52 try: 53 try:
53 os.remove(old_archive) 54 os.remove(old_archive)
54 except OSError: 55 except OSError:
55 pass 56 pass
56 57
57 58
58 def _FindFallbackFirefoxBuild(target_dir): 59 def _FindFallbackFirefoxBuild(target_dir):
59 firefox_archives = _GetFirefoxArchivesSortedOnModifiedDate(target_dir) 60 firefox_archives = _GetFirefoxArchivesSortedOnModifiedDate(target_dir)
60 if not firefox_archives: 61 if not firefox_archives:
61 return None 62 return None, None
62 63
63 newest_build = firefox_archives[0] 64 newest_build = firefox_archives[0]
64 build_age_seconds = time.time() - os.path.getmtime(newest_build) 65 build_age_seconds = time.time() - os.path.getmtime(newest_build)
65 build_age_days = datetime.timedelta(seconds=build_age_seconds).days 66 build_age_days = datetime.timedelta(seconds=build_age_seconds).days
66 67
67 return newest_build, build_age_days 68 return newest_build, build_age_days
68 69
69 70
70 def _MaybeDownload(target_dir, force): 71 def _MaybeDownload(target_dir, force):
71 try: 72 try:
(...skipping 22 matching lines...) Expand all
94 if age_days > 3: 95 if age_days > 3:
95 raise Exception('We have failed to download firefox builds for more ' 96 raise Exception('We have failed to download firefox builds for more '
96 'than 3 days now: failing so someone looks at it. The ' 97 'than 3 days now: failing so someone looks at it. The '
97 'most recent build we have is %d days old.' % age_days) 98 'most recent build we have is %d days old.' % age_days)
98 99
99 print 'Using %s instead; it is %d days old.' % (fallback_build, age_days) 100 print 'Using %s instead; it is %d days old.' % (fallback_build, age_days)
100 return fallback_build 101 return fallback_build
101 102
102 103
103 def _ExtractArchive(firefox_archive, target_dir): 104 def _ExtractArchive(firefox_archive, target_dir):
104 # TODO(phoglund): implement on win/mac. See http://crbug.com/454303. 105 if utils.GetPlatform() is 'linux':
105 if sys.platform == 'darwin':
106 print "Disabled on mac..."
107 return 0
108 volume = '/Volumes/Nightly'
109 firefox_executable = '%s/FirefoxNightly.app' % target_dir
110
111 # Unmount any previous downloads.
112 subprocess.call(['hdiutil', 'detach', volume])
113
114 subprocess.check_call(['hdiutil', 'attach', firefox_archive])
115 shutil.copytree('%s/FirefoxNightly.app' % volume, firefox_executable)
116 subprocess.check_call(['hdiutil', 'detach', volume])
117 elif sys.platform == 'linux2':
118 tar_archive = tarfile.open(firefox_archive, 'r:bz2') 106 tar_archive = tarfile.open(firefox_archive, 'r:bz2')
119 tar_archive.extractall(path=target_dir) 107 tar_archive.extractall(path=target_dir)
120 elif sys.platform == 'win32':
121 print "Disabled on win..."
122 return 0
123 zip_archive = zipfile.ZipFile(firefox_archive)
124 zip_archive.extractall(path=target_dir)
125 else: 108 else:
126 print >> sys.stderr, 'Unsupported platform: %s' % sys.platform 109 raise Exception('Unsupported platform: %s' % sys.platform)
127 return 1
128 110
129 print 'Extracted %s' % firefox_archive 111 print 'Extracted %s' % firefox_archive
130 return 0
131 112
132 113
133 def main(): 114 def main():
134 usage = 'usage: %prog -t <target_dir>' 115 usage = 'usage: %prog -t <target_dir>'
135 parser = OptionParser(usage) 116 parser = OptionParser(usage)
136 parser.add_option('-t', '--target-dir', 117 parser.add_option('-t', '--target-dir',
137 help=('Target directory to put the downloaded and extracted' 118 help=('Target directory to put the downloaded and extracted'
138 ' folder with the Firefox Nightly build in.')) 119 ' folder with the Firefox Nightly build in.'))
139 parser.add_option('-f', '--force', action='store_true', 120 parser.add_option('-f', '--force', action='store_true',
140 help=('Force download even if the current nightly is ' 121 help=('Force download even if the current nightly is '
141 'already downloaded.')) 122 'already downloaded.'))
142 parser.add_option('-c', '--clean-old-firefox-archives', action='store_true', 123 parser.add_option('-c', '--clean-old-firefox-archives', action='store_true',
143 help=('Clean old firefox archives; one will always be ' 124 help=('Clean old firefox archives; one will always be '
144 'kept as a fallback.')) 125 'kept as a fallback.'))
145 options, _args = parser.parse_args() 126 options, _args = parser.parse_args()
146 if not options.target_dir: 127 if not options.target_dir:
147 parser.error('You must specify the target directory.') 128 parser.error('You must specify the target directory.')
148 129
130 if utils.GetPlatform() is not 'linux':
131 print 'This script is only supported on Linux for now.'
132 return
133
149 target_dir = options.target_dir 134 target_dir = options.target_dir
150 if not os.path.isdir(target_dir): 135 if not os.path.isdir(target_dir):
151 os.mkdir(target_dir) 136 os.mkdir(target_dir)
152 137
153 firefox_archive = _MaybeDownload(target_dir, options.force) 138 firefox_archive = _MaybeDownload(target_dir, options.force)
154 if firefox_archive: 139 if firefox_archive:
155 return _ExtractArchive(firefox_archive, target_dir) 140 _ExtractArchive(firefox_archive, target_dir)
156 141
157 if options.clean_old_firefox_archives: 142 if options.clean_old_firefox_archives:
158 _CleanOldFirefoxArchives(target_dir) 143 _CleanOldFirefoxArchives(target_dir)
159 144
160 if __name__ == '__main__': 145 if __name__ == '__main__':
161 sys.exit(main()) 146 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698