177dd8a79SJan Korous //===- DirectoryScanner.cpp - Utility functions for DirectoryWatcher ------===// 277dd8a79SJan Korous // 377dd8a79SJan Korous // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 477dd8a79SJan Korous // See https://llvm.org/LICENSE.txt for license information. 577dd8a79SJan Korous // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 677dd8a79SJan Korous // 777dd8a79SJan Korous //===----------------------------------------------------------------------===// 877dd8a79SJan Korous 977dd8a79SJan Korous #include "DirectoryScanner.h" 1077dd8a79SJan Korous 1177dd8a79SJan Korous #include "llvm/Support/Path.h" 1277dd8a79SJan Korous 1377dd8a79SJan Korous namespace clang { 1477dd8a79SJan Korous 1577dd8a79SJan Korous using namespace llvm; 1677dd8a79SJan Korous getFileStatus(StringRef Path)1777dd8a79SJan KorousOptional<sys::fs::file_status> getFileStatus(StringRef Path) { 1877dd8a79SJan Korous sys::fs::file_status Status; 1977dd8a79SJan Korous std::error_code EC = status(Path, Status); 2077dd8a79SJan Korous if (EC) 2177dd8a79SJan Korous return None; 2277dd8a79SJan Korous return Status; 2377dd8a79SJan Korous } 2477dd8a79SJan Korous scanDirectory(StringRef Path)2577dd8a79SJan Korousstd::vector<std::string> scanDirectory(StringRef Path) { 2677dd8a79SJan Korous using namespace llvm::sys; 2777dd8a79SJan Korous std::vector<std::string> Result; 2877dd8a79SJan Korous 2977dd8a79SJan Korous std::error_code EC; 3077dd8a79SJan Korous for (auto It = fs::directory_iterator(Path, EC), 3177dd8a79SJan Korous End = fs::directory_iterator(); 3277dd8a79SJan Korous !EC && It != End; It.increment(EC)) { 3377dd8a79SJan Korous auto status = getFileStatus(It->path()); 34*452db157SKazu Hirata if (!status) 3577dd8a79SJan Korous continue; 3677dd8a79SJan Korous Result.emplace_back(sys::path::filename(It->path())); 3777dd8a79SJan Korous } 3877dd8a79SJan Korous 3977dd8a79SJan Korous return Result; 4077dd8a79SJan Korous } 4177dd8a79SJan Korous 4277dd8a79SJan Korous std::vector<DirectoryWatcher::Event> getAsFileEvents(const std::vector<std::string> & Scan)4377dd8a79SJan KorousgetAsFileEvents(const std::vector<std::string> &Scan) { 4477dd8a79SJan Korous std::vector<DirectoryWatcher::Event> Events; 4577dd8a79SJan Korous Events.reserve(Scan.size()); 4677dd8a79SJan Korous 4777dd8a79SJan Korous for (const auto &File : Scan) { 4877dd8a79SJan Korous Events.emplace_back(DirectoryWatcher::Event{ 4977dd8a79SJan Korous DirectoryWatcher::Event::EventKind::Modified, File}); 5077dd8a79SJan Korous } 5177dd8a79SJan Korous return Events; 5277dd8a79SJan Korous } 5377dd8a79SJan Korous 5477dd8a79SJan Korous } // namespace clang 55