Changeset 241 for tbroadcast/v2/python
- Timestamp:
- Aug 28, 2006, 4:50:44 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tbroadcast/v2/python/tbroadcast.py
r240 r241 13 13 import commands 14 14 import traceback 15 from threading import BoundedSemaphore 15 16 16 17 from threadpool import WorkRequest … … 24 25 25 26 def __init__(self, num_workers=20): 26 self.pool = ThreadPool(num_workers=num_workers) 27 self.packages = {} 27 self.pool = ThreadPool(num_workers=num_workers) 28 self.current_package = self.get_current_package() 29 self.packages = {} 30 self.counter = 0 31 self.semaphore = BoundedSemaphore(1) 28 32 self.check_cycles() 29 33 self.instanciate_packages () 30 31 34 self.reduce_graph () 35 36 def get_counter(self): 37 self.semaphore.acquire () 38 self.counter = self.counter + 1 39 value = self.counter 40 self.semaphore.release() 41 return value 42 32 43 def check_cycles (self): 33 44 cmd = 'cmt show cycles' … … 56 67 sys.exit(-1) 57 68 lines = string.split(output, '\n') 58 current_package = self.get_current_package() 59 self.packages [current_package] = {'version': '*', 'dependencies': list(), 'status': 'waiting', 'path':os.getcwd()} 69 self.packages [self.current_package] = {'version': '*', 'dependencies': list(), 'status': 'waiting', 'path':os.getcwd(), 'indice':1} 60 70 indice = 1 61 71 for line in lines: … … 63 73 name = string.split (line)[2] 64 74 version = string.split (line)[3] 65 if name not in self.packages[ current_package]['dependencies']:66 self.packages[ current_package]['dependencies'].append (name)75 if name not in self.packages[self.current_package]['dependencies']: 76 self.packages[self.current_package]['dependencies'].append (name) 67 77 #print '\n#', indice,':: add package', name 68 78 indice = indice + 1 69 79 if not self.packages.has_key (name): 70 self.packages [name] = {'version': version, 'dependencies': list(), 'status': 'waiting', 'path': None} 80 self.packages [name] = {'version': version, 'dependencies': list(), 'status': 'waiting', 'path': None, 'indice':indice} 81 indice = indice + 1 71 82 found = False 72 83 for ligne in lines: … … 87 98 if len(result)==4: 88 99 name, version, offset, path = string.split (line[4:len(line)], " ") 100 #print name, version, offset, path 101 #print path[1:-1] + '/' + offset + '/' +name + '/' + version + '/cmt' 102 if path == '(no_auto_imports)': 103 path = offset 104 offset = '' 89 105 if os.path.exists(path[1:-1] + '/' + offset + '/' +name + '/' + version + '/cmt'): 90 106 full_path = path[1:-1] + '/' + offset + '/' +name + '/' + version + '/cmt' … … 155 171 print key, '-->', self.packages[key] ['dependencies'],',', self.packages[key] ['status'] 156 172 173 def print_status(self, status): 174 print '# ------------------------' 175 print '# package --> dependencies' 176 print '# ------------------------' 177 i = 1 178 for key in self.packages.keys(): 179 if self.packages[key] ['status'] == status: 180 print i , key, '-->', self.packages[key] ['dependencies'],',', self.packages[key] ['status'] 181 i = i + 1 182 183 def reduce_graph(self): 184 packages = {} 185 dependencies = list () 186 dependencies.append (self.current_package) 187 space = ' ' 188 #print '-->', self.current_package 189 packages[self.current_package] = list() 190 for package in self.packages[self.current_package]['dependencies']: 191 if package not in dependencies: 192 dependencies.append(package) 193 packages[self.current_package].append(package) 194 packages[package] = list() 195 #print ' -->', package 196 limit = True 197 for paquetage in self.packages[package]['dependencies']: 198 if paquetage not in dependencies: 199 space = space + ' ' 200 #print space, paquetage 201 dependencies.append (paquetage) 202 packages[package].append (paquetage) 203 else: 204 packages[package] = list() 205 space = '' 206 for key in packages: 207 #print key, packages[key] 208 self.packages[key]['dependencies'] = packages[key] 209 157 210 def is_work_unit_waiting (self, name): 158 211 return self.packages[name] ['status'] == 'waiting' … … 183 236 if name in self.packages[key]['dependencies']: 184 237 self.packages[key]['dependencies'].remove(name) 185 238 186 239 def add_work_unit (self, name, cmd): 187 240 if self.is_work_unit_waiting (name): … … 204 257 205 258 def execute_all(self,command): 259 #self.print_dependencies () 206 260 self.execute (command) 207 261 self.wait() 208 ##while self.is_work_units(): 262 #self.print_dependencies () 263 #self.print_status (status='waiting') 264 #print self.is_work_units() 265 #while self.is_work_units(): 266 # self.wait() 209 267 210 268 def wait (self): … … 226 284 os.chdir(path) 227 285 print '#--------------------------------------------------------------' 228 print '# Now trying ['+ arg['cmd']+'] in ' + path286 print '# ('+str(self.get_counter())+'/'+str(len(self.packages))+') Now trying ['+ arg['cmd']+'] in ' + path 229 287 print '#--------------------------------------------------------------' 230 288 cmd = arg['cmd'] … … 245 303 print '#--------------------------------------------------------------' 246 304 sys.exit(-1) 247 #--------- EoF --------# 305 #--------- EoF --------#
Note: See TracChangeset
for help on using the changeset viewer.