File: rebuild_script.patch

package info (click to toggle)
python-virtualenv 1.7.1.2-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 2,880 kB
  • sloc: sh: 4,940; python: 2,992; makefile: 20; csh: 18
file content (79 lines) | stat: -rw-r--r-- 2,413 bytes parent folder | download
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
72
73
74
75
76
77
78
79
Description: Include the tool to rebuild the embedded parts of virtualenv.py
 It's part of the upstream git repository, but was left out of the tarball.
Author: Stefano Rivera <stefanor@debian.org>
Forwarded: https://github.com/pypa/virtualenv/pull/256

--- /dev/null
+++ b/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()
+