def do(self):
        if self.recipe.getType() == recipe.RECIPE_TYPE_CAPSULE:
            return
        filters = [(x, filter.Filter(x, self.macros)) for x in self.excepts]
        for component in self.recipe.autopkg.getComponents():
            for inode in component.linkGroups:
                # ensure all in same directory, except for directories
                # matching regexps that have been passed in

                allPaths = [x for x in component.linkGroups[inode]]
                for path in allPaths[:]:
                    for regexp, f in filters:
                        if f.match(path):
                            self.unusedFilters['exceptions'].discard(regexp)
                            allPaths.remove(path)
                dirSet = set(os.path.dirname(x) + '/' for x in allPaths)

                if len(dirSet) > 1:
                    self.error('files %s are hard links across directories %s',
                               ', '.join(sorted(component.linkGroups[inode])),
                               ', '.join(sorted(list(dirSet))))
                    self.error('If these directories cannot reasonably be'
                               ' on different filesystems, disable this'
                               ' warning by calling'
                               " r.LinkCount(exceptions=('%s')) or"
                               " equivalent"
                               % "', '".join(sorted(list(dirSet))))