makes a list of DPs from a list of (filename,quiet) pairs.
        If unbanish is False, DPs with a default "banish" policy will be skipped.
        Symlinks will be resolved, and non-unique filenames removed from list.

def makeDataProducts(self, files, unbanish=False, unignore=False):
        """makes a list of DPs from a list of (filename,quiet) pairs.
        If unbanish is False, DPs with a default "banish" policy will be skipped.
        Symlinks will be resolved, and non-unique filenames removed from list.
        """
        paths = set()
        dps = []
        for filename, quiet in files:
            filename = filename.rstrip('/')
            sourcepath = Purr.canonizePath(filename)
            if sourcepath not in paths:
                paths.add(sourcepath)
                filename = os.path.basename(filename)
                policy, filename, comment = self._default_dp_props.get(filename, ("copy", filename, ""))
                dprintf(4, "%s: default policy is %s,%s,%s\n", sourcepath, policy, filename, comment)
                if policy == "banish":
                    if unbanish:
                        policy = "copy"
                    else:
                        continue
                if unignore and policy == "ignore":
                    policy = "copy"
                dps.append(Purr.DataProduct(filename=filename, sourcepath=sourcepath,
                                            policy=policy, comment=comment, quiet=quiet))
        return sorted(dps, lambda a, b: cmp(a.filename, b.filename))