CMake/Source/CTest/cmCTestVC.h

151 lines
3.9 KiB
C
Raw Normal View History

Simplify CMake per-source license notices Per-source copyright/license notice headers that spell out copyright holder names and years are hard to maintain and often out-of-date or plain wrong. Precise contributor information is already maintained automatically by the version control tool. Ultimately it is the receiver of a file who is responsible for determining its licensing status, and per-source notices are merely a convenience. Therefore it is simpler and more accurate for each source to have a generic notice of the license name and references to more detailed information on copyright holders and full license terms. Our `Copyright.txt` file now contains a list of Contributors whose names appeared source-level copyright notices. It also references version control history for more precise information. Therefore we no longer need to spell out the list of Contributors in each source file notice. Replace CMake per-source copyright/license notice headers with a short description of the license and links to `Copyright.txt` and online information available from "https://cmake.org/licensing". The online URL also handles cases of modules being copied out of our source into other projects, so we can drop our notices about replacing links with full license text. Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority of the replacements mechanically. Manually fix up shebang lines and trailing newlines in a few files. Manually update the notices in a few files that the script does not handle.
2016-09-27 22:01:08 +03:00
/* 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>
#include "cmProcessTools.h"
#include <iosfwd>
#include <string>
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 void NoteOldRevision();
virtual bool UpdateImpl();
virtual void 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 this
public:
#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)
2016-06-27 23:44:16 +03:00
, Rev(CM_NULLPTR)
, PriorRev(CM_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,
2016-06-27 23:44:16 +03:00
const char* workDir = CM_NULLPTR);
/** Run VC update command line and send output to given parsers. */
bool RunUpdateCommand(char const* const* cmd, OutputParser* out,
2016-06-27 23:44:16 +03:00
OutputParser* err = CM_NULLPTR);
/** 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