aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/include
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-04-08 20:19:35 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-04-08 20:19:35 -0700
commitb34c40a4e674f5db538e84ca2b9509482ac140e7 (patch)
tree48a09d41e4760d97a20386dce00105cae54b1f17 /toolsrc/include
parentc434dc99868989ca55aef5e445ac6a0a4c3430f7 (diff)
downloadvcpkg-b34c40a4e674f5db538e84ca2b9509482ac140e7.tar.gz
vcpkg-b34c40a4e674f5db538e84ca2b9509482ac140e7.zip
[vcpkg] Further work on filesystem abstraction layer.
Diffstat (limited to 'toolsrc/include')
-rw-r--r--toolsrc/include/Paragraphs.h8
-rw-r--r--toolsrc/include/PostBuildLint_BuildInfo.h2
-rw-r--r--toolsrc/include/vcpkg_Files.h57
-rw-r--r--toolsrc/include/vcpkg_Util.h6
4 files changed, 27 insertions, 46 deletions
diff --git a/toolsrc/include/Paragraphs.h b/toolsrc/include/Paragraphs.h
index cdd35e425..cf21635d7 100644
--- a/toolsrc/include/Paragraphs.h
+++ b/toolsrc/include/Paragraphs.h
@@ -11,16 +11,16 @@ namespace vcpkg::Paragraphs
{
using ParagraphDataMap = std::unordered_map<std::string, std::string>;
- Expected<ParagraphDataMap> get_single_paragraph(Files::Filesystem& fs, const fs::path& control_path);
- Expected<std::vector<ParagraphDataMap>> get_paragraphs(Files::Filesystem& fs, const fs::path& control_path);
+ Expected<ParagraphDataMap> get_single_paragraph(const Files::Filesystem& fs, const fs::path& control_path);
+ Expected<std::vector<ParagraphDataMap>> get_paragraphs(const Files::Filesystem& fs, const fs::path& control_path);
Expected<ParagraphDataMap> parse_single_paragraph(const std::string& str);
Expected<std::vector<ParagraphDataMap>> parse_paragraphs(const std::string& str);
- Expected<SourceParagraph> try_load_port(Files::Filesystem& fs, const fs::path& control_path);
+ Expected<SourceParagraph> try_load_port(const Files::Filesystem& fs, const fs::path& control_path);
Expected<BinaryParagraph> try_load_cached_package(const VcpkgPaths& paths, const PackageSpec& spec);
- std::vector<SourceParagraph> load_all_ports(Files::Filesystem& fs, const fs::path& ports_dir);
+ std::vector<SourceParagraph> load_all_ports(const Files::Filesystem& fs, const fs::path& ports_dir);
std::map<std::string, VersionT> extract_port_names_and_versions(const std::vector<SourceParagraph>& source_paragraphs);
}
diff --git a/toolsrc/include/PostBuildLint_BuildInfo.h b/toolsrc/include/PostBuildLint_BuildInfo.h
index c54ea0fa5..44776d918 100644
--- a/toolsrc/include/PostBuildLint_BuildInfo.h
+++ b/toolsrc/include/PostBuildLint_BuildInfo.h
@@ -18,5 +18,5 @@ namespace vcpkg::PostBuildLint
std::map<BuildPolicies::Type, OptBoolT> policies;
};
- BuildInfo read_build_info(Files::Filesystem& fs, const fs::path& filepath);
+ BuildInfo read_build_info(const Files::Filesystem& fs, const fs::path& filepath);
}
diff --git a/toolsrc/include/vcpkg_Files.h b/toolsrc/include/vcpkg_Files.h
index a114354bc..339b64364 100644
--- a/toolsrc/include/vcpkg_Files.h
+++ b/toolsrc/include/vcpkg_Files.h
@@ -2,13 +2,27 @@
#include "vcpkg_expected.h"
#include "filesystem_fs.h"
-#include <iterator>
namespace vcpkg::Files
{
__interface Filesystem
{
- virtual Expected<std::string> read_contents(const fs::path& file_path) noexcept = 0;
+ virtual Expected<std::string> read_contents(const fs::path& file_path) const = 0;
+ virtual Expected<std::vector<std::string>> read_all_lines(const fs::path& file_path) const = 0;
+ virtual fs::path find_file_recursively_up(const fs::path& starting_dir, const std::string& filename) const = 0;
+ virtual std::vector<fs::path> recursive_find_all_files_in_dir(const fs::path& dir) const = 0;
+ virtual std::vector<fs::path> non_recursive_find_all_files_in_dir(const fs::path& dir) const = 0;
+
+ virtual void write_all_lines(const fs::path& file_path, const std::vector<std::string>& lines) = 0;
+ virtual void rename(const fs::path& oldpath, const fs::path& newpath) = 0;
+ virtual void remove(const fs::path& path) = 0;
+ virtual bool exists(const fs::path& path) const = 0;
+ virtual bool is_directory(const fs::path& path) const = 0;
+ virtual bool is_regular_file(const fs::path& path) const = 0;
+ virtual bool is_empty(const fs::path& path) const = 0;
+ virtual bool create_directory(const fs::path& path, std::error_code& ec) = 0;
+ virtual void copy(const fs::path& oldpath, const fs::path& newpath, fs::copy_options opts) = 0;
+ virtual void copy_file(const fs::path& oldpath, const fs::path& newpath, fs::copy_options opts, std::error_code& ec) = 0;
};
Filesystem& get_real_filesystem();
@@ -17,44 +31,5 @@ namespace vcpkg::Files
bool has_invalid_chars_for_filesystem(const std::string& s);
-
- Expected<std::vector<std::string>> read_all_lines(const fs::path& file_path);
-
- void write_all_lines(const fs::path& file_path, const std::vector<std::string>& lines);
-
- fs::path find_file_recursively_up(const fs::path& starting_dir, const std::string& filename);
-
- template <class Pred>
- void non_recursive_find_matching_paths_in_dir(const fs::path& dir, const Pred predicate, std::vector<fs::path>* output)
- {
- std::copy_if(fs::directory_iterator(dir), fs::directory_iterator(), std::back_inserter(*output), predicate);
- }
-
- template <class Pred>
- void recursive_find_matching_paths_in_dir(const fs::path& dir, const Pred predicate, std::vector<fs::path>* output)
- {
- std::copy_if(fs::recursive_directory_iterator(dir), fs::recursive_directory_iterator(), std::back_inserter(*output), predicate);
- }
-
- template <class Pred>
- std::vector<fs::path> recursive_find_matching_paths_in_dir(const fs::path& dir, const Pred predicate)
- {
- std::vector<fs::path> v;
- recursive_find_matching_paths_in_dir(dir, predicate, &v);
- return v;
- }
-
- void recursive_find_files_with_extension_in_dir(const fs::path& dir, const std::string& extension, std::vector<fs::path>* output);
-
- std::vector<fs::path> recursive_find_files_with_extension_in_dir(const fs::path& dir, const std::string& extension);
-
- void recursive_find_all_files_in_dir(const fs::path& dir, std::vector<fs::path>* output);
-
- std::vector<fs::path> recursive_find_all_files_in_dir(const fs::path& dir);
-
- void non_recursive_find_all_files_in_dir(const fs::path& dir, std::vector<fs::path>* output);
-
- std::vector<fs::path> non_recursive_find_all_files_in_dir(const fs::path& dir);
-
void print_paths(const std::vector<fs::path>& paths);
}
diff --git a/toolsrc/include/vcpkg_Util.h b/toolsrc/include/vcpkg_Util.h
index 4ebb2a802..cd8dab437 100644
--- a/toolsrc/include/vcpkg_Util.h
+++ b/toolsrc/include/vcpkg_Util.h
@@ -21,4 +21,10 @@ namespace vcpkg::Util
return ret;
}
+
+ template<class Container, class Pred>
+ void unstable_keep_if(Container& cont, Pred pred)
+ {
+ cont.erase(std::partition(cont.begin(), cont.end(), pred), cont.end());
+ }
} \ No newline at end of file