docs: 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))