X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fvc-backend.C;h=d58ea5e62420398c0a712ffaf780d63f1209a1cc;hb=9ee46b846e5e84ad40ceda4f4af94aeb86cd90a2;hp=1b19afde233d94c5139d4d0d408e6cc8d9070375;hpb=08b4385454857357a4df94d7e5ab1e88a769245d;p=lyx.git diff --git a/src/vc-backend.C b/src/vc-backend.C index 1b19afde23..d58ea5e624 100644 --- a/src/vc-backend.C +++ b/src/vc-backend.C @@ -1,33 +1,58 @@ -#include +/** + * \file vc-backend.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * + * Full author contact details are available in file CREDITS. + */ -#ifdef __GNUG__ -#pragma implementation -#endif +#include #include "vc-backend.h" #include "debug.h" #include "buffer.h" -#include "BufferView.h" -#include "frontends/LyXView.h" -#include "lyxfunc.h" -#include "support/FileInfo.h" #include "support/path.h" #include "support/filetools.h" +#include "support/fs_extras.h" #include "support/lstrings.h" #include "support/systemcall.h" +#include #include #include -using std::endl; -using std::ifstream; -using std::getline; +using lyx::support::AddName; +using lyx::support::AddPath; +using lyx::support::contains; +using lyx::support::OnlyFilename; +using lyx::support::OnlyPath; +using lyx::support::Path; +using lyx::support::QuoteName; +using lyx::support::rtrim; +using lyx::support::split; +using lyx::support::Systemcall; + using boost::regex; using boost::regex_match; using boost::smatch; +#ifndef CXX_GLOBAL_CSTD +using std::asctime; +using std::gmtime; +#endif + +using std::endl; +using std::getline; +using std::string; +using std::ifstream; + +namespace fs = boost::filesystem; + + int VCS::doVCCommand(string const & cmd, string const & path) { lyxerr[Debug::LYXVC] << "doVCCommand: " << cmd << endl; @@ -50,10 +75,9 @@ string const RCS::find_file(string const & file) string tmp(file); // Check if *,v exists. tmp += ",v"; - FileInfo f; lyxerr[Debug::LYXVC] << "Checking if file is under rcs: " << tmp << endl; - if (f.newFile(tmp).readable()) { + if (fs::is_readable(tmp)) { lyxerr[Debug::LYXVC] << "Yes " << file << " is under rcs." << endl; return tmp; @@ -63,7 +87,7 @@ string const RCS::find_file(string const & file) tmp += ",v"; lyxerr[Debug::LYXVC] << "Checking if file is under rcs: " << tmp << endl; - if (f.newFile(tmp).readable()) { + if (fs::is_readable(tmp)) { lyxerr[Debug::LYXVC] << "Yes " << file << " it is under rcs."<< endl; return tmp; @@ -76,8 +100,7 @@ string const RCS::find_file(string const & file) void RCS::retrieve(string const & file) { lyxerr[Debug::LYXVC] << "LyXVC::RCS: retrieve.\n\t" << file << endl; - VCS::doVCCommand("co -q -r \"" - + file + "\"", + VCS::doVCCommand("co -q -r " + QuoteName(file), string()); } @@ -94,7 +117,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; @@ -102,7 +125,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; @@ -112,7 +135,7 @@ void RCS::scanMaster() // nothing } else if (contains(token, "locks")) { // get locker here - if (contains(token, ";")) { + if (contains(token, ';')) { locker_ = "Unlocked"; vcstatus = UNLOCKED; continue; @@ -122,7 +145,7 @@ void RCS::scanMaster() 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 @@ -131,7 +154,7 @@ void RCS::scanMaster() vcstatus = LOCKED; break; } - } while (!contains(tmpt, ";")); + } while (!contains(tmpt, ';')); } else if (token == "comment") { // we don't need to read any further than this. @@ -150,55 +173,52 @@ void RCS::registrer(string const & msg) { string cmd = "ci -q -u -i -t-\""; cmd += msg; - cmd += "\" \""; - cmd += OnlyFilename(owner_->fileName()); - cmd += "\""; + cmd += "\" "; + cmd += QuoteName(OnlyFilename(owner_->fileName())); doVCCommand(cmd, owner_->filePath()); - owner_->getUser()->owner()->getLyXFunc()->dispatch(LFUN_MENURELOAD); } void RCS::checkIn(string const & msg) { - doVCCommand("ci -q -u -m\"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath()); - owner_->getUser()->owner()->getLyXFunc()->dispatch(LFUN_MENURELOAD); + doVCCommand("ci -q -u -m\"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), + owner_->filePath()); } void RCS::checkOut() { - owner_->markLyxClean(); - doVCCommand("co -q -l \"" - + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath()); - owner_->getUser()->owner()->getLyXFunc()->dispatch(LFUN_MENURELOAD); + owner_->markClean(); + doVCCommand("co -q -l " + QuoteName(OnlyFilename(owner_->fileName())), + owner_->filePath()); } void RCS::revert() { - doVCCommand("co -f -u" + version() + " \"" - + OnlyFilename(owner_->fileName()) + "\"", owner_->filePath()); + doVCCommand("co -f -u" + version() + " " + + QuoteName(OnlyFilename(owner_->fileName())), + owner_->filePath()); // We ignore changes and just reload! - owner_->markLyxClean(); - owner_->getUser()->owner() - ->getLyXFunc()->dispatch(LFUN_MENURELOAD); + owner_->markClean(); } void RCS::undoLast() { lyxerr[Debug::LYXVC] << "LyXVC: undoLast" << endl; - doVCCommand("rcs -o" + version() + " \"" - + OnlyFilename(owner_->fileName()) + "\"", + doVCCommand("rcs -o" + version() + " " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); } void RCS::getLog(string const & tmpf) { - doVCCommand("rlog \"" - + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, owner_->filePath()); + doVCCommand("rlog " + QuoteName(OnlyFilename(owner_->fileName())) + + " > " + tmpf, + owner_->filePath()); } @@ -217,9 +237,8 @@ string const CVS::find_file(string const & file) string const dir = OnlyPath(file) + "/CVS/Entries"; string const tmpf = "/" + OnlyFilename(file) + "/"; lyxerr[Debug::LYXVC] << "LyXVC: checking in `" << dir - << "' for `" << tmpf << "'" << endl; - FileInfo const f(dir); - if (f.readable()) { + << "' for `" << tmpf << '\'' << endl; + if (fs::is_readable(dir)) { // 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 // dirty parse here. @@ -241,30 +260,31 @@ 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; - regex reg("/(.*)/(.*)/(.*)/(.*)/(.*)"); + static regex const reg("/(.*)/(.*)/(.*)/(.*)/(.*)"); while (getline(ifs, line)) { lyxerr[Debug::LYXVC] << "\t line: " << line << endl; if (contains(line, tmpf)) { // Ok extract the fields. smatch sm; + regex_match(line, sm, reg); //sm[0]; // whole matched string //sm[1]; // filename - version_ = sm[2]; - string file_date = sm[3]; + version_ = sm.str(2); + string const file_date = 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'); + time_t mod = fs::last_write_time(file_); + 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; @@ -282,18 +302,17 @@ 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(LFUN_MENURELOAD); + doVCCommand("cvs -q add -m \"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), + owner_->filePath()); } void CVS::checkIn(string const & msg) { - doVCCommand("cvs -q commit -m \"" + msg + "\" \"" - + OnlyFilename(owner_->fileName()) + "\"", + doVCCommand("cvs -q commit -m \"" + msg + "\" " + + QuoteName(OnlyFilename(owner_->fileName())), owner_->filePath()); - owner_->getUser()->owner()->getLyXFunc()->dispatch(LFUN_MENURELOAD); } @@ -308,13 +327,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()); + string const fil = QuoteName(OnlyFilename(owner_->fileName())); - doVCCommand("rm -f \"" + fil + "\"; cvs update \"" + fil + "\"", + doVCCommand("rm -f " + fil + "; cvs update " + fil, owner_->filePath()); - owner_->markLyxClean(); - owner_->getUser()->owner() - ->getLyXFunc()->dispatch(LFUN_MENURELOAD); + owner_->markClean(); } @@ -329,7 +346,7 @@ void CVS::undoLast() void CVS::getLog(string const & tmpf) { - doVCCommand("cvs log \"" - + OnlyFilename(owner_->fileName()) + "\" > " + tmpf, + doVCCommand("cvs log " + QuoteName(OnlyFilename(owner_->fileName())) + + " > " + tmpf, owner_->filePath()); }