1351280Sdim//===- DirectoryScanner.cpp - Utility functions for DirectoryWatcher ------===// 2351280Sdim// 3351280Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4351280Sdim// See https://llvm.org/LICENSE.txt for license information. 5351280Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6351280Sdim// 7351280Sdim//===----------------------------------------------------------------------===// 8351280Sdim 9351280Sdim#include "DirectoryScanner.h" 10351280Sdim 11351280Sdim#include "llvm/Support/Path.h" 12351280Sdim 13351280Sdimnamespace clang { 14351280Sdim 15351280Sdimusing namespace llvm; 16351280Sdim 17351280SdimOptional<sys::fs::file_status> getFileStatus(StringRef Path) { 18351280Sdim sys::fs::file_status Status; 19351280Sdim std::error_code EC = status(Path, Status); 20351280Sdim if (EC) 21351280Sdim return None; 22351280Sdim return Status; 23351280Sdim} 24351280Sdim 25351280Sdimstd::vector<std::string> scanDirectory(StringRef Path) { 26351280Sdim using namespace llvm::sys; 27351280Sdim std::vector<std::string> Result; 28351280Sdim 29351280Sdim std::error_code EC; 30351280Sdim for (auto It = fs::directory_iterator(Path, EC), 31351280Sdim End = fs::directory_iterator(); 32351280Sdim !EC && It != End; It.increment(EC)) { 33351280Sdim auto status = getFileStatus(It->path()); 34351280Sdim if (!status.hasValue()) 35351280Sdim continue; 36351280Sdim Result.emplace_back(sys::path::filename(It->path())); 37351280Sdim } 38351280Sdim 39351280Sdim return Result; 40351280Sdim} 41351280Sdim 42351280Sdimstd::vector<DirectoryWatcher::Event> 43351280SdimgetAsFileEvents(const std::vector<std::string> &Scan) { 44351280Sdim std::vector<DirectoryWatcher::Event> Events; 45351280Sdim Events.reserve(Scan.size()); 46351280Sdim 47351280Sdim for (const auto &File : Scan) { 48351280Sdim Events.emplace_back(DirectoryWatcher::Event{ 49351280Sdim DirectoryWatcher::Event::EventKind::Modified, File}); 50351280Sdim } 51351280Sdim return Events; 52351280Sdim} 53351280Sdim 54351280Sdim} // namespace clang