compare_projects: Initial stab at making a project comparison
This commit is contained in:
parent
ae2df0c4c3
commit
aa6fc5ab08
1 changed files with 34 additions and 1 deletions
|
@ -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}
|
||||
|
||||
|
||||
|
||||
|
|
Reference in a new issue