+void CVS::getRevisionInfo()
+{
+ if (have_rev_info_)
+ return;
+ have_rev_info_ = true;
+ FileName tmpf = FileName::tempName("lyxvcout");
+ if (tmpf.empty()) {
+ LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
+ return;
+ }
+
+ int rc = doVCCommandCallWithOutput("cvs log -r" + version_
+ + " " + getTarget(File),
+ FileName(owner_->filePath()), tmpf);
+ if (rc) {
+ tmpf.removeFile();
+ LYXERR(Debug::LYXVC, "cvs log failed with exit code " << rc);
+ return;
+ }
+
+ ifstream ifs(tmpf.toFilesystemEncoding().c_str());
+ static regex const reg("date: (.*) (.*) (.*); author: (.*); state: (.*);(.*)");
+
+ while (ifs) {
+ string line;
+ getline(ifs, line);
+ LYXERR(Debug::LYXVC, line << "\n");
+ if (prefixIs(line, "date:")) {
+ smatch sm;
+ regex_match(line, sm, reg);
+ //sm[0]; // whole matched string
+ rev_date_cache_ = sm[1];
+ rev_time_cache_ = sm[2];
+ //sm[3]; // GMT offset
+ rev_author_cache_ = sm[4];
+ break;
+ }
+ }
+ tmpf.removeFile();
+ if (rev_author_cache_.empty())
+ LYXERR(Debug::LYXVC,
+ "Could not retrieve revision info for " << version_ <<
+ " of " << getTarget(File));
+}
+