]> git.lyx.org Git - features.git/commitdiff
Backport missing implementation of revision info for RCS
authorPavel Sanda <sanda@lyx.org>
Sun, 3 Jul 2011 01:19:24 +0000 (01:19 +0000)
committerPavel Sanda <sanda@lyx.org>
Sun, 3 Jul 2011 01:19:24 +0000 (01:19 +0000)
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
src/VCBackend.cpp
src/VCBackend.h
status.20x

index 6072597d4fc26fde90b20ca5cf8380a1288d3418..ba0e5bf1da8a651168a50863893f9cf85edb8bd5 100644 (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"
index 342584284a8ef7ea1ca5f93d753e7751c54d76eb..f0a53004f593dd2d1f6be0504422fa462f2b5110 100644 (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;
index 3dbf5579719900473e755ce18233aae9c450eaba..78ccbd4725d5ebe9404271bfed549b627ca59791 100644 (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_;
 };
 
 
index 0e62fdab4f379f6fb3cc1167aa64c9b002744d7b..8cdc6b1263e530ec57a62b70b9578a6b9866ea62 100644 (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.