def getTroves(self, troveList, withFiles = True, allowMissing=True,
                    callback=None):
        troveList = list(enumerate(troveList)) # make a copy and add indexes
        numTroves = len(troveList)
        results = [None] * numTroves

        for source in self.sources:
            newTroveList = []
            newIndexes = []
            try:
                troves = source.getTroves([x[1] for x in troveList],
                                          withFiles=withFiles,
                                          callback=callback)
            except __HOLE__:
                continue
            for ((index, troveTup), trove) in itertools.izip(troveList, troves):
                if trove is None:
                    newTroveList.append((index, troveTup))
                else:
                    results[index] = trove
            troveList = newTroveList
        if troveList and not allowMissing:
            raise errors.TroveMissingError(troveList[0][1][0],
                                           troveList[0][1][1])
        return results
dataset/ETHPy150Open sassoftware/conary/conary/repository/trovesource.py/SourceStack.getTroves