Correctly remove source duplicates.
Duplicate sources must be detected from their classes. So add a optional arguments key_function to remove_duplicates to use a custom key to compare elems and use it to remove duplicate sources using their classes.
This commit is contained in:
parent
14d609d007
commit
ea3ea77256
|
@ -23,12 +23,15 @@ class Defaultdict(defaultdict):
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return self[name]
|
return self[name]
|
||||||
|
|
||||||
def remove_duplicates(iterable):
|
def remove_duplicates(iterable, key_function=None):
|
||||||
seen = set()
|
seen = set()
|
||||||
|
if key_function is None:
|
||||||
|
key_function = lambda e:e
|
||||||
for elem in iterable:
|
for elem in iterable:
|
||||||
if elem in seen:
|
key = key_function(elem)
|
||||||
|
if key in seen:
|
||||||
continue
|
continue
|
||||||
seen.add(elem)
|
seen.add(key)
|
||||||
yield elem
|
yield elem
|
||||||
|
|
||||||
def get_sha256(path):
|
def get_sha256(path):
|
||||||
|
@ -778,7 +781,8 @@ class Builder:
|
||||||
yield targetName
|
yield targetName
|
||||||
|
|
||||||
def prepare_sources(self):
|
def prepare_sources(self):
|
||||||
sources = remove_duplicates(dep.source for dep in self.targets.values())
|
sources = (dep.source for dep in self.targets.values())
|
||||||
|
sources = remove_duplicates(sources, lambda s:s.__class__)
|
||||||
for source in sources:
|
for source in sources:
|
||||||
print("prepare sources {} :".format(source.name))
|
print("prepare sources {} :".format(source.name))
|
||||||
source.prepare()
|
source.prepare()
|
||||||
|
|
Loading…
Reference in New Issue