File: rebuild-script.py

package info (click to toggle)
python-virtualenv 1.11.6%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 728 kB
  • ctags: 526
  • sloc: python: 2,521; makefile: 121; sh: 52; csh: 21
file content (71 lines) | stat: -rwxr-xr-x 2,029 bytes parent folder | download | duplicates (19)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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()