@api.publicApi
    def getTroves(self, troves, withFiles = True, callback = None):
        """
        @param troves: List of troves to be retrieved
        @type troves: list
        @param withFiles: If set (default), retrieve files.
        @type withFiles: bool
        @raise RepositoryError: if a repository error occurred.
        """
        if not troves:
            return []
        chgSetList = []
        for (name, version, flavor) in troves:
            chgSetList.append((name, (None, None), (version, flavor), True))

        cs = self._getChangeSet(chgSetList, recurse = False,
                                withFiles = withFiles,
                                withFileContents = False,
                                callback = callback)

        l = []
        # walk the list so we can return the troves in the same order
        for (name, version, flavor) in troves:
            try:
                troveCs = cs.getNewTroveVersion(name, version, flavor)
            except __HOLE__:
                l.append(None)
                continue

            # trove integrity checks don't work when file information is
            # excluded
            t = trv_mod.Trove(troveCs, skipIntegrityChecks = not withFiles)
            l.append(t)

        return l
dataset/ETHPy150Open sassoftware/conary/conary/repository/netclient.py/NetworkRepositoryClient.getTroves