From a8eccd5da44e390f83f6c3242628eeb8e8f2a36c Mon Sep 17 00:00:00 2001 From: tmwa <42614861+tmwa@users.noreply.github.com> Date: Thu, 23 May 2019 11:22:21 +0100 Subject: [PATCH] deploy generator: use copy() rather than copyfile() (#5136) * deploy generator: use copy() rather than copyfile() fixes #5135 * Added integration test * review * Adjust only user permissions * fix broken test * skip test in Win --- conans/client/generators/deploy.py | 2 +- .../test/functional/generators/deploy_test.py | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/conans/client/generators/deploy.py b/conans/client/generators/deploy.py index 2aba44166d8..725a3ceac25 100644 --- a/conans/client/generators/deploy.py +++ b/conans/client/generators/deploy.py @@ -42,6 +42,6 @@ def content(self): os.path.relpath(root, rootpath), f) dst = os.path.normpath(dst) mkdir(os.path.dirname(dst)) - shutil.copyfile(src, dst) + shutil.copy(src, dst) copied_files.append(dst) return self.deploy_manifest_content(copied_files) diff --git a/conans/test/functional/generators/deploy_test.py b/conans/test/functional/generators/deploy_test.py index c7b320091fc..33701c6a67d 100644 --- a/conans/test/functional/generators/deploy_test.py +++ b/conans/test/functional/generators/deploy_test.py @@ -1,10 +1,12 @@ import os +import platform +import stat import unittest from conans import load -from conans.model.ref import ConanFileReference +from conans.model.ref import ConanFileReference, PackageReference from conans.test.utils.test_files import temp_folder -from conans.test.utils.tools import GenConanfile, TurboTestClient +from conans.test.utils.tools import GenConanfile, TurboTestClient, NO_SETTINGS_PACKAGE_ID class DeployGeneratorTest(unittest.TestCase): @@ -106,3 +108,33 @@ def deploy_manifest_content_test(self): def file_paths_test(self): for path in self.get_expected_paths(): self.assertTrue(os.path.exists(path)) + + +class DeployGeneratorPermissionsTest(unittest.TestCase): + """ + Test files deployed by the deploy generator are copied with same permissions + """ + + def setUp(self): + conanfile1 = GenConanfile() + conanfile1.with_package_file("include/header1.h", "whatever") + self.ref1 = ConanFileReference("name1", "version", "user", "channel") + + self.client = TurboTestClient() + self.client.create(self.ref1, conanfile1) + layout = self.client.cache.package_layout(self.ref1) + package_folder = layout.package(PackageReference(self.ref1, NO_SETTINGS_PACKAGE_ID)) + self.header_path = os.path.join(package_folder, "include", "header1.h") + self.assertTrue(os.path.exists(self.header_path)) + + @unittest.skipIf(platform.system() == "Windows", "Permissions in NIX systems only") + def same_permissions_test(self): + stat_info = os.stat(self.header_path) + self.assertFalse(stat_info.st_mode & stat.S_IXUSR) + os.chmod(self.header_path, stat_info.st_mode | stat.S_IXUSR) + self.client.current_folder = temp_folder() + self.client.run("install %s -g deploy" % self.ref1.full_repr()) + base1_path = os.path.join(self.client.current_folder, "name1") + header1_path = os.path.join(base1_path, "include", "header1.h") + stat_info = os.stat(header1_path) + self.assertTrue(stat_info.st_mode & stat.S_IXUSR)