diff options
Diffstat (limited to 'Source/CTest/cmCTestVC.h')
-rw-r--r-- | Source/CTest/cmCTestVC.h | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/Source/CTest/cmCTestVC.h b/Source/CTest/cmCTestVC.h index 4413193..3e24e2f 100644 --- a/Source/CTest/cmCTestVC.h +++ b/Source/CTest/cmCTestVC.h @@ -45,13 +45,49 @@ public: /** Perform cleanup operations on the work tree. */ void Cleanup(); - void MarkOldRevision() { this->NoteOldRevision(); } - void MarkNewRevision() { this->NoteNewRevision(); } + /** Update the working tree to the new revision. */ + bool Update(); + + /** Get the command line used by the Update method. */ + std::string const& GetUpdateCommandLine() const + { return this->UpdateCommandLine; } + + /** Write Update.xml entries for the updates found. */ + bool WriteXML(std::ostream& xml); + + /** Enumerate non-trivial working tree states during update. */ + enum PathStatus { PathUpdated, PathModified, PathConflicting }; + + /** Get the number of working tree paths in each state after update. */ + int GetPathCount(PathStatus s) const { return this->PathCount[s]; } + protected: // Internal API to be implemented by subclasses. virtual void CleanupImpl(); virtual void NoteOldRevision(); + virtual bool UpdateImpl(); virtual void NoteNewRevision(); + virtual bool WriteXMLUpdates(std::ostream& xml); + + /** Basic information about one revision of a tree or file. */ + struct Revision + { + std::string Rev; + std::string Date; + std::string Author; + std::string Log; + }; + + /** Represent change to one file. */ + struct File + { + PathStatus Status; + Revision const* Rev; + Revision const* PriorRev; + File(): Status(PathUpdated), Rev(0), PriorRev(0) {} + File(PathStatus status, Revision const* rev, Revision const* priorRev): + Status(status), Rev(rev), PriorRev(priorRev) {} + }; /** Convert a list of arguments to a human-readable command line. */ static std::string ComputeCommandLine(char const* const* cmd); @@ -60,6 +96,15 @@ protected: bool RunChild(char const* const* cmd, OutputParser* out, OutputParser* err, const char* workDir = 0); + /** Run VC update command line and send output to given parsers. */ + bool RunUpdateCommand(char const* const* cmd, + OutputParser* out, OutputParser* err = 0); + + /** Write xml element for one file. */ + void WriteXMLEntry(std::ostream& xml, std::string const& path, + std::string const& name, std::string const& full, + File const& f); + // Instance of cmCTest running the script. cmCTest* CTest; @@ -69,6 +114,15 @@ protected: // Basic information about the working tree. std::string CommandLineTool; std::string SourceDirectory; + + // Record update command info. + std::string UpdateCommandLine; + + // Placeholder for unknown revisions. + Revision Unknown; + + // Count paths reported with each PathStatus value. + int PathCount[3]; }; #endif |