1
1
#!/usr/bin/env python
2
2
3
3
import sys
4
+ import os
4
5
import urllib
5
6
import base64
6
-
7
+ import hashlib
7
8
8
9
class VarImpl (object ):
9
10
"""
@@ -54,24 +55,10 @@ def Lookup(self, var_name):
54
55
raise gclient_utils .Error ("Var is not defined: %s" % var_name )
55
56
56
57
57
- def FileRead (filename , mode = 'rU' ):
58
- with open (filename , mode = mode ) as f :
59
- return f .read ()
60
-
61
-
62
- if len (sys .argv ) < 2 or len (sys .argv ) > 3 :
63
- # print("Usage: %s <path to DEPS file>" % sys.argv[0])
64
- print ("Usage: %s <v8 version>" % sys .argv [0 ])
65
- print ("Options:" )
66
- print (" --homebrew Generate hombrew output" )
67
- exit (1 )
68
-
69
-
70
58
# https://chromium.googlesource.com/v8/v8.git/+archive/5.0.71.11.tar.gz
71
59
# https://chromium.googlesource.com/v8/v8.git/+/5.0.71.11/DEPS?format=TEXT
72
60
73
-
74
- class V8DepsFileLoader (object ):
61
+ class V8DepsRemoteFileLoader (object ):
75
62
def __init__ (self , version ):
76
63
self .version = version
77
64
@@ -83,22 +70,16 @@ def load(self):
83
70
84
71
return base64 .b64decode (s )
85
72
73
+ class V8DepsLocalFileLoader (object ):
74
+ def __init__ (self , path ):
75
+ self .path = path
86
76
87
- class V8DepsResolver (object ):
88
- def __init__ (self , version ):
89
- self .version = version
90
-
91
- def get_deps (self ):
92
- url = 'https://chromium.googlesource.com/v8/v8.git/+archive/%s.tar.gz' % self .version
93
-
94
- return {url : 'v8' }
95
-
96
- def output_deps (self ):
97
- for k , v in self .get_deps ().items ():
98
- print ("%s %s" % (k , v ))
77
+ def load (self ):
78
+ with open (self .path ) as f :
79
+ return f .read ()
99
80
100
81
101
- class DepsResolver (object ):
82
+ class AbstractDepsResolver (object ):
102
83
def __init__ (self , deps_content ):
103
84
self .deps_content = deps_content
104
85
@@ -124,9 +105,17 @@ def convert_parsed_deps(self, deps):
124
105
deps_converted = {}
125
106
126
107
for k , v in deps .items ():
127
- v = v .replace ('@' , '/+archive/' ) + '.tar.gz'
108
+ url , revision = v .split ('@' , 2 )
109
+
110
+ resource = url .rsplit ('/' , 1 )[1 ].split ('.' , 1 )[0 ]
111
+ target = k .replace ('v8/' , '' )
128
112
129
- deps_converted [v ] = k
113
+ deps_converted [resource ] = {
114
+ 'url' : url ,
115
+ 'revision' : revision ,
116
+ 'resource' : resource ,
117
+ 'target' : target
118
+ }
130
119
131
120
return deps_converted
132
121
@@ -135,70 +124,73 @@ def get_deps(self):
135
124
136
125
return self .convert_parsed_deps (parsed )
137
126
138
- def output_deps (self ):
139
- for k , v in self .get_deps ().items ():
140
- print ("%s %s" % (k , v ))
141
127
128
+ class HomebrewDepsResolver (AbstractDepsResolver ):
129
+ def __init__ (self , deps_content , version , tpl_path , out_path ):
130
+ self .deps_content = deps_content
131
+ self .version = version
132
+ self .tpl_path = tpl_path
133
+ self .out_path = out_path
142
134
143
- class HomebrewDepsResolver (DepsResolver ):
144
- def convert_parsed_deps (self , deps ):
145
- deps_converted = {}
135
+ def import_deps_fast (self ):
136
+ vars = {}
146
137
147
- for k , v in deps .items ():
148
- url , revision = v .split ('@' , 2 )
138
+ url = "https://chromium.googlesource.com/v8/v8.git/+archive/%s.tar.gz" % self .version
149
139
150
- resource = url .rsplit ('/' , 1 )[1 ].split ('.' , 1 )[0 ]
151
- target = k .replace ('v8/' , '' )
140
+ f = urllib .urlopen (url )
141
+ s = f .read ()
142
+ f .close ()
152
143
153
- deps_converted [resource ] = {
154
- 'url' : url ,
155
- 'revision' : revision ,
156
- 'resource' : resource ,
157
- 'target' : target
158
- }
144
+ sha256 = hashlib .sha256 (s ).hexdigest ()
159
145
160
- return deps_converted
146
+ vars ['{{ URL }}' ] = 'url "%s"' % url
147
+ vars ['{{ SHA256 }}' ] = 'sha256 "%s"' % sha256
161
148
162
- def output_deps ( self ):
163
- print (" # resources definition, do not edit, autogenerated" )
164
- print ("" )
149
+ resources_def = []
150
+ resources_def . append (" # resources definition, do not edit, autogenerated" )
151
+ resources_def . append ("" )
165
152
166
153
for k , v in self .get_deps ().items ():
167
- print (" resource \" %s\" do " % (v ['resource' ]))
168
- print (" url \" %s\" ," % (v ['url' ]))
169
- print (" :revision => \" %s\" " % (v ['revision' ]))
170
- print (" end" )
171
- print ("" )
154
+ resources_def .append (" resource \" %s\" do" % (v ['resource' ]))
155
+ resources_def .append (" url \" %s\" ," % (v ['url' ]))
156
+ resources_def .append (" :revision => \" %s\" " % (v ['revision' ]))
157
+ resources_def .append (" end" )
158
+ resources_def .append ("" )
159
+
160
+ vars ['{{ RESOURCES_DEFINITION }}' ] = "\n " .join (resources_def ).strip ()
172
161
173
- print ("" )
174
- print ("" )
175
- print (" # resources installation, do not edit, autogenerated" )
162
+ resources_inst = []
163
+ resources_inst .append (" # resources installation, do not edit, autogenerated" )
176
164
177
165
for k , v in self .get_deps ().items ():
178
- print (" (buildpath/\" {target}\" ).install resource(\" {resource}\" )" .format (** v ))
166
+ resources_inst .append (" (buildpath/\" {target}\" ).install resource(\" {resource}\" )" .format (** v ))
167
+
168
+ vars ['{{ RESOURCES_INSTALLATION }}' ] = "\n " .join (resources_inst ).strip ()
179
169
180
- print ("" )
170
+ tpl = ""
171
+ with open (self .tpl_path ) as f :
172
+ tpl = f .read ()
181
173
182
- if len (sys .argv ) == 2 :
183
- version = sys .argv [1 ]
184
- is_homebrew = False
185
- else :
186
- version = sys .argv [2 ]
187
- is_homebrew = True
174
+ for k , v in vars .iteritems ():
175
+ tpl = tpl .replace (k , v )
188
176
189
- deps_loader = V8DepsFileLoader (version )
177
+ with open (self .out_path , 'w' ) as f :
178
+ f .write (tpl )
190
179
191
- deps_content = deps_loader .load ()
192
180
193
- # print(deps_content)
194
- # deps_content = FileRead(sys.argv[1])
181
+ class PPAPackagingDepsResolver (AbstractDepsResolver ):
182
+ def import_deps_fast (self ):
183
+ for k , v in self .get_deps ().items ():
184
+ tgz = v ['url' ] + '/+archive/' + v ['revision' ]+ '.tar.gz'
185
+
186
+ cmd = "mkdir -p " + v ['target' ]
195
187
196
- v8_deps_resolver = V8DepsResolver (version )
197
- if is_homebrew :
198
- deps_resolver = HomebrewDepsResolver (deps_content )
199
- else :
200
- deps_resolver = DepsResolver (deps_content )
188
+ if os .path .isdir (v ['target' ]):
189
+ cmd = "rm -rf " + v ['target' ] + " && " + cmd
201
190
202
- v8_deps_resolver .output_deps ()
191
+ print (cmd )
192
+ os .system (cmd )
203
193
204
- deps_resolver .output_deps ()
194
+ cmd = "curl -s " + tgz + " | tar zxf - -C " + v ['target' ]
195
+ print (cmd )
196
+ os .system (cmd )
0 commit comments