11#!/usr/bin/env python
22
33import sys
4+ import os
45import urllib
56import base64
6-
7+ import hashlib
78
89class VarImpl (object ):
910 """
@@ -54,24 +55,10 @@ def Lookup(self, var_name):
5455 raise gclient_utils .Error ("Var is not defined: %s" % var_name )
5556
5657
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-
7058# https://chromium.googlesource.com/v8/v8.git/+archive/5.0.71.11.tar.gz
7159# https://chromium.googlesource.com/v8/v8.git/+/5.0.71.11/DEPS?format=TEXT
7260
73-
74- class V8DepsFileLoader (object ):
61+ class V8DepsRemoteFileLoader (object ):
7562 def __init__ (self , version ):
7663 self .version = version
7764
@@ -83,22 +70,16 @@ def load(self):
8370
8471 return base64 .b64decode (s )
8572
73+ class V8DepsLocalFileLoader (object ):
74+ def __init__ (self , path ):
75+ self .path = path
8676
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 ()
9980
10081
101- class DepsResolver (object ):
82+ class AbstractDepsResolver (object ):
10283 def __init__ (self , deps_content ):
10384 self .deps_content = deps_content
10485
@@ -124,9 +105,17 @@ def convert_parsed_deps(self, deps):
124105 deps_converted = {}
125106
126107 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/' , '' )
128112
129- deps_converted [v ] = k
113+ deps_converted [resource ] = {
114+ 'url' : url ,
115+ 'revision' : revision ,
116+ 'resource' : resource ,
117+ 'target' : target
118+ }
130119
131120 return deps_converted
132121
@@ -135,70 +124,73 @@ def get_deps(self):
135124
136125 return self .convert_parsed_deps (parsed )
137126
138- def output_deps (self ):
139- for k , v in self .get_deps ().items ():
140- print ("%s %s" % (k , v ))
141127
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
142134
143- class HomebrewDepsResolver (DepsResolver ):
144- def convert_parsed_deps (self , deps ):
145- deps_converted = {}
135+ def import_deps_fast (self ):
136+ vars = {}
146137
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
149139
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 ()
152143
153- deps_converted [resource ] = {
154- 'url' : url ,
155- 'revision' : revision ,
156- 'resource' : resource ,
157- 'target' : target
158- }
144+ sha256 = hashlib .sha256 (s ).hexdigest ()
159145
160- return deps_converted
146+ vars ['{{ URL }}' ] = 'url "%s"' % url
147+ vars ['{{ SHA256 }}' ] = 'sha256 "%s"' % sha256
161148
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 ("" )
165152
166153 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 ()
172161
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" )
176164
177165 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 ()
179169
180- print ("" )
170+ tpl = ""
171+ with open (self .tpl_path ) as f :
172+ tpl = f .read ()
181173
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 )
188176
189- deps_loader = V8DepsFileLoader (version )
177+ with open (self .out_path , 'w' ) as f :
178+ f .write (tpl )
190179
191- deps_content = deps_loader .load ()
192180
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' ]
195187
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
201190
202- v8_deps_resolver .output_deps ()
191+ print (cmd )
192+ os .system (cmd )
203193
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