compare_projects: Initial stab at making a project comparison

This commit is contained in:
Sayamindu Dasgupta 2013-06-19 21:36:29 -04:00
parent ae2df0c4c3
commit aa6fc5ab08

View file

@ -1,4 +1,5 @@
def __tupleit(l):
return tuple(map(__tupleit, l)) if isinstance(l, (list, tuple)) else l
def _real_extract_blocks_from_stack(stack):
for block in stack:
@ -21,3 +22,35 @@ def extract_blocks_from_script(script):
blocknames = []
blocks = list(_real_extract_blocks_from_stack(script[2]))
return blocks
def compare_projects(project1, project2):
'''
Compares two project objects (or they can be revisions).
Comparison is done between scripts and assets.
Returns: List of changes to sprites and assets.
'''
blocks = [[],[]]
assets = [[],[]]
i = 0
for p in [project1, project2]:
for sprite in p.sprites:
try:
for script in sprite.scripts:
blocks[i].extend(extract_blocks_from_script(script))
except AttributeError:
pass
sounds = [x.md5 for x in sprite.sounds]
images = [x.baseLayerMD5 for x in sprite.costumes]
assets[i] = sounds + images
i += 1
block_diff = set(__tupleit(blocks[0])) ^ set(__tupleit(blocks[1]))
asset_diff = set(assets[0]) ^ set(assets[1])
return {'block_diff' : block_diff, 'asset_diff' : asset_diff}