diff options
author | Brad King <brad.king@kitware.com> | 2010-06-23 13:14:43 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2010-06-23 13:14:43 (GMT) |
commit | bbfe241c6a4386a39ebb93cdb70a8390eab14eef (patch) | |
tree | 054d21feea9aa984dfe692a4d562b68c091e2b8a /Source | |
parent | b1418625645ebef66e54d75004c82d88807e154f (diff) | |
download | CMake-bbfe241c6a4386a39ebb93cdb70a8390eab14eef.zip CMake-bbfe241c6a4386a39ebb93cdb70a8390eab14eef.tar.gz CMake-bbfe241c6a4386a39ebb93cdb70a8390eab14eef.tar.bz2 |
CTest: Parse empty Git commits correctly
Git's diff-tree format has no '\n'-terminated blank line at the end of
its commit message body block if there are no diff lines. Instead the
message body is terminated by '\0' and there is no diff section. Teach
CTest to parse the format in this case.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CTest/cmCTestGIT.cxx | 9 | ||||
-rw-r--r-- | Source/cmProcessTools.cxx | 6 | ||||
-rw-r--r-- | Source/cmProcessTools.h | 1 |
3 files changed, 14 insertions, 2 deletions
diff --git a/Source/CTest/cmCTestGIT.cxx b/Source/CTest/cmCTestGIT.cxx index 6c3631c..a49c852 100644 --- a/Source/CTest/cmCTestGIT.cxx +++ b/Source/CTest/cmCTestGIT.cxx @@ -317,8 +317,12 @@ protected: \n Log message indented by (4) spaces\n (even blank lines have the spaces)\n + [[ \n [Diff format] + OR + \0 + ]] The header may have more fields. See 'git help diff-tree'. */ @@ -372,6 +376,11 @@ private: { if(this->Line.empty()) { + if(this->Section == SectionBody && this->LineEnd == '\0') + { + // Skip SectionDiff + this->NextSection(); + } this->NextSection(); } else diff --git a/Source/cmProcessTools.cxx b/Source/cmProcessTools.cxx index cacd766..d2f7bf3 100644 --- a/Source/cmProcessTools.cxx +++ b/Source/cmProcessTools.cxx @@ -44,7 +44,7 @@ void cmProcessTools::RunProcess(struct cmsysProcess_s* cp, //---------------------------------------------------------------------------- cmProcessTools::LineParser::LineParser(char sep, bool ignoreCR): - Separator(sep), IgnoreCR(ignoreCR), Log(0), Prefix(0) + Separator(sep), IgnoreCR(ignoreCR), Log(0), Prefix(0), LineEnd('\0') { } @@ -61,8 +61,10 @@ bool cmProcessTools::LineParser::ProcessChunk(const char* first, int length) const char* last = first + length; for(const char* c = first; c != last; ++c) { - if(*c == this->Separator) + if(*c == this->Separator || *c == '\0') { + this->LineEnd = *c; + // Log this line. if(this->Log && this->Prefix) { diff --git a/Source/cmProcessTools.h b/Source/cmProcessTools.h index 0b210af..439726d 100644 --- a/Source/cmProcessTools.h +++ b/Source/cmProcessTools.h @@ -55,6 +55,7 @@ public: bool IgnoreCR; std::ostream* Log; const char* Prefix; + char LineEnd; std::string Line; virtual bool ProcessChunk(const char* data, int length); |