#pragma once
#include "cmConfigure.h"
#include <iosfwd>
#include <string>
#include "cmCTestGlobalVC.h"
class cmCTest;
class cmMakefile;
class cmCTestGIT : public cmCTestGlobalVC
{
public:
cmCTestGIT(cmCTest* ctest, cmMakefile* mf, std::ostream& log);
~cmCTestGIT() override;
private:
unsigned int CurrentGitVersion;
unsigned int GetGitVersion();
std::string GetWorkingRevision();
bool NoteOldRevision() override;
bool NoteNewRevision() override;
bool UpdateImpl() override;
std::string FindGitDir();
std::string FindTopDir();
bool UpdateByFetchAndReset();
bool UpdateByCustom(std::string const& custom);
bool UpdateInternal();
bool LoadRevisions() override;
bool LoadModifications() override;
public:
class CommitParser;
class DiffParser;
class OneLineParser;
friend class CommitParser;
friend class DiffParser;
friend class OneLineParser;
};