diff -r 000000000000 -r 6474c204b198 python/virtualenv/bin/rebuild-script.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/virtualenv/bin/rebuild-script.py Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,71 @@ +#!/usr/bin/env python +""" +Helper script to rebuild virtualenv.py from virtualenv_support +""" + +import re +import os +import sys + +here = os.path.dirname(__file__) +script = os.path.join(here, '..', 'virtualenv.py') + +file_regex = re.compile( + r'##file (.*?)\n([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*convert\("""(.*?)"""\)', + re.S) +file_template = '##file %(filename)s\n%(varname)s = convert("""\n%(data)s""")' + +def rebuild(): + f = open(script, 'rb') + content = f.read() + f.close() + parts = [] + last_pos = 0 + match = None + for match in file_regex.finditer(content): + parts.append(content[last_pos:match.start()]) + last_pos = match.end() + filename = match.group(1) + varname = match.group(2) + data = match.group(3) + print('Found reference to file %s' % filename) + pathname = os.path.join(here, '..', 'virtualenv_embedded', filename) + f = open(pathname, 'rb') + c = f.read() + f.close() + new_data = c.encode('zlib').encode('base64') + if new_data == data: + print(' Reference up to date (%s bytes)' % len(c)) + parts.append(match.group(0)) + continue + print(' Content changed (%s bytes -> %s bytes)' % ( + zipped_len(data), len(c))) + new_match = file_template % dict( + filename=filename, + varname=varname, + data=new_data) + parts.append(new_match) + parts.append(content[last_pos:]) + new_content = ''.join(parts) + if new_content != content: + sys.stdout.write('Content updated; overwriting... ') + f = open(script, 'wb') + f.write(new_content) + f.close() + print('done.') + else: + print('No changes in content') + if match is None: + print('No variables were matched/found') + +def zipped_len(data): + if not data: + return 'no data' + try: + return len(data.decode('base64').decode('zlib')) + except: + return 'unknown' + +if __name__ == '__main__': + rebuild() +