comparison mxtool/mx.py @ 13824:96d5cb754b68

address issue in Eclipse working set generation
author Michael Haupt <michael.haupt@oracle.com>
date Thu, 30 Jan 2014 11:02:16 +0100
parents fc5e2c808a23
children 12e1c788c1d5
comparison
equal deleted inserted replaced
13821:b16ec83edc73 13824:96d5cb754b68
3293 def __init__(self): 3293 def __init__(self):
3294 self.current_ws_name = 'none yet' 3294 self.current_ws_name = 'none yet'
3295 self.current_ws = None 3295 self.current_ws = None
3296 self.seen_ws = list() 3296 self.seen_ws = list()
3297 self.seen_projects = list() 3297 self.seen_projects = list()
3298 self.aggregate_ws = False
3299 self.nested_ws = False
3298 3300
3299 ps = ParserState() 3301 ps = ParserState()
3300 3302
3301 # parsing logic 3303 # parsing logic
3302 def _ws_start(name, attributes): 3304 def _ws_start(name, attributes):
3303 if name == 'workingSet': 3305 if name == 'workingSet':
3304 ps.current_ws_name = attributes['name'] 3306 if attributes.has_key('name'):
3305 if workingSets.has_key(ps.current_ws_name): 3307 ps.current_ws_name = attributes['name']
3306 ps.current_ws = workingSets[ps.current_ws_name] 3308 if attributes.has_key('aggregate') and attributes['aggregate'] == 'true':
3307 ps.seen_ws.append(ps.current_ws_name) 3309 ps.aggregate_ws = True
3308 ps.seen_projects = list() 3310 ps.current_ws = None
3309 else: 3311 elif workingSets.has_key(ps.current_ws_name):
3310 ps.current_ws = None 3312 ps.current_ws = workingSets[ps.current_ws_name]
3313 ps.seen_ws.append(ps.current_ws_name)
3314 ps.seen_projects = list()
3315 else:
3316 ps.current_ws = None
3311 target.open(name, attributes) 3317 target.open(name, attributes)
3312 parser.StartElementHandler = _ws_item 3318 parser.StartElementHandler = _ws_item
3313 3319
3314 def _ws_end(name): 3320 def _ws_end(name):
3321 closeAndResetHandler = False
3315 if name == 'workingSet': 3322 if name == 'workingSet':
3316 if not ps.current_ws is None: 3323 if ps.aggregate_ws:
3317 for p in ps.current_ws: 3324 if ps.nested_ws:
3318 if not p in ps.seen_projects: 3325 ps.nested_ws = False
3319 _workingset_element(target, p) 3326 else:
3320 target.close('workingSet') 3327 ps.aggregate_ws = False
3321 parser.StartElementHandler = _ws_start 3328 closeAndResetHandler = True
3329 else:
3330 if not ps.current_ws is None:
3331 for p in ps.current_ws:
3332 if not p in ps.seen_projects:
3333 _workingset_element(target, p)
3334 closeAndResetHandler = True
3335 if closeAndResetHandler:
3336 target.close('workingSet')
3337 parser.StartElementHandler = _ws_start
3322 elif name == 'workingSetManager': 3338 elif name == 'workingSetManager':
3323 # process all working sets that are new to the file 3339 # process all working sets that are new to the file
3324 for w in sorted(workingSets.keys()): 3340 for w in sorted(workingSets.keys()):
3325 if not w in ps.seen_ws: 3341 if not w in ps.seen_ws:
3326 _workingset_open(target, w) 3342 _workingset_open(target, w)
3334 target.element(name, attributes) 3350 target.element(name, attributes)
3335 else: 3351 else:
3336 p_name = attributes['elementID'][1:] # strip off the leading '=' 3352 p_name = attributes['elementID'][1:] # strip off the leading '='
3337 _workingset_element(target, p_name) 3353 _workingset_element(target, p_name)
3338 ps.seen_projects.append(p_name) 3354 ps.seen_projects.append(p_name)
3355 elif name == 'workingSet':
3356 ps.nested_ws = True
3357 target.element(name, attributes)
3339 3358
3340 # process document 3359 # process document
3341 parser.StartElementHandler = _ws_start 3360 parser.StartElementHandler = _ws_start
3342 parser.EndElementHandler = _ws_end 3361 parser.EndElementHandler = _ws_end
3343 with open(wspath, 'r') as wsfile: 3362 with open(wspath, 'r') as wsfile: