diff options
author | Louis Dionne <ldionne@apple.com> | 2019-10-25 09:46:35 -0700 |
---|---|---|
committer | Louis Dionne <ldionne@apple.com> | 2019-10-25 09:47:46 -0700 |
commit | fd667b860e9d0fc3714980e26e8c0ed719c19677 (patch) | |
tree | 78ca196ffe645c2f6541e3088845e8ae1fc95268 /libcxx/utils | |
parent | b74d7e5cccb5eedb8675442a981a76f3873faf43 (diff) | |
download | llvm-fd667b860e9d0fc3714980e26e8c0ed719c19677.tar.gz |
[libcxx] [test] Run `chmod +x` on executables when testing via SSH
When running libc++ tests on a remote machine via SSH, we can encounter
a 'Permission denied' error.
Fix this with plain old 'chmod +x <executable>'.
Thanks to Sergej Jaskiewicz for the patch.
Differential Revision: https://reviews.llvm.org/D69170
Diffstat (limited to 'libcxx/utils')
-rw-r--r-- | libcxx/utils/libcxx/test/executor.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/libcxx/utils/libcxx/test/executor.py b/libcxx/utils/libcxx/test/executor.py index 5bb5525d047c..4581ce7a19be 100644 --- a/libcxx/utils/libcxx/test/executor.py +++ b/libcxx/utils/libcxx/test/executor.py @@ -135,10 +135,18 @@ class RemoteExecutor(Executor): srcs.extend(file_deps) dsts.extend(dev_paths) self.copy_in(srcs, dsts) + + # When testing executables that were cross-compiled on Windows for + # Linux, we may need to explicitly set the execution permission to + # avoid the 'Permission denied' error: + chmod_cmd = ['chmod', '+x', target_exe_path] + # TODO(jroelofs): capture the copy_in and delete_remote commands, # and conjugate them with '&&'s around the first tuple element # returned here: - return self._execute_command_remote(cmd, target_cwd, env) + return self._execute_command_remote(chmod_cmd + ['&&'] + cmd, + target_cwd, + env) finally: if target_cwd: self.delete_remote(target_cwd) @@ -187,10 +195,14 @@ class SSHExecutor(RemoteExecutor): remote = self.user_prefix + self.host ssh_cmd = [self.ssh_command, '-oBatchMode=yes', remote] if env: - env_cmd = ['env'] + ['%s="%s"' % (k, v) for k, v in env.items()] + export_cmd = \ + ['export'] + ['"%s"="%s"' % (k, v) for k, v in env.items()] else: - env_cmd = [] - remote_cmd = ' '.join(env_cmd + cmd) + export_cmd = [] + + remote_cmd = ' '.join(cmd) + if export_cmd: + remote_cmd = ' '.join(export_cmd) + ' && ' + remote_cmd if remote_work_dir != '.': remote_cmd = 'cd ' + remote_work_dir + ' && ' + remote_cmd out, err, rc = self.local_run(ssh_cmd + [remote_cmd]) |