зеркало из https://github.com/mozilla/gecko-dev.git
72 строки
2.0 KiB
Python
Executable File
72 строки
2.0 KiB
Python
Executable File
#!/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()
|
|
|