]> git.lyx.org Git - features.git/commitdiff
Let TeXFiles.py handle symbolic links.
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Tue, 25 Jun 2019 13:46:14 +0000 (15:46 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:34 +0000 (15:48 +0200)
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
lib/generate_contributions.py
lib/scripts/TeXFiles.py

index 21ab0a2a618ea806707a20c776aacaa71516cafa..086970efd815612a906b10afe5f0d0c444add15c 100644 (file)
 @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
index e04834bf2292794f518d8e33eac23f7058a3323f..827e247d9f7eb0125e582a944db0bd8ba0b2268d 100755 (executable)
@@ -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",
index aac29bc9d0e20c2c647586d27e00ef3608d933a8..188f6b90ad64d6d16311a818b28d5e95c58cc081 100755 (executable)
@@ -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: