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.
This commit is contained in:
Brad King 2010-06-23 09:14:43 -04:00
parent b141862564
commit bbfe241c6a
4 changed files with 32 additions and 4 deletions

View File

@ -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

View File

@ -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)
{

View File

@ -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);

View File

@ -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\"