Procházet zdrojové kódy

BUG: Fixed extraneous newlines from ctest process output

Zach Mullen před 16 roky
rodič
revize
6727834a8c

+ 1 - 1
Source/CTest/cmCTestMultiProcessHandler.cxx

@@ -90,7 +90,7 @@ void cmCTestMultiProcessHandler::SubmitBatchTests()
 //---------------------------------------------------------
 void cmCTestMultiProcessHandler::StartTestProcess(int test)
 {
-  cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, " test " << test << "\n");
+  cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "test " << test << "\n");
   this->TestRunningMap[test] = true; // mark the test as running
   // now remove the test itself
   this->EraseTest(test);

+ 25 - 20
Source/CTest/cmProcess.cxx

@@ -93,26 +93,6 @@ int cmProcess::GetNextOutputLine(std::string& stdOutLine,
   std::vector<char>::iterator erriter = 
     this->StdErrorBuffer.begin();
 
-  //If process terminated, flush the buffer
-  if(!running)
-    {
-    if(!this->StdErrorBuffer.empty())
-      {
-      gotStdErr = true;
-      stdErrLine.append(&this->StdErrorBuffer[0], this->StdErrorBuffer.size());
-      this->StdErrorBuffer.erase(this->StdErrorBuffer.begin(), 
-        this->StdErrorBuffer.end());
-      }
-    if(!this->StdOutBuffer.empty())
-      {
-      gotStdOut = true;
-      stdOutLine.append(&this->StdOutBuffer[0], this->StdOutBuffer.size());
-      this->StdOutBuffer.erase(this->StdOutBuffer.begin(),
-        this->StdOutBuffer.end());
-      }
-    return cmsysProcess_Pipe_None;
-    }
-
   // Check for a newline in stdout.
   for(;outiter != this->StdOutBuffer.end(); ++outiter)
     {
@@ -162,6 +142,31 @@ int cmProcess::GetNextOutputLine(std::string& stdOutLine,
       break;
       }
     }
+
+  if(!running && !gotStdErr && !gotStdOut)
+  {
+    //If process terminated with no newline, flush the buffer
+    if(!running)
+      {
+      if(!this->StdErrorBuffer.empty())
+        {
+        gotStdErr = true;
+        stdErrLine.append(&this->StdErrorBuffer[0],
+                          this->StdErrorBuffer.size());
+        this->StdErrorBuffer.erase(this->StdErrorBuffer.begin(), 
+          this->StdErrorBuffer.end());
+        }
+      if(!this->StdOutBuffer.empty())
+        {
+        gotStdOut = true;
+        stdOutLine.append(&this->StdOutBuffer[0],
+                          this->StdOutBuffer.size());
+        this->StdOutBuffer.erase(this->StdOutBuffer.begin(),
+          this->StdOutBuffer.end());
+        }
+      return cmsysProcess_Pipe_None;
+      }
+    }
   //If we get here, we have stuff waiting in the buffers, but no newline
   return this->LastOutputPipe;
 }