|
|
@ -1,4 +1,4 @@ |
|
|
|
# Copyright 2015, Google Inc. |
|
|
|
# Copyright 2015-2016, Google Inc. |
|
|
|
# All rights reserved. |
|
|
|
# All rights reserved. |
|
|
|
# |
|
|
|
# |
|
|
|
# Redistribution and use in source and binary forms, with or without |
|
|
|
# Redistribution and use in source and binary forms, with or without |
|
|
@ -36,10 +36,13 @@ of the list of dependencies. |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
def get_lib(libs, name): |
|
|
|
def get_lib(libs, name): |
|
|
|
return next(lib for lib in libs if lib['name']==name) |
|
|
|
try: |
|
|
|
|
|
|
|
return next(lib for lib in libs if lib['name']==name) |
|
|
|
|
|
|
|
except StopIteration: |
|
|
|
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def transitive_deps(lib, libs): |
|
|
|
def transitive_deps(lib, libs): |
|
|
|
if 'deps' in lib: |
|
|
|
if lib is not None and 'deps' in lib: |
|
|
|
# Recursively call transitive_deps on each dependency, and take the union |
|
|
|
# Recursively call transitive_deps on each dependency, and take the union |
|
|
|
return set.union(set(lib['deps']), |
|
|
|
return set.union(set(lib['deps']), |
|
|
|
*[set(transitive_deps(get_lib(libs, dep), libs)) |
|
|
|
*[set(transitive_deps(get_lib(libs, dep), libs)) |
|
|
|