]> git.lyx.org Git - lyx.git/blobdiff - src/vc-backend.C
another safety belt
[lyx.git] / src / vc-backend.C
index a5fd7be2a5d532e9a14eb96f6614ae1f4a32a7bc..e81ed01b2c38f30a61e55919b431013b6a80bd64 100644 (file)
@@ -8,28 +8,43 @@
 #include "debug.h"
 #include "buffer.h"
 #include "BufferView.h"
-#include "LyXView.h"
-#include "lyxfunc.h"
+#include "frontends/LyXView.h"
+#include "funcrequest.h"
 
 #include "support/FileInfo.h"
-#include "support/LRegex.h"
-#include "support/LSubstring.h"
 #include "support/path.h"
 #include "support/filetools.h"
 #include "support/lstrings.h"
+#include "support/systemcall.h"
+
+#include <boost/regex.hpp>
 
 #include <fstream>
 
+#ifndef CXX_GLOBAL_CSTD
+using std::asctime;
+using std::gmtime;
+#endif
+
 using std::endl;
 using std::ifstream;
 using std::getline;
+using boost::regex;
+using boost::regex_match;
+
+#ifndef USE_INCLUDED_STRING
+using boost::smatch;
+#else
+using boost::cmatch;
+#endif
+
 
 int VCS::doVCCommand(string const & cmd, string const & path)
 {
        lyxerr[Debug::LYXVC] << "doVCCommand: " << cmd << endl;
-        Systemcalls one;
+       Systemcall one;
        Path p(path);
-       int const ret = one.startscript(Systemcalls::System, cmd);
+       int const ret = one.startscript(Systemcall::Wait, cmd);
        return ret;
 }
 
@@ -69,9 +84,9 @@ string const RCS::find_file(string const & file)
 }
 
 
-void RCS::retrive(string const & file)
+void RCS::retrieve(string const & file)
 {
-       lyxerr[Debug::LYXVC] << "LyXVC::RCS: retrive.\n\t" << file << endl;
+       lyxerr[Debug::LYXVC] << "LyXVC::RCS: retrieve.\n\t" << file << endl;
        VCS::doVCCommand("co -q -r \""
                         + file + "\"",
                         string());
@@ -98,7 +113,7 @@ void RCS::scanMaster()
                        // get version here
                        string tmv;
                        ifs >> tmv;
-                       tmv = strip(tmv, ';');
+                       tmv = rtrim(tmv, ";");
                        version_ = tmv;
                        lyxerr[Debug::LYXVC] << "LyXVC: version found to be "
                                             << tmv << endl;
@@ -118,7 +133,7 @@ void RCS::scanMaster()
                        string s2;
                        do {
                                ifs >> tmpt;
-                               s1 = strip(tmpt, ';');
+                               s1 = rtrim(tmpt, ";");
                                // tmp is now in the format <user>:<version>
                                s1 = split(s1, s2, ':');
                                // s2 is user, and s1 is version
@@ -128,7 +143,7 @@ void RCS::scanMaster()
                                        break;
                                }
                        } while (!contains(tmpt, ";"));
-                       
+
                } else if (token == "comment") {
                        // we don't need to read any further than this.
                        read_enough = true;
@@ -149,36 +164,35 @@ void RCS::registrer(string const & msg)
        cmd += "\" \"";
        cmd += OnlyFilename(owner_->fileName());
        cmd += "\"";
-       doVCCommand(cmd, owner_->filepath);
-       owner_->getUser()->owner()->getLyXFunc()->dispatch("buffer-reload");
+       doVCCommand(cmd, owner_->filePath());
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
 void RCS::checkIn(string const & msg)
 {
        doVCCommand("ci -q -u -m\"" + msg + "\" \""
-                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filepath);
-       owner_->getUser()->owner()->getLyXFunc()->dispatch("buffer-reload");
+                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath());
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
 void RCS::checkOut()
 {
-       owner_->markLyxClean();
+       owner_->markClean();
        doVCCommand("co -q -l \""
-                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filepath);
-       owner_->getUser()->owner()->getLyXFunc()->dispatch("buffer-reload");
+                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath());
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
 void RCS::revert()
 {
        doVCCommand("co -f -u" + version() + " \""
-                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filepath);
+                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath());
        // We ignore changes and just reload!
-       owner_->markLyxClean();
-       owner_->getUser()->owner()
-               ->getLyXFunc()->dispatch("buffer-reload");
+       owner_->markClean();
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
@@ -187,14 +201,14 @@ void RCS::undoLast()
        lyxerr[Debug::LYXVC] << "LyXVC: undoLast" << endl;
        doVCCommand("rcs -o" + version() + " \""
                    + OnlyFilename(owner_->fileName()) + "\"",
-                   owner_->filepath);
+                   owner_->filePath());
 }
 
 
 void RCS::getLog(string const & tmpf)
 {
        doVCCommand("rlog \""
-                   + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, owner_->filepath);
+                   + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, owner_->filePath());
 }
 
 
