X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVCBackend.cpp;h=0fd2094822a42b5a09ba3afa5273ffe968e496b7;hb=8c6ac457ecc69f57ab54cd8c9b8b7893607c65d6;hp=91c4fc2253b52b473338bde6ea651edb35084ab5;hpb=f630be890494c849981e4fb52ea4740506e92bed;p=lyx.git diff --git a/src/VCBackend.cpp b/src/VCBackend.cpp index 91c4fc2253..0fd2094822 100644 --- a/src/VCBackend.cpp +++ b/src/VCBackend.cpp @@ -11,16 +11,14 @@ #include #include "VCBackend.h" -#include "debug.h" +#include "support/debug.h" #include "Buffer.h" -#include "support/path.h" +#include "support/Path.h" #include "support/filetools.h" -#include "support/fs_extras.h" #include "support/lstrings.h" -#include "support/systemcall.h" +#include "support/Systemcall.h" -#include #include #include @@ -53,19 +51,23 @@ using std::getline; using std::string; using std::ifstream; -namespace fs = boost::filesystem; - int VCS::doVCCommand(string const & cmd, FileName const & path) { - LYXERR(Debug::LYXVC) << "doVCCommand: " << cmd << endl; + LYXERR(Debug::LYXVC, "doVCCommand: " << cmd); Systemcall one; - support::Path p(path); + support::PathChanger p(path); int const ret = one.startscript(Systemcall::Wait, cmd); return ret; } +///////////////////////////////////////////////////////////////////// +// +// RCS +// +///////////////////////////////////////////////////////////////////// + RCS::RCS(FileName const & m) { master_ = m; @@ -73,34 +75,31 @@ RCS::RCS(FileName const & m) } -FileName const RCS::find_file(FileName const & file) +FileName const RCS::findFile(FileName const & file) { // Check if *,v exists. FileName tmp(file.absFilename() + ",v"); - LYXERR(Debug::LYXVC) << "Checking if file is under rcs: " - << tmp << endl; - if (fs::is_readable(tmp.toFilesystemEncoding())) { - LYXERR(Debug::LYXVC) << "Yes " << file - << " is under rcs." << endl; + LYXERR(Debug::LYXVC, "Checking if file is under rcs: " << tmp); + if (tmp.isReadableFile()) { + LYXERR(Debug::LYXVC, "Yes " << file << " is under rcs."); + return tmp; + } + + // Check if RCS/*,v exists. + tmp = FileName(addName(addPath(onlyPath(file.absFilename()), "RCS"), file.absFilename()) + ",v"); + LYXERR(Debug::LYXVC, "Checking if file is under rcs: " << tmp); + if (tmp.isReadableFile()) { + LYXERR(Debug::LYXVC, "Yes " << file << " it is under rcs."); return tmp; - } else { - // Check if RCS/*,v exists. - tmp = FileName(addName(addPath(onlyPath(file.absFilename()), "RCS"), file.absFilename()) + ",v"); - LYXERR(Debug::LYXVC) << "Checking if file is under rcs: " - << tmp << endl; - if (fs::is_readable(tmp.toFilesystemEncoding())) { - LYXERR(Debug::LYXVC) << "Yes " << file - << " it is under rcs."<< endl; - return tmp; - } } + return FileName(); } void RCS::retrieve(FileName const & file) { - LYXERR(Debug::LYXVC) << "LyXVC::RCS: retrieve.\n\t" << file << endl; + LYXERR(Debug::LYXVC, "LyXVC::RCS: retrieve.\n\t" << file); VCS::doVCCommand("co -q -r " + quoteName(file.toFilesystemEncoding()), FileName()); } @@ -108,7 +107,7 @@ void RCS::retrieve(FileName const & file) void RCS::scanMaster() { - LYXERR(Debug::LYXVC) << "LyXVC::RCS: scanMaster." << endl; + LYXERR(Debug::LYXVC, "LyXVC::RCS: scanMaster."); ifstream ifs(master_.toFilesystemEncoding().c_str()); @@ -116,9 +115,8 @@ void RCS::scanMaster() bool read_enough = false; while (!read_enough && ifs >> token) { - LYXERR(Debug::LYXVC) - << "LyXVC::scanMaster: current lex text: `" - << token << '\'' << endl; + LYXERR(Debug::LYXVC, "LyXVC::scanMaster: current lex text: `" + << token << '\''); if (token.empty()) continue; @@ -128,8 +126,7 @@ void RCS::scanMaster() ifs >> tmv; tmv = rtrim(tmv, ";"); version_ = tmv; - LYXERR(Debug::LYXVC) << "LyXVC: version found to be " - << tmv << endl; + LYXERR(Debug::LYXVC, "LyXVC: version found to be " << tmv); } else if (contains(token, "access") || contains(token, "symbols") || contains(token, "strict")) { @@ -162,9 +159,7 @@ void RCS::scanMaster() read_enough = true; } else { // unexpected - LYXERR(Debug::LYXVC) - << "LyXVC::scanMaster(): unexpected token" - << endl; + LYXERR(Debug::LYXVC, "LyXVC::scanMaster(): unexpected token"); } } } @@ -175,7 +170,7 @@ void RCS::registrer(string const & msg) string cmd = "ci -q -u -i -t-\""; cmd += msg; cmd += "\" "; - cmd += quoteName(onlyFilename(owner_->fileName())); + cmd += quoteName(onlyFilename(owner_->absFileName())); doVCCommand(cmd, FileName(owner_->filePath())); } @@ -183,7 +178,7 @@ void RCS::registrer(string const & msg) void RCS::checkIn(string const & msg) { doVCCommand("ci -q -u -m\"" + msg + "\" " - + quoteName(onlyFilename(owner_->fileName())), + + quoteName(onlyFilename(owner_->absFileName())), FileName(owner_->filePath())); } @@ -191,7 +186,7 @@ void RCS::checkIn(string const & msg) void RCS::checkOut() { owner_->markClean(); - doVCCommand("co -q -l " + quoteName(onlyFilename(owner_->fileName())), + doVCCommand("co -q -l " + quoteName(onlyFilename(owner_->absFileName())), FileName(owner_->filePath())); } @@ -199,7 +194,7 @@ void RCS::checkOut() void RCS::revert() { doVCCommand("co -f -u" + version() + " " - + quoteName(onlyFilename(owner_->fileName())), + + quoteName(onlyFilename(owner_->absFileName())), FileName(owner_->filePath())); // We ignore changes and just reload! owner_->markClean(); @@ -208,21 +203,27 @@ void RCS::revert() void RCS::undoLast() { - LYXERR(Debug::LYXVC) << "LyXVC: undoLast" << endl; + LYXERR(Debug::LYXVC, "LyXVC: undoLast"); doVCCommand("rcs -o" + version() + " " - + quoteName(onlyFilename(owner_->fileName())), + + quoteName(onlyFilename(owner_->absFileName())), FileName(owner_->filePath())); } void RCS::getLog(FileName const & tmpf) { - doVCCommand("rlog " + quoteName(onlyFilename(owner_->fileName())) + doVCCommand("rlog " + quoteName(onlyFilename(owner_->absFileName())) + " > " + tmpf.toFilesystemEncoding(), FileName(owner_->filePath())); } +///////////////////////////////////////////////////////////////////// +// +// CVS +// +///////////////////////////////////////////////////////////////////// + CVS::CVS(FileName const & m, FileName const & f) { master_ = m; @@ -231,22 +232,22 @@ CVS::CVS(FileName const & m, FileName const & f) } -FileName const CVS::find_file(FileName const & file) +FileName const CVS::findFile(FileName const & file) { // First we look for the CVS/Entries in the same dir // where we have file. FileName const dir(onlyPath(file.absFilename()) + "/CVS/Entries"); string const tmpf = '/' + onlyFilename(file.absFilename()) + '/'; - LYXERR(Debug::LYXVC) << "LyXVC: checking in `" << dir - << "' for `" << tmpf << '\'' << endl; - if (fs::is_readable(dir.toFilesystemEncoding())) { + LYXERR(Debug::LYXVC, "LyXVC: checking in `" << dir + << "' for `" << tmpf << '\''); + if (dir.isReadableDirectory()) { // 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. ifstream ifs(dir.toFilesystemEncoding().c_str()); string line; while (getline(ifs, line)) { - LYXERR(Debug::LYXVC) << "\tEntries: " << line << endl; + LYXERR(Debug::LYXVC, "\tEntries: " << line); if (contains(line, tmpf)) return dir; } @@ -257,16 +258,15 @@ FileName const CVS::find_file(FileName const & file) void CVS::scanMaster() { - LYXERR(Debug::LYXVC) << "LyXVC::CVS: scanMaster. \n Checking: " - << master_ << endl; + LYXERR(Debug::LYXVC, "LyXVC::CVS: scanMaster. \n Checking: " << master_); // Ok now we do the real scan... ifstream ifs(master_.toFilesystemEncoding().c_str()); string tmpf = '/' + onlyFilename(file_.absFilename()) + '/'; - LYXERR(Debug::LYXVC) << "\tlooking for `" << tmpf << '\'' << endl; + LYXERR(Debug::LYXVC, "\tlooking for `" << tmpf << '\''); string line; static regex const reg("/(.*)/(.*)/(.*)/(.*)/(.*)"); while (getline(ifs, line)) { - LYXERR(Debug::LYXVC) << "\t line: " << line << endl; + LYXERR(Debug::LYXVC, "\t line: " << line); if (contains(line, tmpf)) { // Ok extract the fields. smatch sm; @@ -281,12 +281,10 @@ void CVS::scanMaster() //sm[4]; // options //sm[5]; // tag or tagdate // FIXME: must double check file is stattable/existing - time_t mod = fs::last_write_time(file_.toFilesystemEncoding()); + time_t mod = file_.lastModified(); string mod_date = rtrim(asctime(gmtime(&mod)), "\n"); - LYXERR(Debug::LYXVC) - << "Date in Entries: `" << file_date - << "'\nModification date of file: `" - << mod_date << '\'' << endl; + LYXERR(Debug::LYXVC, "Date in Entries: `" << file_date + << "'\nModification date of file: `" << mod_date << '\''); if (file_date == mod_date) { locker_ = "Unlocked"; vcstatus = UNLOCKED; @@ -305,7 +303,7 @@ void CVS::scanMaster() void CVS::registrer(string const & msg) { doVCCommand("cvs -q add -m \"" + msg + "\" " - + quoteName(onlyFilename(owner_->fileName())), + + quoteName(onlyFilename(owner_->absFileName())), FileName(owner_->filePath())); } @@ -313,7 +311,7 @@ void CVS::registrer(string const & msg) void CVS::checkIn(string const & msg) { doVCCommand("cvs -q commit -m \"" + msg + "\" " - + quoteName(onlyFilename(owner_->fileName())), + + quoteName(onlyFilename(owner_->absFileName())), FileName(owner_->filePath())); } @@ -329,7 +327,7 @@ void CVS::revert() { // Reverts to the version in CVS repository and // gets the updated version from the repository. - string const fil = quoteName(onlyFilename(owner_->fileName())); + string const fil = quoteName(onlyFilename(owner_->absFileName())); doVCCommand("rm -f " + fil + "; cvs update " + fil, FileName(owner_->filePath())); @@ -348,7 +346,7 @@ void CVS::undoLast() void CVS::getLog(FileName const & tmpf) { - doVCCommand("cvs log " + quoteName(onlyFilename(owner_->fileName())) + doVCCommand("cvs log " + quoteName(onlyFilename(owner_->absFileName())) + " > " + tmpf.toFilesystemEncoding(), FileName(owner_->filePath())); }