From c3264f48c2960325b9141d3ec58c6b49afe120c9 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 4 Oct 2016 22:56:30 +0200 Subject: Convert: Extract method to determine if paths are in directory The conditional early return can be moved to clients, which would have many benefits, notably making cmOutputConverter independent of directory-specific state. --- Source/cmOutputConverter.cxx | 18 +++++++++++++----- Source/cmOutputConverter.h | 4 ++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 5d31f02..dfc1610 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -76,13 +76,14 @@ static bool cmOutputConverterNotAbove(const char* a, const char* b) cmSystemTools::IsSubDirectory(a, b)); } -std::string cmOutputConverter::ConvertToRelativePath( - std::string const& local_path, std::string const& remote_path) const +bool cmOutputConverter::ContainedInDirectory(std::string const& local_path, + std::string const& remote_path, + cmState::Directory directory) { const std::string relativePathTopBinary = - this->StateSnapshot.GetDirectory().GetRelativePathTopBinary(); + directory.GetRelativePathTopBinary(); const std::string relativePathTopSource = - this->StateSnapshot.GetDirectory().GetRelativePathTopSource(); + directory.GetRelativePathTopSource(); const bool bothInBinary = cmOutputConverterNotAbove(local_path.c_str(), @@ -96,7 +97,14 @@ std::string cmOutputConverter::ConvertToRelativePath( cmOutputConverterNotAbove(remote_path.c_str(), relativePathTopSource.c_str()); - if (!(bothInSource || bothInBinary)) { + return bothInSource || bothInBinary; +} + +std::string cmOutputConverter::ConvertToRelativePath( + std::string const& local_path, std::string const& remote_path) const +{ + if (!ContainedInDirectory(local_path, remote_path, + this->StateSnapshot.GetDirectory())) { return remote_path; } diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index fd887ae..745686b 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -99,6 +99,10 @@ public: }; static FortranFormat GetFortranFormat(const char* value); + static bool ContainedInDirectory(std::string const& local_path, + std::string const& remote_path, + cmState::Directory directory); + /** * Convert the given remote path to a relative path with respect to * the given local path. Both paths must use forward slashes and not -- cgit v0.12