Skip to content

Commit

Permalink
deploy generator: use copy() rather than copyfile() (#5136)
Browse files Browse the repository at this point in the history
* deploy generator: use copy() rather than copyfile()

fixes #5135

* Added integration test

* review

* Adjust only user permissions

* fix broken test

* skip test in Win
  • Loading branch information
tmwa authored and memsharded committed May 23, 2019
1 parent fe75651 commit a8eccd5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
2 changes: 1 addition & 1 deletion conans/client/generators/deploy.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
36 changes: 34 additions & 2 deletions conans/test/functional/generators/deploy_test.py
Original file line number Diff line number Diff line change
@@ -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):
Expand Down Expand Up @@ -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)

0 comments on commit a8eccd5

Please sign in to comment.