|
|
@@ -0,0 +1,119 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+import argparse
|
|
|
+import re
|
|
|
+import os
|
|
|
+import sys
|
|
|
+
|
|
|
+CUR_FILE_DIR = os.path.abspath(os.path.dirname(__file__));
|
|
|
+
|
|
|
+def open_file(filepath, mode, encoding):
|
|
|
+ if sys.version_info.major == 3:
|
|
|
+ return open(filepath, mode, encoding=encoding)
|
|
|
+ else:
|
|
|
+ import codecs
|
|
|
+ return codecs.open(filepath, mode, encoding)
|
|
|
+
|
|
|
+
|
|
|
+class FileInsertHandler(object):
|
|
|
+ def __init__(self, filepath):
|
|
|
+ self.lines = []
|
|
|
+ self.thrd_libs = {}
|
|
|
+ self.mark_prefix = '//---SyncByPyScript---'
|
|
|
+ self.has_changed = False
|
|
|
+ with open_file(filepath, 'r', 'utf-8') as fp:
|
|
|
+ self.lines = fp.readlines()
|
|
|
+ fp.close()
|
|
|
+
|
|
|
+ expression = self.mark_prefix + "([\w+]+)-(start|end)"
|
|
|
+ for i in range(0,len(self.lines)):
|
|
|
+ line = self.lines[i]
|
|
|
+ m_ret = re.match(expression, line)
|
|
|
+ if m_ret:
|
|
|
+ name = m_ret.groups()[0]
|
|
|
+ tail = m_ret.groups()[1]
|
|
|
+ if name not in self.thrd_libs:
|
|
|
+ self.thrd_libs[name] = {
|
|
|
+ "name" : name,
|
|
|
+ "start": -1,
|
|
|
+ "end": -1,
|
|
|
+ }
|
|
|
+ if tail == 'start':
|
|
|
+ self.thrd_libs[name]['start'] = i
|
|
|
+ elif tail == 'end':
|
|
|
+ self.thrd_libs[name]['end'] = i
|
|
|
+ self.output_path = filepath
|
|
|
+
|
|
|
+ def update(self, name, filepath):
|
|
|
+ if name not in self.thrd_libs:
|
|
|
+ return
|
|
|
+ start_num = self.thrd_libs[name]['start']
|
|
|
+ end_num = self.thrd_libs[name]['end']
|
|
|
+ print('update lib [%s] between line num %d and % d' % (name, start_num, end_num))
|
|
|
+ if end_num > start_num + 1:
|
|
|
+ with open_file(filepath, 'r', 'utf-8') as fp:
|
|
|
+ content = fp.read()
|
|
|
+ fp.close()
|
|
|
+ if content[-1] != '\n':
|
|
|
+ content += '\n'
|
|
|
+ self.lines[start_num+1] = content
|
|
|
+ for num in range(start_num+2, end_num):
|
|
|
+ self.lines[num] = ""
|
|
|
+ self.has_changed = True
|
|
|
+
|
|
|
+ def save_data_to(self, data, output_path):
|
|
|
+ fp = open_file(output_path, 'a+', 'utf-8')
|
|
|
+ fp.seek(0)
|
|
|
+ fp.truncate()
|
|
|
+ fp.write(data)
|
|
|
+ fp.flush()
|
|
|
+ fp.close()
|
|
|
+
|
|
|
+ def save(self):
|
|
|
+ if not self.has_changed:
|
|
|
+ print('no lib update,no change')
|
|
|
+ return
|
|
|
+ data = ''.join(self.lines)
|
|
|
+ self.save_data_to(data, self.output_path)
|
|
|
+
|
|
|
+def getJsLibs():
|
|
|
+ dirpath = os.path.join(CUR_FILE_DIR, "util")
|
|
|
+ retnames = []
|
|
|
+ for path, dirnames, filenames in os.walk(dirpath):
|
|
|
+ for filename in filenames:
|
|
|
+ if filename.endswith('min.js'):
|
|
|
+ name = filename.split('.')[0]
|
|
|
+ retnames.append(name)
|
|
|
+ return retnames
|
|
|
+
|
|
|
+def syncToAll(dirpath):
|
|
|
+ handler_list = []
|
|
|
+ for path, dirnames, filenames in os.walk(dirpath):
|
|
|
+ if path.endswith('util'):
|
|
|
+ continue
|
|
|
+ for filename in filenames:
|
|
|
+ if filename.endswith('.js'):
|
|
|
+ filepath = os.path.join(path, filename)
|
|
|
+ handler = FileInsertHandler(filepath)
|
|
|
+ handler_list.append(handler)
|
|
|
+ jslibs = getJsLibs()
|
|
|
+ # print(jslibs)
|
|
|
+ print('###############start sync###################')
|
|
|
+ for handler in handler_list:
|
|
|
+ print('filename:' + handler.output_path)
|
|
|
+ for jsname in jslibs:
|
|
|
+ filename = os.path.join(CUR_FILE_DIR, "util/" + jsname + ".min.js")
|
|
|
+ handler.update(jsname, filename)
|
|
|
+ handler.save()
|
|
|
+ print('\n')
|
|
|
+
|
|
|
+def main():
|
|
|
+ parser = argparse.ArgumentParser()
|
|
|
+ parser.add_argument('-d', '--dir', help='javascript dir',
|
|
|
+ required=False, default=CUR_FILE_DIR)
|
|
|
+ args = parser.parse_args()
|
|
|
+ syncToAll(args.dir)
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|