194 if size == 0 and chunk.find('<div id="sign_in_box">') != -1: |
195 if size == 0 and chunk.find('<div id="sign_in_box">') != -1: |
195 # our urllib2 cookies have gone awol - login again |
196 # our urllib2 cookies have gone awol - login again |
196 login(False) |
197 login(False) |
197 req = urllib2.Request(url, None, headers) |
198 req = urllib2.Request(url, None, headers) |
198 response = urllib2.urlopen(req) |
199 response = urllib2.urlopen(req) |
199 chunk = response.read(CHUNK) |
200 chunk = response.read(CHUNK) |
|
201 if size == 0: |
|
202 filesize = int(response.info()['Content-Length']) |
200 fp.write(chunk) |
203 fp.write(chunk) |
201 size += len(chunk) |
204 size += len(chunk) |
202 now = time.time() |
205 now = time.time() |
203 if options.progress and now-last_time > 20: |
206 if options.progress and now-last_time > 20: |
204 print "- %d Kb (%d Kb/s)" % (size/1024, ((size-last_size)/1024/(now-last_time))+0.5) |
207 rate = (size-last_size)/(now-last_time) |
|
208 estimate = "" |
|
209 if filesize > 0 and rate > 0: |
|
210 remaining_seconds = (filesize-size)/rate |
|
211 if remaining_seconds > 110: |
|
212 remaining = "%d minutes" % (remaining_seconds/60) |
|
213 else: |
|
214 remaining = "%d seconds" % remaining_seconds |
|
215 estimate = "- %d%% est. %s" % ((100*size/filesize), remaining) |
|
216 print "- %d Kb (%d Kb/s) %s" % (size/1024, (rate/1024)+0.5, estimate) |
205 last_time = now |
217 last_time = now |
206 last_size = size |
218 last_size = size |
207 fp.close() |
219 fp.close() |
|
220 if options.progress: |
|
221 now = time.time() |
|
222 print "- Completed %s - %d Kb in %d seconds" % (filename, (filesize/1024)+0.5, now-last_time) |
208 |
223 |
209 #handle errors |
224 #handle errors |
210 except urllib2.HTTPError, e: |
225 except urllib2.HTTPError, e: |
211 print "HTTP Error:",e.code , downloadurl |
226 print "HTTP Error:",e.code , downloadurl |
212 return False |
227 return False |
269 # wait for the unzipping threads to complete |
284 # wait for the unzipping threads to complete |
270 complete_outstanding_unzips() |
285 complete_outstanding_unzips() |
271 |
286 |
272 return 1 |
287 return 1 |
273 |
288 |
274 parser = OptionParser(version="%prog 0.5", usage="Usage: %prog [options] version") |
289 parser = OptionParser(version="%prog 0.5.1", usage="Usage: %prog [options] version") |
275 parser.add_option("-n", "--dryrun", action="store_true", dest="dryrun", |
290 parser.add_option("-n", "--dryrun", action="store_true", dest="dryrun", |
276 help="print the files to be downloaded, the 7z commands, and the recommended deletions") |
291 help="print the files to be downloaded, the 7z commands, and the recommended deletions") |
277 parser.add_option("--nosrc", action="store_true", dest="nosrc", |
292 parser.add_option("--nosrc", action="store_true", dest="nosrc", |
278 help="Don't download any of the source code available directly from Mercurial") |
293 help="Don't download any of the source code available directly from Mercurial") |
279 parser.add_option("--nounzip", action="store_true", dest="nounzip", |
294 parser.add_option("--nounzip", action="store_true", dest="nounzip", |