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
This commit is contained in:
Pavel Sanda 2011-07-03 01:19:24 +00:00
parent 3c5d2d063f
commit 6df25e08c2
4 changed files with 76 additions and 1 deletions

View File

@ -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 <file-name>
\family default
.
For other details see
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:VCS-Revision-Information"

View File

@ -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;

View File

@ -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_;
};

View File

@ -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.