From 6df25e08c27fc7f3e81e4075766de16106c16727 Mon Sep 17 00:00:00 2001 From: Pavel Sanda Date: Sun, 3 Jul 2011 01:19:24 +0000 Subject: [PATCH] Backport missing implementation of revision info for RCS git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@39238 a592a061-630c-0410-9148-cb99ea01b6c8 --- lib/doc/Additional.lyx | 8 +++++- src/VCBackend.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++ src/VCBackend.h | 7 +++++ status.20x | 3 +++ 4 files changed, 76 insertions(+), 1 deletion(-) diff --git a/lib/doc/Additional.lyx b/lib/doc/Additional.lyx index 6072597d4f..ba0e5bf1da 100644 --- a/lib/doc/Additional.lyx +++ b/lib/doc/Additional.lyx @@ -19434,7 +19434,13 @@ Revision info \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 +\family default +. + For other details see \begin_inset CommandInset ref LatexCommand ref reference "sub:VCS-Revision-Information" diff --git a/src/VCBackend.cpp b/src/VCBackend.cpp index 342584284a..f0a53004f5 100644 --- a/src/VCBackend.cpp +++ b/src/VCBackend.cpp @@ -352,14 +352,73 @@ bool RCS::toggleReadOnlyEnabled() 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; diff --git a/src/VCBackend.h b/src/VCBackend.h index 3dbf557971..78ccbd4725 100644 --- a/src/VCBackend.h +++ b/src/VCBackend.h @@ -176,6 +176,7 @@ public: 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. @@ -183,6 +184,12 @@ private: 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_; }; diff --git a/status.20x b/status.20x index 0e62fdab4f..8cdc6b1263 100644 --- a/status.20x +++ b/status.20x @@ -142,6 +142,9 @@ What's new - Fix LaTeX export when the file encoding changes after a float (bug 7645). +- Fix missing VCS revision information for RCS (author/date/time). + + * USER INTERFACE - Fixed crash relating to outliner and mouse movement.