From 86b241a5f7aa687a6af34289eee75d226f07d049 Mon Sep 17 00:00:00 2001 From: Nicolas F Date: Sat, 10 Jul 2021 19:58:11 +0200 Subject: [PATCH] Fix rendering onto mounted CIFS shares You still shouldn't do it for performance reasons but I guess now you can do it in theory. Yay. --- overviewer_core/assetmanager.py | 4 ++++ overviewer_core/files.py | 29 +++++++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/overviewer_core/assetmanager.py b/overviewer_core/assetmanager.py index dd67b7d..74c45a4 100644 --- a/overviewer_core/assetmanager.py +++ b/overviewer_core/assetmanager.py @@ -181,6 +181,10 @@ top-level directory. od_fd = os.open(self.outputdir, os.O_DIRECTORY) try: os.symlink("markers", "icons", target_is_directory=True, dir_fd=od_fd) + except OSError: + # Example setup where this happens: + # Linux renders onto Windows CIFS share + logging.warning("Could not create the icons symlink") finally: os.close(od_fd) # write a dummy baseMarkers.js if none exists diff --git a/overviewer_core/files.py b/overviewer_core/files.py index 938b8aa..779c5c1 100644 --- a/overviewer_core/files.py +++ b/overviewer_core/files.py @@ -47,18 +47,23 @@ def does_chmod_work(dir_to_test): return chmod_works def does_rename_work(dir_to_test): - with tempfile.NamedTemporaryFile(dir=dir_to_test) as f1: - with tempfile.NamedTemporaryFile(dir=dir_to_test) as f2: - try: - os.rename(f1.name,f2.name) - except OSError: - renameworks = False - logging.debug("Detected that overwriting renames do NOT work in %r" % dir_to_test) - else: - renameworks = True - logging.debug("Detected that overwriting renames work in %r" % dir_to_test) - # re-make this file so it can be deleted without error - open(f1.name, 'w').close() + try: + with tempfile.NamedTemporaryFile(dir=dir_to_test) as f1: + with tempfile.NamedTemporaryFile(dir=dir_to_test) as f2: + try: + os.rename(f1.name,f2.name) + except OSError: + renameworks = False + logging.debug("Detected that overwriting renames do NOT work in %r" + % dir_to_test) + else: + renameworks = True + logging.debug("Detected that overwriting renames work in %r" % dir_to_test) + # re-make this file so it can be deleted without error + open(f1.name, 'w').close() + except FileNotFoundError: + # Special handling for CIFS, which simply cannot cope with any rename whatsoever + renameworks = False return renameworks ## useful recursive copy, that ignores common OS cruft