| Index: bootstrap/virtualenv/bin/rebuild-script.py
|
| diff --git a/bootstrap/virtualenv/bin/rebuild-script.py b/bootstrap/virtualenv/bin/rebuild-script.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..44fb1296e5a4eccc1ff6de670b91018ca79b7307
|
| --- /dev/null
|
| +++ b/bootstrap/virtualenv/bin/rebuild-script.py
|
| @@ -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()
|
| +
|
|
|