1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/python/virtualenv/bin/rebuild-script.py Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,71 @@ 1.4 +#!/usr/bin/env python 1.5 +""" 1.6 +Helper script to rebuild virtualenv.py from virtualenv_support 1.7 +""" 1.8 + 1.9 +import re 1.10 +import os 1.11 +import sys 1.12 + 1.13 +here = os.path.dirname(__file__) 1.14 +script = os.path.join(here, '..', 'virtualenv.py') 1.15 + 1.16 +file_regex = re.compile( 1.17 + r'##file (.*?)\n([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*convert\("""(.*?)"""\)', 1.18 + re.S) 1.19 +file_template = '##file %(filename)s\n%(varname)s = convert("""\n%(data)s""")' 1.20 + 1.21 +def rebuild(): 1.22 + f = open(script, 'rb') 1.23 + content = f.read() 1.24 + f.close() 1.25 + parts = [] 1.26 + last_pos = 0 1.27 + match = None 1.28 + for match in file_regex.finditer(content): 1.29 + parts.append(content[last_pos:match.start()]) 1.30 + last_pos = match.end() 1.31 + filename = match.group(1) 1.32 + varname = match.group(2) 1.33 + data = match.group(3) 1.34 + print('Found reference to file %s' % filename) 1.35 + pathname = os.path.join(here, '..', 'virtualenv_embedded', filename) 1.36 + f = open(pathname, 'rb') 1.37 + c = f.read() 1.38 + f.close() 1.39 + new_data = c.encode('zlib').encode('base64') 1.40 + if new_data == data: 1.41 + print(' Reference up to date (%s bytes)' % len(c)) 1.42 + parts.append(match.group(0)) 1.43 + continue 1.44 + print(' Content changed (%s bytes -> %s bytes)' % ( 1.45 + zipped_len(data), len(c))) 1.46 + new_match = file_template % dict( 1.47 + filename=filename, 1.48 + varname=varname, 1.49 + data=new_data) 1.50 + parts.append(new_match) 1.51 + parts.append(content[last_pos:]) 1.52 + new_content = ''.join(parts) 1.53 + if new_content != content: 1.54 + sys.stdout.write('Content updated; overwriting... ') 1.55 + f = open(script, 'wb') 1.56 + f.write(new_content) 1.57 + f.close() 1.58 + print('done.') 1.59 + else: 1.60 + print('No changes in content') 1.61 + if match is None: 1.62 + print('No variables were matched/found') 1.63 + 1.64 +def zipped_len(data): 1.65 + if not data: 1.66 + return 'no data' 1.67 + try: 1.68 + return len(data.decode('base64').decode('zlib')) 1.69 + except: 1.70 + return 'unknown' 1.71 + 1.72 +if __name__ == '__main__': 1.73 + rebuild() 1.74 +