110015Speter//===- DirectoryScanner.cpp - Utility functions for DirectoryWatcher ------===// 212496Speter// 310015Speter// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 410015Speter// See https://llvm.org/LICENSE.txt for license information. 510015Speter// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 610015Speter// 710015Speter//===----------------------------------------------------------------------===// 810015Speter 910015Speter#include "DirectoryScanner.h" 1010015Speter 1110015Speter#include "llvm/Support/Path.h" 1210015Speter#include <optional> 1310015Speter 1410015Speternamespace clang { 1510015Speter 1610015Speterusing namespace llvm; 1710015Speter 1810015Speterstd::optional<sys::fs::file_status> getFileStatus(StringRef Path) { 1910015Speter sys::fs::file_status Status; 2010015Speter std::error_code EC = status(Path, Status); 2110015Speter if (EC) 2210015Speter return std::nullopt; 2310015Speter return Status; 2410015Speter} 2510015Speter 2610015Speterstd::vector<std::string> scanDirectory(StringRef Path) { 2710015Speter using namespace llvm::sys; 2810015Speter std::vector<std::string> Result; 2910015Speter 3010015Speter std::error_code EC; 3110015Speter for (auto It = fs::directory_iterator(Path, EC), 3210015Speter End = fs::directory_iterator(); 3316024Speter !EC && It != End; It.increment(EC)) { 3410015Speter auto status = getFileStatus(It->path()); 3510015Speter if (!status) 3610015Speter continue; 3710015Speter Result.emplace_back(sys::path::filename(It->path())); 3810015Speter } 3910015Speter 4010015Speter return Result; 4110015Speter} 4210015Speter 4310015Speterstd::vector<DirectoryWatcher::Event> 4410015SpetergetAsFileEvents(const std::vector<std::string> &Scan) { 4510015Speter std::vector<DirectoryWatcher::Event> Events; 4610015Speter Events.reserve(Scan.size()); 4710015Speter 4810015Speter for (const auto &File : Scan) { 4910015Speter Events.emplace_back(DirectoryWatcher::Event{ 5010015Speter DirectoryWatcher::Event::EventKind::Modified, File}); 5110015Speter } 5210015Speter return Events; 5310015Speter} 5410015Speter 5515683Speter} // namespace clang 5610015Speter