1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2 file Copyright.txt or https://cmake.org/licensing for details. */ 3 #pragma once 4 5 #include "cmConfigure.h" // IWYU pragma: keep 6 7 #include <iosfwd> 8 #include <list> 9 #include <map> 10 #include <string> 11 #include <vector> 12 13 #include "cmCTestVC.h" 14 15 class cmCTest; 16 class cmXMLWriter; 17 18 /** \class cmCTestGlobalVC 19 * \brief Base class for handling globally-versioned trees 20 * 21 */ 22 class cmCTestGlobalVC : public cmCTestVC 23 { 24 public: 25 /** Construct with a CTest instance and update log stream. */ 26 cmCTestGlobalVC(cmCTest* ctest, std::ostream& log); 27 28 ~cmCTestGlobalVC() override; 29 30 protected: 31 // Implement cmCTestVC internal API. 32 bool WriteXMLUpdates(cmXMLWriter& xml) override; 33 34 void SetNewRevision(std::string const& revision) override; 35 36 /** Represent a vcs-reported action for one path in a revision. */ 37 struct Change 38 { 39 char Action; 40 std::string Path; 41 Change(char a = '?') ActionChange42 : Action(a) 43 { 44 } 45 }; 46 47 // Update status for files in each directory. 48 class Directory : public std::map<std::string, File> 49 { 50 }; 51 std::map<std::string, Directory> Dirs; 52 53 // Old and new repository revisions. 54 std::string OldRevision; 55 std::string NewRevision; 56 57 // Information known about old revision. 58 Revision PriorRev; 59 60 // Information about revisions from a svn log. 61 std::list<Revision> Revisions; 62 63 virtual const char* LocalPath(std::string const& path); 64 65 virtual void DoRevision(Revision const& revision, 66 std::vector<Change> const& changes); 67 virtual void DoModification(PathStatus status, std::string const& path); 68 virtual bool LoadModifications() = 0; 69 virtual bool LoadRevisions() = 0; 70 71 virtual void WriteXMLGlobal(cmXMLWriter& xml); 72 void WriteXMLDirectory(cmXMLWriter& xml, std::string const& path, 73 Directory const& dir); 74 }; 75