X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fvc-backend.C;h=4b9218348e4d26d78f5ee36c457250cf04e4d1cd;hb=2e57f2ff0ae7cd4a6efbf634ffe6d2f4379d9cfc;hp=3b4ef26a23132ff2248c66059c5156f3567e7f04;hpb=cdaf9a5ad50bae9adebdf73b2273fce12ed9b2df;p=lyx.git diff --git a/src/vc-backend.C b/src/vc-backend.C index 3b4ef26a23..4b9218348e 100644 --- a/src/vc-backend.C +++ b/src/vc-backend.C @@ -1,31 +1,47 @@ #include -#ifdef __GNUG__ -#pragma implementation -#endif - -#include - #include "vc-backend.h" #include "debug.h" +#include "buffer.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 "buffer.h" -#include "LyXView.h" -#include "lyxfunc.h" +#include "support/filetools.h" +#include "support/lstrings.h" +#include "support/systemcall.h" + +#include + +#include + +using namespace lyx::support; + +#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 ret = one.startscript(Systemcalls::System, cmd); + int const ret = one.startscript(Systemcall::Wait, cmd); return ret; } @@ -37,7 +53,7 @@ RCS::RCS(string const & m) } -string RCS::find_file(string const & file) +string const RCS::find_file(string const & file) { string tmp(file); // Check if *,v exists. @@ -65,11 +81,11 @@ string 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 + "\"", + + file + '"', string()); } @@ -86,7 +102,7 @@ void RCS::scanMaster() while (!read_enough && ifs >> token) { lyxerr[Debug::LYXVC] << "LyXVC::scanMaster: current lex text: `" - << token << "'" << endl; + << token << '\'' << endl; if (token.empty()) continue; @@ -94,7 +110,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; @@ -109,10 +125,12 @@ void RCS::scanMaster() vcstatus = UNLOCKED; continue; } - string tmpt, s1, s2; + string tmpt; + string s1; + string s2; do { ifs >> tmpt; - s1 = strip(tmpt, ';'); + s1 = rtrim(tmpt, ";"); // tmp is now in the format : s1 = split(s1, s2, ':'); // s2 is user, and s1 is version @@ -122,7 +140,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; @@ -133,7 +151,6 @@ void RCS::scanMaster() << endl; } } - version_ = "RCS: " + version_; } @@ -143,37 +160,35 @@ void RCS::registrer(string const & msg) cmd += msg; cmd += "\" \""; cmd += OnlyFilename(owner_->fileName()); - cmd += "\""; - doVCCommand(cmd, owner_->filepath); - owner_->getUser()->owner()->getLyXFunc()->Dispatch("buffer-reload"); + cmd += '"'; + doVCCommand(cmd, owner_->filePath()); } 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()); } 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()); } 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(); } @@ -181,14 +196,16 @@ void RCS::undoLast() { lyxerr[Debug::LYXVC] << "LyXVC: undoLast" << endl; doVCCommand("rcs -o" + version() + " \"" - + OnlyFilename(owner_->fileName()) + "\"", owner_->filepath); + + OnlyFilename(owner_->fileName()) + '"', + owner_->filePath()); } void RCS::getLog(string const & tmpf) { doVCCommand("rlog \"" - + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, owner_->filepath); + + OnlyFilename(owner_->fileName()) + "\" > " + + tmpf, owner_->filePath()); } @@ -200,16 +217,15 @@ CVS::CVS(string const & m, string const & f) } -string CVS::find_file(string const & file) +string const CVS::find_file(string const & file) { // First we look for the CVS/Entries in the same dir // where we have file. - string dir = OnlyPath(file); - string tmpf = "/" + OnlyFilename(file) + "/"; - dir += "/CVS/Entries"; + string const dir = OnlyPath(file) + "/CVS/Entries"; + string const tmpf = "/" + OnlyFilename(file) + "/"; lyxerr[Debug::LYXVC] << "LyXVC: checking in `" << dir - << "' for `" << tmpf << "'" << endl; - FileInfo f(dir); + << "' for `" << tmpf << '\'' << endl; + FileInfo const f(dir); if (f.readable()) { // Ok we are at least in a CVS dir. Parse the CVS/Entries // and see if we can find this file. We do a fast and @@ -232,30 +248,35 @@ void CVS::scanMaster() // Ok now we do the real scan... ifstream ifs(master_.c_str()); string tmpf = "/" + OnlyFilename(file_) + "/"; - lyxerr[Debug::LYXVC] << "\tlooking for `" << tmpf << "'" << endl; + lyxerr[Debug::LYXVC] << "\tlooking for `" << tmpf << '\'' << endl; string line; - LRegex reg("/(.*)/(.*)/(.*)/(.*)/(.*)"); - while(getline(ifs, line)) { + 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_ = "CVS: "; - 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: `" - << mod_date << "'" << endl; + << mod_date << '\'' << endl; if (file_date == mod_date) { locker_ = "Unlocked"; vcstatus = UNLOCKED; @@ -274,16 +295,16 @@ 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()); } void CVS::checkIn(string const & msg) { doVCCommand("cvs -q commit -m \"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + "\"", owner_->filepath); - owner_->getUser()->owner()->getLyXFunc()->Dispatch("buffer-reload"); + + OnlyFilename(owner_->fileName()) + '"', + owner_->filePath()); } @@ -296,10 +317,13 @@ void CVS::checkOut() void CVS::revert() { - // not sure how to do this... - // rm file - // cvs update - lyxerr << "Sorry not implemented." << endl; + // 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_->markClean(); } @@ -312,7 +336,9 @@ void CVS::undoLast() } -void CVS::getLog(string const &) +void CVS::getLog(string const & tmpf) { - lyxerr << "Sorry not implemented." << endl; + doVCCommand("cvs log \"" + + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, + owner_->filePath()); }