From 30a450cc9cc2fb7bd312eb9eb749d54725672203 Mon Sep 17 00:00:00 2001 From: Filip Brygidyn Date: Sat, 14 Dec 2019 17:20:37 +0100 Subject: [PATCH 3/4] Walk Method: Improve link traversal skipping diff --git a/catfish/CatfishSearchEngine.py b/catfish/CatfishSearchEngine.py index 6942de2d..178c1f50 100644 --- a/catfish/CatfishSearchEngine.py +++ b/catfish/CatfishSearchEngine.py @@ -296,7 +296,7 @@ class CatfishSearchMethod_Walk(CatfishSearchMethod): """Initialize the 'walk' Search Method.""" CatfishSearchMethod.__init__(self, "walk") - def get_dir_list(self, root, dirs, xdg_list, exclude_list): + def get_dir_list(self, root, dirs, xdg_list, exclude_list, processed_links): dirs = sorted(dirs, key=lambda s: s.lower()) # Prioritize: XDG, Visible (Linked), Dotfile (Linked) @@ -316,6 +316,11 @@ class CatfishSearchMethod_Walk(CatfishSearchMethod): xdgdirs.append(path) continue islink = os.path.islink(path) + if islink: + realpath = os.path.realpath(path) + if realpath in processed_links: + continue + processed_links.append(realpath) if os.path.basename(path).startswith("."): if islink: dotlinks.append(path) @@ -378,7 +383,7 @@ class CatfishSearchMethod_Walk(CatfishSearchMethod): processed_links.append(realpath) # Prioritize and drop excluded paths - dirs[:] = self.get_dir_list(root, dirs, xdgdirlist, exclude) + dirs[:] = self.get_dir_list(root, dirs, xdgdirlist, exclude, processed_links) paths = dirs + files paths.sort() -- 2.24.0