| // Copyright 2017-2020 The Verible Authors. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // -*- c++ -*- | |
| // Some filesystem utilities. | |
| #ifndef VERIBLE_COMMON_UTIL_FILE_UTIL_H_ | |
| #define VERIBLE_COMMON_UTIL_FILE_UTIL_H_ | |
| #include <string> | |
| #include "absl/status/status.h" | |
| #include "absl/strings/string_view.h" | |
| namespace verible { | |
| namespace file { | |
| // Returns the part of the path after the final "/". If there is no | |
| // "/" in the path, the result is the same as the input. | |
| // Note that this function's behavior differs from the Unix basename | |
| // command if path ends with "/". For such paths, this function returns the | |
| // empty string. | |
| absl::string_view Basename(absl::string_view filename); | |
| // Returns the part of the basename of path prior to the final ".". If | |
| // there is no "." in the basename, this is equivalent to file::Basename(path). | |
| absl::string_view Stem(absl::string_view filename); | |
| // Search for 'filename' file starting at 'start' (can be file or directory) | |
| // and going upwards the directory tree. Returns true if anything is found and | |
| // puts the found file in 'result'. | |
| absl::Status UpwardFileSearch(absl::string_view start, | |
| absl::string_view filename, std::string* result); | |
| // Read file "filename" and store its content in "content" | |
| absl::Status GetContents(absl::string_view filename, std::string *content); | |
| // Create file "filename" and store given content in it. | |
| absl::Status SetContents(absl::string_view filename, absl::string_view content); | |
| // Join directory + filename | |
| std::string JoinPath(absl::string_view base, absl::string_view name); | |
| // Create directory with given name, return success. | |
| absl::Status CreateDir(absl::string_view dir); | |
| namespace testing { | |
| // Useful for testing: a temporary file that is pre-populated with a particular | |
| // content. File is deleted when instance goes out of scope. | |
| class ScopedTestFile { | |
| public: | |
| // Initialize a new file in directory "base_dir" with given "content". | |
| ScopedTestFile(absl::string_view base_dir, absl::string_view content); | |
| ~ScopedTestFile(); | |
| // Filename created by this instance. | |
| absl::string_view filename() const { return filename_; } | |
| private: | |
| const std::string filename_; | |
| }; | |
| } // namespace testing | |
| } // namespace file | |
| } // namespace verible | |
| #endif // VERIBLE_COMMON_UTIL_FILE_UTIL_H_ |