Created
September 10, 2017 10:57
-
-
Save justbilt/7c881cbdbff74f3fdd97278355d22fed to your computer and use it in GitHub Desktop.
增量 lua 文件打包脚本
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding=utf-8 | |
# Python 2.7.3 | |
import os,sys,json | |
import zipfile | |
import shutils | |
HOME = os.path.expanduser("~") | |
CACHE_ROOT = os.path.join(HOME, ".lua_compile") | |
LUAC_BIN_PATH = os.path.join(os.environ["QUICK_V3_ROOT"], "quick/bin/mac/luac") | |
def luac_compile(_src, _dst): | |
os.system("%s -o %s %s" %(LUAC_BIN_PATH, _dst, _src)) | |
def package(_src, _dst): | |
cache_path = CACHE_ROOT | |
shutils.mkdir(cache_path) | |
hash_file = os.path.join(cache_path, "hash.json") | |
hash_data = shutils.read_json(hash_file, {}) | |
hash_data_new = {} | |
shutils.remove(_dst) | |
dst_zip = zipfile.ZipFile(_dst, "w", zipfile.ZIP_DEFLATED) | |
for f in shutils.file_list(_src): | |
if f.startswith(".") or not f.endswith(".lua"): | |
continue | |
src_filepath = os.path.abspath(os.path.join(_src, f)) | |
dst_filename = f.replace(".lua", "").replace("/", ".") | |
dst_filepath = os.path.abspath(os.path.join(cache_path, dst_filename)) | |
src_hash = shutils.file_hash(src_filepath) | |
dst_hash = shutils.file_hash(dst_filepath) | |
record_hash = hash_data.get(dst_filename, {}) | |
if not (dst_hash and record_hash.get("src", "") == src_hash and record_hash.get("dst", "") == dst_hash): | |
shutils.remove(dst_filepath) | |
print "ADD: " + f | |
luac_compile(src_filepath, dst_filepath) | |
dst_hash = shutils.file_hash(dst_filepath) | |
if not dst_hash: | |
print "\n---" | |
print "ERROR: " + src_filepath | |
return False | |
dst_zip.write(dst_filepath, dst_filename) | |
hash_data_new[dst_filename] = {"src": src_hash, "dst": dst_hash} | |
shutils.save_json(hash_data_new, hash_file) | |
dst_zip.close() | |
for f in shutils.file_list(cache_path): | |
if f == "hash.json": | |
continue | |
if not hash_data_new.get(f): | |
print "REMOVE: " + f | |
os.remove(os.path.join(cache_path, f)) | |
return True | |
def main(): | |
src_path = sys.argv[1] | |
dst_path = sys.argv[2] | |
package(src_path, dst_path) | |
if __name__ == '__main__': | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding=utf-8 | |
# Python 2.7.3 | |
import hashlib | |
import json | |
import os, sys | |
def mkdir(_path): | |
if os.path.exists(_path): | |
return | |
if os.path.exists(os.path.dirname(_path)): | |
os.mkdir(_path) | |
else: | |
os.makedirs(_path) | |
def remove(_path): | |
if not os.path.exists(_path): | |
return | |
if os.path.isfile(_path): | |
os.remove(_path) | |
elif os.path.isdir(_path): | |
shutil.rmtree(_path) | |
def read_json(_name, _default=None): | |
if not os.path.exists(_name): | |
return _default | |
with open(_name, "r") as f: | |
data = json.loads(f.read()) | |
return data | |
def save_json(_data, _name, _human_read=True): | |
indent = None | |
sort_keys = None | |
if _human_read: | |
indent = 2 | |
sort_keys = True | |
mkdir(os.path.dirname(_name)) | |
encodedjson = json.dumps(_data, ensure_ascii=False, indent=indent, sort_keys=sort_keys) | |
with open(_name, "w") as f: | |
f.write(encodedjson) | |
return encodedjson | |
def _list(_path, _type, _format=None, _maxdepth=None): | |
args = [] | |
args.append("-type") | |
args.append(_type) | |
if _maxdepth != None: | |
args.append("-maxdepth") | |
args.append(str(_maxdepth)) | |
if _format: | |
args.append(" -or ".join(["-name \"*.{0}\"".format(i) for i in _format.split("|")])) | |
command = "(cd %s; find * %s)" %(_path, " ".join(args)) | |
return os.popen(command).read().strip().split("\n") | |
""" | |
_format: shtml|css | |
""" | |
def file_list(_path, _format=None, _maxdepth=None): | |
return _list(_path, "f", _format, _maxdepth) | |
def dir_list(_path, _format=None, _maxdepth=None): | |
return _list(_path, "d", _format, _maxdepth) | |
BLOCKSIZE = 65536 | |
def file_hash(_path, _path_weight=False): | |
if not os.path.exists(_path): | |
return "" | |
hasher = hashlib.sha1() | |
if _path_weight: | |
hasher.update(_path) | |
with open(_path, 'rb') as afile: | |
buf = afile.read(BLOCKSIZE) | |
while len(buf) > 0: | |
hasher.update(buf) | |
buf = afile.read(BLOCKSIZE) | |
return hasher.hexdigest() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment