Browse Source

Merge topic 'ctest-git-send-committer'

5992526 CTest: Factor out duplicate Git author/committer code
307b8a6 CTest git update should pass the committer as well as the author
Brad King 15 years ago
parent
commit
ea38628366
3 changed files with 43 additions and 22 deletions
  1. 35 22
      Source/CTest/cmCTestGIT.cxx
  2. 5 0
      Source/CTest/cmCTestVC.cxx
  3. 3 0
      Source/CTest/cmCTestVC.h

+ 35 - 22
Source/CTest/cmCTestGIT.cxx

@@ -503,28 +503,15 @@ private:
       this->ParsePerson(this->Line.c_str()+7, author);
       this->Rev.Author = author.Name;
       this->Rev.EMail = author.EMail;
-
-      // Convert the time to a human-readable format that is also easy
-      // to machine-parse: "CCYY-MM-DD hh:mm:ss".
-      time_t seconds = static_cast<time_t>(author.Time);
-      struct tm* t = gmtime(&seconds);
-      char dt[1024];
-      sprintf(dt, "%04d-%02d-%02d %02d:%02d:%02d",
-              t->tm_year+1900, t->tm_mon+1, t->tm_mday,
-              t->tm_hour, t->tm_min, t->tm_sec);
-      this->Rev.Date = dt;
-
-      // Add the time-zone field "+zone" or "-zone".
-      char tz[32];
-      if(author.TimeZone >= 0)
-        {
-        sprintf(tz, " +%04ld", author.TimeZone);
-        }
-      else
-        {
-        sprintf(tz, " -%04ld", -author.TimeZone);
-        }
-      this->Rev.Date += tz;
+      this->Rev.Date = this->FormatDateTime(author);
+      }
+    else if(strncmp(this->Line.c_str(), "committer ", 10) == 0)
+      {
+      Person committer;
+      this->ParsePerson(this->Line.c_str()+10, committer);
+      this->Rev.Committer = committer.Name;
+      this->Rev.CommitterEMail = committer.EMail;
+      this->Rev.CommitDate = this->FormatDateTime(committer);
       }
     }
 
@@ -537,6 +524,32 @@ private:
       }
     this->Rev.Log += "\n";
     }
+
+  std::string FormatDateTime(Person const& person)
+    {
+    // Convert the time to a human-readable format that is also easy
+    // to machine-parse: "CCYY-MM-DD hh:mm:ss".
+    time_t seconds = static_cast<time_t>(person.Time);
+    struct tm* t = gmtime(&seconds);
+    char dt[1024];
+    sprintf(dt, "%04d-%02d-%02d %02d:%02d:%02d",
+            t->tm_year+1900, t->tm_mon+1, t->tm_mday,
+            t->tm_hour, t->tm_min, t->tm_sec);
+    std::string out = dt;
+
+    // Add the time-zone field "+zone" or "-zone".
+    char tz[32];
+    if(person.TimeZone >= 0)
+      {
+      sprintf(tz, " +%04ld", person.TimeZone);
+      }
+    else
+      {
+      sprintf(tz, " -%04ld", -person.TimeZone);
+      }
+    out += tz;
+    return out;
+    }
 };
 
 char const cmCTestGIT::CommitParser::SectionSep[SectionCount] =

+ 5 - 0
Source/CTest/cmCTestVC.cxx

@@ -228,6 +228,11 @@ void cmCTestVC::WriteXMLEntry(std::ostream& xml,
       << "\t\t\t<CheckinDate>" << cmXMLSafe(rev.Date) << "</CheckinDate>\n"
       << "\t\t\t<Author>" << cmXMLSafe(rev.Author) << "</Author>\n"
       << "\t\t\t<Email>" << cmXMLSafe(rev.EMail) << "</Email>\n"
+      << "\t\t\t<Committer>" << cmXMLSafe(rev.Committer) << "</Committer>\n"
+      << "\t\t\t<CommitterEmail>" << cmXMLSafe(rev.CommitterEMail)
+      << "</CommitterEmail>\n"
+      << "\t\t\t<CommitDate>" << cmXMLSafe(rev.CommitDate)
+      << "</CommitDate>\n"
       << "\t\t\t<Log>" << cmXMLSafe(rev.Log) << "</Log>\n"
       << "\t\t\t<Revision>" << cmXMLSafe(rev.Rev) << "</Revision>\n"
       << "\t\t\t<PriorRevision>" << cmXMLSafe(prior) << "</PriorRevision>\n"

+ 3 - 0
Source/CTest/cmCTestVC.h

@@ -74,6 +74,9 @@ protected:
     std::string Date;
     std::string Author;
     std::string EMail;
+    std::string Committer;
+    std::string CommitterEMail;
+    std::string CommitDate;
     std::string Log;
   };