| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#ifndef cmCTestVC_h#define cmCTestVC_h#include "cmConfigure.h" // IWYU pragma: keep#include <iosfwd>#include <string>#include "cmProcessOutput.h"#include "cmProcessTools.h"class cmCTest;class cmXMLWriter;/** \class cmCTestVC * \brief Base class for version control system handlers * */class cmCTestVC : public cmProcessTools{public:  /** Construct with a CTest instance and update log stream.  */  cmCTestVC(cmCTest* ctest, std::ostream& log);  virtual ~cmCTestVC();  /** Command line tool to invoke.  */  void SetCommandLineTool(std::string const& tool);  /** Top-level source directory.  */  void SetSourceDirectory(std::string const& dir);  /** Get the date/time specification for the current nightly start time.  */  std::string GetNightlyTime();  /** Prepare the work tree.  */  bool InitialCheckout(const char* command);  /** Perform cleanup operations on the work tree.  */  void Cleanup();  /** 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(cmXMLWriter& 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 bool NoteOldRevision();  virtual bool UpdateImpl();  virtual bool NoteNewRevision();  virtual bool WriteXMLUpdates(cmXMLWriter& xml);#if defined(__SUNPRO_CC) && __SUNPRO_CC <= 0x510  // Sun CC 5.1 needs help to allow cmCTestSVN::Revision to see thispublic:#endif  /** Basic information about one revision of a tree or file.  */  struct Revision  {    std::string Rev;    std::string Date;    std::string Author;    std::string EMail;    std::string Committer;    std::string CommitterEMail;    std::string CommitDate;    std::string Log;  };protected:  friend struct File;  /** Represent change to one file.  */  struct File  {    PathStatus Status;    Revision const* Rev;    Revision const* PriorRev;    File()      : Status(PathUpdated)      , Rev(nullptr)      , PriorRev(nullptr)    {    }    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);  /** Run a command line and send output to given parsers.  */  bool RunChild(char const* const* cmd, OutputParser* out, OutputParser* err,                const char* workDir = nullptr,                Encoding encoding = cmProcessOutput::Auto);  /** Run VC update command line and send output to given parsers.  */  bool RunUpdateCommand(char const* const* cmd, OutputParser* out,                        OutputParser* err = nullptr,                        Encoding encoding = cmProcessOutput::Auto);  /** Write xml element for one file.  */  void WriteXMLEntry(cmXMLWriter& xml, std::string const& path,                     std::string const& name, std::string const& full,                     File const& f);  // Instance of cmCTest running the script.  cmCTest* CTest;  // A stream to which we write log information.  std::ostream& Log;  // 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
 |