1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/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()
-
|