Repository: mesos Updated Branches: refs/heads/master 39c385650 -> d3a2bdc96
Fixed Rootfs in tests to handle symlink directories. Review: https://reviews.apache.org/r/40002 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d3a2bdc9 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d3a2bdc9 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d3a2bdc9 Branch: refs/heads/master Commit: d3a2bdc963891e1c48079de6493dcf2069d57292 Parents: 39c3856 Author: Timothy Chen <[email protected]> Authored: Fri Nov 6 15:33:59 2015 -0800 Committer: Timothy Chen <[email protected]> Committed: Fri Nov 6 15:34:00 2015 -0800 ---------------------------------------------------------------------- src/tests/containerizer/rootfs.hpp | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/d3a2bdc9/src/tests/containerizer/rootfs.hpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/rootfs.hpp b/src/tests/containerizer/rootfs.hpp index 2d3dbc4..edd0105 100644 --- a/src/tests/containerizer/rootfs.hpp +++ b/src/tests/containerizer/rootfs.hpp @@ -56,26 +56,27 @@ public: return Error("Not an absolute path"); } - // TODO(jieyu): Make sure 'path' is not under 'root'. - - if (os::stat::isdir(path)) { - if (os::system("cp -r '" + path + "' '" + root + "'") != 0) { - return ErrnoError("Failed to copy '" + path + "' to rootfs"); - } - } else if (os::stat::isfile(path)) { - std::string dirname = Path(path).dirname(); - std::string target = path::join(root, dirname); + std::string dirname = Path(path).dirname(); + std::string target = path::join(root, dirname); + if (!os::exists(target)) { Try<Nothing> mkdir = os::mkdir(target); if (mkdir.isError()) { - return Error("Failed to create directory in rootfs: " + mkdir.error()); + return Error("Failed to create directory in rootfs: " + + mkdir.error()); } + } - if (os::system("cp '" + path + "' '" + target + "'") != 0) { + // TODO(jieyu): Make sure 'path' is not under 'root'. + + if (os::stat::isdir(path)) { + if (os::system("cp -r '" + path + "' '" + target + "'") != 0) { return ErrnoError("Failed to copy '" + path + "' to rootfs"); } } else { - return Error("Unsupported file or directory"); + if (os::system("cp '" + path + "' '" + target + "'") != 0) { + return ErrnoError("Failed to copy '" + path + "' to rootfs"); + } } return Nothing(); @@ -125,6 +126,14 @@ public: return Error("Failed to add '" + realpath.get() + "' to rootfs: " + result.error()); } + + if (os::stat::islink(directory)) { + result = rootfs->add(directory); + if (result.isError()) { + return Error("Failed to add '" + directory + "' to rootfs: " + + result.error()); + } + } } directories = {
