\end_layout
\begin_layout Standard
-LyX supports RCS version number information (only), see
+LyX supports RCS version number, author name, date and time of last commit.
+ All those are extracted from
+\family typewriter
+rlog -r <file-name>
+\family default
+.
+ For other details see
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:VCS-Revision-Information"
return false;
}
+
string RCS::revisionInfo(LyXVC::RevisionInfo const info)
{
if (info == LyXVC::File)
return version_;
+ // fill the rest of the attributes for a single file
+ if (rev_date_cache_.empty())
+ if (!getRevisionInfo())
+ return string();
+
+ switch (info) {
+ case LyXVC::Author:
+ return rev_author_cache_;
+ case LyXVC::Date:
+ return rev_date_cache_;
+ case LyXVC::Time:
+ return rev_time_cache_;
+ default: ;
+ }
+
return string();
}
+bool RCS::getRevisionInfo()
+{
+ FileName tmpf = FileName::tempName("lyxvcout");
+ if (tmpf.empty()) {
+ LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
+ return false;
+ }
+ doVCCommand("rlog -r " + quoteName(onlyFileName(owner_->absFileName()))
+ + " > " + quoteName(tmpf.toFilesystemEncoding()),
+ FileName(owner_->filePath()));
+
+ if (tmpf.empty())
+ return false;
+
+ ifstream ifs(tmpf.toFilesystemEncoding().c_str());
+ string line;
+
+ // we reached to the entry, i.e. after initial log message
+ bool entry=false;
+ // line with critical info, e.g:
+ //"date: 2011/07/02 11:02:54; author: sanda; state: Exp; lines: +17 -2"
+ string result;
+
+ while (ifs) {
+ getline(ifs, line);
+ LYXERR(Debug::LYXVC, line);
+ if (entry && prefixIs(line, "date:")) {
+ result = line;
+ break;
+ }
+ if (prefixIs(line, "revision"))
+ entry = true;
+ }
+ if (result.empty())
+ return false;
+
+ rev_date_cache_ = token(result, ' ', 1);
+ rev_time_cache_ = rtrim(token(result, ' ', 2), ";");
+ rev_author_cache_ = trim(token(token(result, ';', 1), ':', 1));
+
+ return !rev_author_cache_.empty();
+}
+
bool RCS::prepareFileRevision(string const &revis, string & f)
{
string rev = revis;
protected:
virtual void scanMaster();
private:
+ bool getRevisionInfo();
/**
* The version of the VC file. I am not sure if this can be a
* string or if it must be a float/int.
std::string version_;
/// The user currently keeping the lock on the VC file (or "Unlocked").
std::string locker_;
+ /// Cache for revision info.
+ std::string rev_date_cache_;
+ ///
+ std::string rev_time_cache_;
+ ///
+ std::string rev_author_cache_;
};