| Jan Korous | 77dd8a7 | 2019-07-12 20:34:10 +0000 | [diff] [blame^] | 1 | //===- DirectoryScanner.cpp - Utility functions for DirectoryWatcher ------===// | 
|  | 2 | // | 
|  | 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | 4 | // See https://llvm.org/LICENSE.txt for license information. | 
|  | 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | 6 | // | 
|  | 7 | //===----------------------------------------------------------------------===// | 
|  | 8 |  | 
|  | 9 | #include "DirectoryScanner.h" | 
|  | 10 |  | 
|  | 11 | #include "llvm/Support/Path.h" | 
|  | 12 |  | 
|  | 13 | namespace clang { | 
|  | 14 |  | 
|  | 15 | using namespace llvm; | 
|  | 16 |  | 
|  | 17 | Optional<sys::fs::file_status> getFileStatus(StringRef Path) { | 
|  | 18 | sys::fs::file_status Status; | 
|  | 19 | std::error_code EC = status(Path, Status); | 
|  | 20 | if (EC) | 
|  | 21 | return None; | 
|  | 22 | return Status; | 
|  | 23 | } | 
|  | 24 |  | 
|  | 25 | std::vector<std::string> scanDirectory(StringRef Path) { | 
|  | 26 | using namespace llvm::sys; | 
|  | 27 | std::vector<std::string> Result; | 
|  | 28 |  | 
|  | 29 | std::error_code EC; | 
|  | 30 | for (auto It = fs::directory_iterator(Path, EC), | 
|  | 31 | End = fs::directory_iterator(); | 
|  | 32 | !EC && It != End; It.increment(EC)) { | 
|  | 33 | auto status = getFileStatus(It->path()); | 
|  | 34 | if (!status.hasValue()) | 
|  | 35 | continue; | 
|  | 36 | Result.emplace_back(sys::path::filename(It->path())); | 
|  | 37 | } | 
|  | 38 |  | 
|  | 39 | return Result; | 
|  | 40 | } | 
|  | 41 |  | 
|  | 42 | std::vector<DirectoryWatcher::Event> | 
|  | 43 | getAsFileEvents(const std::vector<std::string> &Scan) { | 
|  | 44 | std::vector<DirectoryWatcher::Event> Events; | 
|  | 45 | Events.reserve(Scan.size()); | 
|  | 46 |  | 
|  | 47 | for (const auto &File : Scan) { | 
|  | 48 | Events.emplace_back(DirectoryWatcher::Event{ | 
|  | 49 | DirectoryWatcher::Event::EventKind::Modified, File}); | 
|  | 50 | } | 
|  | 51 | return Events; | 
|  | 52 | } | 
|  | 53 |  | 
|  | 54 | } // namespace clang |