[Cmake-commits] CMake branch, next, updated. v3.1.0-1782-g0899a48

Brad King brad.king at kitware.com
Mon Jan 12 09:35:47 EST 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  0899a4839407960ec19d421ceef03a3dcae42339 (commit)
       via  ab74553db49dba6a1d2219f8ff8545650ebfb5a5 (commit)
      from  183950101b44830bd458201dae0e9c2c7762ed39 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0899a4839407960ec19d421ceef03a3dcae42339
commit 0899a4839407960ec19d421ceef03a3dcae42339
Merge: 1839501 ab74553
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Jan 12 09:35:46 2015 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Jan 12 09:35:46 2015 -0500

    Merge topic 'improve_cobertura' into next
    
    ab74553d ctest_coverage: Fix parsing of absolute paths in Cobertura files


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ab74553db49dba6a1d2219f8ff8545650ebfb5a5
commit ab74553db49dba6a1d2219f8ff8545650ebfb5a5
Author:     Zack Galbreath <zack.galbreath at kitware.com>
AuthorDate: Fri Dec 19 10:12:25 2014 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Jan 12 09:34:50 2015 -0500

    ctest_coverage: Fix parsing of absolute paths in Cobertura files
    
    This commit fixes a segmentation fault I encountered when my
    Coverage.xml referenced a system file, eg /usr/lib/python/foo.py.
    
    Similar to other CMake coverage parsers, this one now ignores any
    files it finds that are not located within this project's source
    or binary directories.

diff --git a/Source/CTest/cmParseCoberturaCoverage.cxx b/Source/CTest/cmParseCoberturaCoverage.cxx
index 0742be1..e19b199 100644
--- a/Source/CTest/cmParseCoberturaCoverage.cxx
+++ b/Source/CTest/cmParseCoberturaCoverage.cxx
@@ -12,9 +12,11 @@ public:
   XMLParser(cmCTest* ctest, cmCTestCoverageHandlerContainer& cont)
     : CTest(ctest), Coverage(cont)
   {
-   this->InSources = false;
-   this->InSource  = false;
+   this->InSources     = false;
+   this->InSource      = false;
+   this->SkipThisClass = false;
    this->FilePaths.push_back(this->Coverage.SourceDir);
+   this->FilePaths.push_back(this->Coverage.BinaryDir);
    this->CurFileName = "";
   }
 
@@ -35,6 +37,10 @@ protected:
      {
      this->InSources=false;
      }
+    else if(name == "class")
+      {
+      this->SkipThisClass = false;
+      }
   }
 
   virtual void CharacterDataHandler(const char* data, int length)
@@ -72,15 +78,33 @@ protected:
                      << atts[tagCount+1]<< std::endl);
           std::string filename = atts[tagCount+1];
           this->CurFileName = "";
+
+          // Check if this is an absolute path that falls within our
+          // source or binary directories.
           for(size_t i=0;i < FilePaths.size();i++)
             {
-            finalpath = FilePaths[i] + "/" + filename;
-            if(cmSystemTools::FileExists(finalpath.c_str()))
+            if (filename.find(FilePaths[i]) == 0)
               {
-              this->CurFileName = finalpath;
+              this->CurFileName = filename;
               break;
               }
             }
+
+          if (this->CurFileName == "")
+            {
+            // Check if this is a path that is relative to our source or
+            // binary directories.
+            for(size_t i=0;i < FilePaths.size();i++)
+              {
+              finalpath = FilePaths[i] + "/" + filename;
+              if(cmSystemTools::FileExists(finalpath.c_str()))
+                {
+                this->CurFileName = finalpath;
+                break;
+                }
+              }
+            }
+
           cmsys::ifstream fin(this->CurFileName.c_str());
           if(this->CurFileName == "" || !fin )
           {
@@ -89,10 +113,11 @@ protected:
             fin.open(this->CurFileName.c_str());
             if (!fin)
             {
-              cmCTestLog(this->CTest, ERROR_MESSAGE,
-                         "Python Coverage: Error opening " << this->CurFileName
-                         << std::endl);
-              this->Coverage.Error++;
+              cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+                         "Skipping system file " << filename <<
+                         std::endl);
+
+              this->SkipThisClass = true;
               break;
             }
           }
@@ -117,6 +142,10 @@ protected:
       int curHits = -1;
       while(true)
       {
+        if(this->SkipThisClass)
+          {
+          break;
+          }
         if(strcmp(atts[tagCount], "hits") == 0)
         {
           curHits = atoi(atts[tagCount+1]);
@@ -144,6 +173,7 @@ private:
 
   bool InSources;
   bool InSource;
+  bool SkipThisClass;
   std::vector<std::string> FilePaths;
   typedef cmCTestCoverageHandlerContainer::SingleFileCoverageVector
      FileLinesType;

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list