diff --git a/ddb/utils/file.py b/ddb/utils/file.py index 80134b1b..02be4e2b 100644 --- a/ddb/utils/file.py +++ b/ddb/utils/file.py @@ -200,9 +200,11 @@ def _walk(self, *args, recursive=True, **kwargs): _walk_generator = os.walk(*args, **kwargs) for root, dirs, files in os.walk(*args, **kwargs): for dirs_item in list(dirs): - dirpath = os.path.join(root, dirs_item) + dirpath = os.path.relpath(os.path.join(root, dirs_item)) if self._is_excluded(dirpath, *self.excludes): dirs.remove(dirs_item) + else: + yield dirpath for files_item in list(files): filepath = os.path.relpath(os.path.join(root, files_item)) diff --git a/tests/feature/permissions/test_permissions.data/project3/ddb.yml b/tests/feature/permissions/test_permissions.data/project3/ddb.yml index 390a7e22..37b19776 100644 --- a/tests/feature/permissions/test_permissions.data/project3/ddb.yml +++ b/tests/feature/permissions/test_permissions.data/project3/ddb.yml @@ -1,4 +1,5 @@ permissions: specs: "*.sh": "+x" - "subdirectory/*.sh": "+x" \ No newline at end of file + "subdirectory/*.sh": "+x" + "denied": "-w" \ No newline at end of file diff --git a/tests/feature/permissions/test_permissions.data/project3/denied/.gitignore b/tests/feature/permissions/test_permissions.data/project3/denied/.gitignore new file mode 100644 index 00000000..f59ec20a --- /dev/null +++ b/tests/feature/permissions/test_permissions.data/project3/denied/.gitignore @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/tests/feature/permissions/test_permissions.py b/tests/feature/permissions/test_permissions.py index 124182f2..f13f8be6 100644 --- a/tests/feature/permissions/test_permissions.py +++ b/tests/feature/permissions/test_permissions.py @@ -59,3 +59,5 @@ def test_project3(self, project_loader): assert os.access("script.sh", os.X_OK) assert os.access(os.path.join("subdirectory", "another-script.sh"), os.X_OK) + assert os.access(os.path.join("subdirectory"), os.W_OK) + assert not os.access(os.path.join("denied"), os.W_OK)