mirror of https://github.com/axmolengine/axmol.git
Re-adds download-deps.py, comments unzip functionality, please help to
test the download functionality. Thanks.
This commit is contained in:
parent
ac7fd0069b
commit
cafe263883
|
@ -0,0 +1,152 @@
|
|||
#!/usr/bin/env python
|
||||
#coding=utf-8
|
||||
#
|
||||
# ./download-deps.py
|
||||
#
|
||||
# Download Cocos2D-X resources from github (https://github.com/cocos2d/cocos2d-x-external) and extract from ZIP
|
||||
#
|
||||
# Helps prevent repo bloat due to large binary files since they can
|
||||
# be hosted separately.
|
||||
#
|
||||
|
||||
import urllib2
|
||||
import os.path,zipfile
|
||||
import shutil
|
||||
import sys
|
||||
import traceback
|
||||
import distutils
|
||||
|
||||
from time import time
|
||||
from sys import stdout
|
||||
from distutils.errors import DistutilsError
|
||||
from distutils.dir_util import copy_tree, remove_tree
|
||||
|
||||
prefix = 'https://github.com/cocos2d/cocos2d-x-external/archive/'
|
||||
filename = 'v3-deps-1'
|
||||
extracted_folder_name='cocos2d-x-resources-' + filename
|
||||
|
||||
def download_file(url, file_name):
|
||||
print("--> Ready to download %s from %s" % (file_name, url))
|
||||
|
||||
u = urllib2.urlopen(url)
|
||||
f = open(file_name, 'wb')
|
||||
meta = u.info()
|
||||
content_len = meta.getheaders("Content-Length")
|
||||
file_size = 0
|
||||
if content_len and len(content_len) > 0:
|
||||
file_size = int(content_len[0])
|
||||
print("--> Get file size succeed!")
|
||||
else:
|
||||
print("WARNING: Couldn't grab the file size, ignore it")
|
||||
|
||||
print("--> Start to download, please wait ...")
|
||||
|
||||
file_size_dl = 0
|
||||
block_sz = 8192
|
||||
|
||||
old_time=time()
|
||||
|
||||
while True:
|
||||
buffer = u.read(block_sz)
|
||||
if not buffer:
|
||||
break
|
||||
|
||||
file_size_dl += len(buffer)
|
||||
|
||||
f.write(buffer)
|
||||
new_time = time()
|
||||
if (new_time - old_time) > 1:
|
||||
speed = len(buffer) / (new_time - old_time) / 1000
|
||||
status = ""
|
||||
if file_size != 0:
|
||||
percent = int(file_size_dl * 100. / file_size)
|
||||
status = r" Downloaded: %6dK / Total: %dK, Percent: %3.2f%%, Speed: %6.2f KB/S" % (file_size_dl / 1000, file_size / 1000, percent, speed)
|
||||
else:
|
||||
status = r" Downloaded: %6dK, Speed: %6.2f KB/S" % (file_size_dl / 1000, speed)
|
||||
|
||||
status = status + chr(8)*(len(status)+1)
|
||||
print(status),
|
||||
sys.stdout.flush()
|
||||
old_time = new_time
|
||||
|
||||
print("--> Downloading finished!")
|
||||
f.close()
|
||||
|
||||
def default_filter(src,dst):
|
||||
"""The default progress/filter callback; returns True for all files"""
|
||||
return dst
|
||||
|
||||
def ensure_directory(target):
|
||||
if not os.path.exists(target):
|
||||
os.mkdir(target)
|
||||
|
||||
def unpack_zipfile(filename, extract_dir, progress_filter=default_filter):
|
||||
"""Unpack zip `filename` to `extract_dir`
|
||||
|
||||
Raises ``UnrecognizedFormat`` if `filename` is not a zipfile (as determined
|
||||
by ``zipfile.is_zipfile()``). See ``unpack_archive()`` for an explanation
|
||||
of the `progress_filter` argument.
|
||||
"""
|
||||
|
||||
if not zipfile.is_zipfile(filename):
|
||||
raise UnrecognizedFormat("%s is not a zip file" % (filename,))
|
||||
|
||||
z = zipfile.ZipFile(filename)
|
||||
try:
|
||||
for info in z.infolist():
|
||||
name = info.filename
|
||||
|
||||
# don't extract absolute paths or ones with .. in them
|
||||
if name.startswith('/') or '..' in name:
|
||||
continue
|
||||
|
||||
target = os.path.join(extract_dir, *name.split('/'))
|
||||
target = progress_filter(name, target)
|
||||
if not target:
|
||||
continue
|
||||
if name.endswith('/'):
|
||||
# directory
|
||||
ensure_directory(target)
|
||||
else:
|
||||
# file
|
||||
data = z.read(info.filename)
|
||||
f = open(target,'wb')
|
||||
try:
|
||||
f.write(data)
|
||||
finally:
|
||||
f.close()
|
||||
del data
|
||||
unix_attributes = info.external_attr >> 16
|
||||
if unix_attributes:
|
||||
os.chmod(target, unix_attributes)
|
||||
finally:
|
||||
z.close()
|
||||
|
||||
def main():
|
||||
workpath = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
if os.path.exists(extracted_folder_name):
|
||||
shutil.rmtree(extracted_folder_name)
|
||||
|
||||
# if not os.path.isfile(filename + '.zip'):
|
||||
download_file(prefix+filename+'.zip', filename+'.zip')
|
||||
|
||||
print("--> Extracting files, please wait ...")
|
||||
# unpack_zipfile(filename+'.zip', workpath)
|
||||
print("--> Extraction done!")
|
||||
print("--> Copying files ...")
|
||||
# distutils.dir_util.copy_tree(extracted_folder_name, workpath)
|
||||
print("--> Cleaning ...")
|
||||
# if os.path.isfile(filename+'.zip'):
|
||||
# os.remove(filename+'.zip')
|
||||
# if os.path.exists(extracted_folder_name):
|
||||
# shutil.rmtree(extracted_folder_name)
|
||||
print("--> DONE! Cheers!")
|
||||
|
||||
# -------------- main --------------
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main()
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
sys.exit(1)
|
Loading…
Reference in New Issue