From 23598df1558b1b458adf8c69538a04de2fb5ab97 Mon Sep 17 00:00:00 2001 From: night199uk Date: Fri, 9 Dec 2022 19:04:19 -0800 Subject: [PATCH] Avoid calling chmod in some scenarios. This guards the os.chmod calls so it's only called IF the permissions need changing. This guards against an exception in certain complex library setups. --- beetsplug/permissions.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/beetsplug/permissions.py b/beetsplug/permissions.py index f5aab056c..a55feb6ca 100644 --- a/beetsplug/permissions.py +++ b/beetsplug/permissions.py @@ -6,6 +6,7 @@ like the following in your config.yaml to configure: dir: 755 """ import os +import stat from beets import config, util from beets.plugins import BeetsPlugin from beets.util import ancestry @@ -25,7 +26,7 @@ def check_permissions(path, permission): """Check whether the file's permissions equal the given vector. Return a boolean. """ - return oct(os.stat(path).st_mode & 0o777) == oct(permission) + return oct(stat.S_IMODE(os.stat(path).st_mode)) == oct(permission) def assert_permissions(path, permission, log): @@ -103,7 +104,8 @@ class Permissions(BeetsPlugin): 'setting file permissions on {}', util.displayable_path(path), ) - os.chmod(util.syspath(path), file_perm) + if not check_permissions(util.syspath(path), file_perm): + os.chmod(util.syspath(path), file_perm) # Checks if the destination path has the permissions configured. assert_permissions(path, file_perm, self._log) @@ -115,7 +117,8 @@ class Permissions(BeetsPlugin): 'setting directory permissions on {}', util.displayable_path(path), ) - os.chmod(util.syspath(path), dir_perm) + if not check_permissions(util.syspath(path), dir_perm): + os.chmod(util.syspath(path), dir_perm) # Checks if the destination path has the permissions configured. assert_permissions(path, dir_perm, self._log)