Commit bbfe241c authored by Brad King's avatar Brad King

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.
parent b1418625
......@@ -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
......
......@@ -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)
{
......
......@@ -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);
......
......@@ -131,6 +131,22 @@ run_child(
COMMAND ${GIT} submodule update
)
# Save the first revision name.
execute_process(
WORKING_DIRECTORY ${TOP}/user-source
COMMAND ${GIT} rev-parse HEAD
OUTPUT_VARIABLE revision1
OUTPUT_STRIP_TRAILING_WHITESPACE
)
#-----------------------------------------------------------------------------
# Create an empty commit.
message("Creating empty commit...")
run_child(
WORKING_DIRECTORY ${TOP}/user-source
COMMAND ${GIT} commit --allow-empty -m "Empty commit"
)
#-----------------------------------------------------------------------------
# Make changes in the working tree.
message("Changing content...")
......@@ -196,7 +212,7 @@ macro(rewind_source src_dir)
message("Backing up to revision 1...")
run_child(
WORKING_DIRECTORY ${TOP}/${src_dir}
COMMAND ${GIT} reset --hard origin/master~2
COMMAND ${GIT} reset --hard ${revision1}
)
run_child(
WORKING_DIRECTORY ${TOP}/${src_dir}
......@@ -261,7 +277,7 @@ execute_process(
)
execute_process(
WORKING_DIRECTORY \"${TOP}/dash-source\"
COMMAND \"${GIT}\" reset --hard master~2
COMMAND \"${GIT}\" reset --hard ${revision1}
)
execute_process(
WORKING_DIRECTORY \"${TOP}/dash-source\"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment