From 642b4acca1900c55662030ffc5162e9504881764 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Tue, 25 Jun 2019 15:46:14 +0200 Subject: [PATCH] Let TeXFiles.py handle symbolic links. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nix (https://nixos.org) is a Unix package manager, which can be used to install LaTeX on macOS. A peculiarity of Nix is that all packages are installed into separate directories and the actual directory tree is then constructed via symlinks. This interacts badly with the way LyX currently detects files in the TeX setup, because TeXFiles.py does not follow symlinks. Therefore, almost nothing is found when using LyX together with Nix’ LaTeX. Patch from Michael Roitzsch. --- lib/CREDITS | 3 +++ lib/generate_contributions.py | 8 ++++++++ lib/scripts/TeXFiles.py | 12 +++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/CREDITS b/lib/CREDITS index 21ab0a2a61..086970efd8 100644 --- a/lib/CREDITS +++ b/lib/CREDITS @@ -503,6 +503,9 @@ @bBernhard Roider @iE-mail: bernhard.roider () sonnenkinder ! org Various bug fixes +@bMichael Roitzsch +@iE-mail: reactorcontrol () icloud ! com + Fixes for the Nix package manager @bJim Rotmalm @iE-mail: jim.rotmalm () gmail ! com Swedish translation diff --git a/lib/generate_contributions.py b/lib/generate_contributions.py index e04834bf22..827e247d9f 100755 --- a/lib/generate_contributions.py +++ b/lib/generate_contributions.py @@ -1679,6 +1679,14 @@ contributors = [ "29 January 2007", u"Various bug fixes"), + contributor(u"Michael Roitzsch", + "reactorcontrol () icloud ! com", + "GPL", + "Re: TeXFiles.py compatibility with Nix on macOS", + "m=156146891826580", + "25 June 2019", + u"Fixes for the Nix package manager"), + contributor(u"Jim Rotmalm", "jim.rotmalm () gmail ! com", "GPL", diff --git a/lib/scripts/TeXFiles.py b/lib/scripts/TeXFiles.py index aac29bc9d0..188f6b90ad 100755 --- a/lib/scripts/TeXFiles.py +++ b/lib/scripts/TeXFiles.py @@ -116,7 +116,17 @@ for type in types: if not os.path.isdir(dir): continue # walk down the file hierarchy - for root,path,files in os.walk(dir): + visited = set() + for root,dirs,files in os.walk(dir, followlinks=True): + # prevent inifinite recursion + recurse = [] + for dir in dirs: + st = os.stat(os.path.join(root, dir)) + key = st.st_dev, st.st_ino + if key not in visited: + visited.add(key) + recurse.append(dir) + dirs[:] = recurse # check file type for file in files: if len(file) > 4 and file[-4:] == file_ext: