]> git.lyx.org Git - lyx.git/blobdiff - src/VCBackend.cpp
tex2lyx: add strike-outs etc. to the TeX testfile
[lyx.git] / src / VCBackend.cpp
index bc47719480488acfadb71e80ff61652253c713ed..28ed40c5e23568074a02e9b26d7e76dc77c248fe 100644 (file)
@@ -43,7 +43,7 @@ int VCS::doVCCommandCall(string const & cmd, FileName const & path)
        LYXERR(Debug::LYXVC, "doVCCommandCall: " << cmd);
        Systemcall one;
        support::PathChanger p(path);
-       return one.startscript(Systemcall::Wait, cmd, false);
+       return one.startscript(Systemcall::Wait, cmd, string(), false);
 }
 
 
@@ -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;
@@ -369,7 +428,7 @@ bool RCS::prepareFileRevision(string const &revis, string & f)
        FileName tmpf = FileName::tempName("lyxvcrev_" + rev + "_");
        if (tmpf.empty()) {
                LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
-               return N_("Error: Could not generate logfile.");
+               return false;
        }
 
        doVCCommand("co -p" + rev + " "
@@ -1024,7 +1083,7 @@ bool SVN::checkLockMode()
        FileName tmpf = FileName::tempName("lyxvcout");
        if (tmpf.empty()){
                LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
-               return N_("Error: Could not generate logfile.");
+               return false;
        }
 
        LYXERR(Debug::LYXVC, "Detecting locking mode...");
@@ -1402,7 +1461,7 @@ bool SVN::getFileRevisionInfo()
        FileName tmpf = FileName::tempName("lyxvcout");
        if (tmpf.empty()) {
                LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
-               return N_("Error: Could not generate logfile.");
+               return false;
        }
 
        doVCCommand("svn info --xml " + quoteName(onlyFileName(owner_->absFileName()))
@@ -1455,7 +1514,7 @@ bool SVN::getTreeRevisionInfo()
        FileName tmpf = FileName::tempName("lyxvcout");
        if (tmpf.empty()) {
                LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
-               return N_("Error: Could not generate logfile.");
+               return false;
        }
 
        doVCCommand("svnversion -n . > " + quoteName(tmpf.toFilesystemEncoding()),