@@ -239,23 +253,29 @@ void CVS::scanMaster()
        string tmpf = "/" + OnlyFilename(file_) + "/";
        lyxerr[Debug::LYXVC] << "\tlooking for `" << tmpf << "'" << endl;
        string line;
-       LRegex reg("/(.*)/(.*)/(.*)/(.*)/(.*)");
+       regex reg("/(.*)/(.*)/(.*)/(.*)/(.*)");
        while (getline(ifs, line)) {
                lyxerr[Debug::LYXVC] << "\t  line: " << line << endl;
                if (contains(line, tmpf)) {
                        // Ok extract the fields.
-                       LRegex::SubMatches const & sm = reg.exec(line);
+#ifndef USE_INCLUDED_STRING
+                       smatch sm;
+#else
+                       cmatch sm;
+#endif
+                       regex_match(STRCONV(line), sm, reg);
+
                        //sm[0]; // whole matched string
                        //sm[1]; // filename
-                       version_ = LSubstring(line, sm[2].first,
-                                             sm[2].second);
-                       string file_date = LSubstring(line, sm[3].first,
-                                                     sm[3].second);
+                       version_ = STRCONV(sm.str(2));
+                       string const file_date = STRCONV(sm.str(3));
+
                        //sm[4]; // options
                        //sm[5]; // tag or tagdate
                        FileInfo fi(file_);
+                       // FIXME: must double check file is stattable/existing
                        time_t mod = fi.getModificationTime();
-                       string mod_date = strip(asctime(gmtime(&mod)), '\n');
+                       string mod_date = rtrim(asctime(gmtime(&mod)), "\n");
                        lyxerr[Debug::LYXVC]
                                <<  "Date in Entries: `" << file_date
                                << "'\nModification date of file: `"
@@ -278,8 +298,8 @@ void CVS::scanMaster()
 void CVS::registrer(string const & msg)
 {
        doVCCommand("cvs -q add -m \"" + msg + "\" \""
-                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filepath);
-       owner_->getUser()->owner()->getLyXFunc()->dispatch("buffer-reload");
+                   + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath());
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
@@ -287,8 +307,8 @@ void CVS::checkIn(string const & msg)
 {
        doVCCommand("cvs -q commit -m \"" + msg + "\" \""
                    + OnlyFilename(owner_->fileName()) + "\"",
-                   owner_->filepath);
-       owner_->getUser()->owner()->getLyXFunc()->dispatch("buffer-reload");
+                   owner_->filePath());
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
@@ -304,12 +324,11 @@ void CVS::revert()
        // Reverts to the version in CVS repository and
        // gets the updated version from the repository.
        string const fil = OnlyFilename(owner_->fileName());
-       
+
        doVCCommand("rm -f \"" + fil + "\"; cvs update \"" + fil + "\"",
-                   owner_->filepath);
-       owner_->markLyxClean();
-       owner_->getUser()->owner()
-               ->getLyXFunc()->dispatch("buffer-reload");
+                   owner_->filePath());
+       owner_->markClean();
+       owner_->getUser()->owner()->dispatch(FuncRequest(LFUN_MENURELOAD));
 }
 
 
@@ -326,5 +345,5 @@ void CVS::getLog(string const & tmpf)
 {
        doVCCommand("cvs log \""
                    + OnlyFilename(owner_->fileName()) + "\" > " + tmpf,
-                   owner_->filepath);
+                   owner_->filePath());
 }