X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVCBackend.cpp;h=9f9a3ff082ecce8d89473f46ce23c347721df58a;hb=2de30c62f8d671a8c8d4d52a6a7310e2c5ca84de;hp=0e10aaafca0a7ba72698c0c5459dda2893a3e8de;hpb=f09a9fe2e60e4aeaca23b42b2bf30f5d64cfd9b1;p=lyx.git diff --git a/src/VCBackend.cpp b/src/VCBackend.cpp index 0e10aaafca..9f9a3ff082 100644 --- a/src/VCBackend.cpp +++ b/src/VCBackend.cpp @@ -13,6 +13,7 @@ #include "VCBackend.h" #include "Buffer.h" +#include "DispatchResult.h" #include "LyX.h" #include "FuncRequest.h" @@ -30,6 +31,7 @@ #include "support/TempFile.h" #include +#include using namespace std; using namespace lyx::support; @@ -43,7 +45,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, string(), false); + return one.startscript(Systemcall::Wait, cmd, string(), string(), false); } @@ -58,7 +60,7 @@ int VCS::doVCCommand(string const & cmd, FileName const & path, bool reportError owner_->setBusy(false); if (ret && reportError) frontend::Alert::error(_("Revision control error."), - bformat(_("Some problem occured while running the command:\n" + bformat(_("Some problem occurred while running the command:\n" "'%1$s'."), from_utf8(cmd))); return ret; @@ -74,8 +76,8 @@ bool VCS::makeRCSRevision(string const &version, string &revis) const // if positive use as the last number in the whole revision string if (back > 0) { string base; - rsplit(version, base , '.' ); - rev = base + "." + rev; + rsplit(version, base , '.'); + rev = base + '.' + rev; } if (back == 0) rev = version; @@ -83,14 +85,14 @@ bool VCS::makeRCSRevision(string const &version, string &revis) const // in case of backward indexing if (back < 0) { string cur, base; - cur = rsplit(version, base , '.' ); + cur = rsplit(version, base , '.'); if (!isStrInt(cur)) return false; int want = convert(cur) + back; if (want <= 0) return false; - - rev = base + "." + convert(want); + + rev = base + '.' + convert(want); } } @@ -359,7 +361,7 @@ bool RCS::lockingToggleEnabled() bool RCS::revert() { - if (doVCCommand("co -f -u" + version_ + " " + if (doVCCommand("co -f -u" + version_ + ' ' + quoteName(onlyFileName(owner_->absFileName())), FileName(owner_->filePath()))) return false; @@ -379,7 +381,7 @@ bool RCS::isRevertWithConfirmation() void RCS::undoLast() { LYXERR(Debug::LYXVC, "LyXVC: undoLast"); - doVCCommand("rcs -o" + version_ + " " + doVCCommand("rcs -o" + version_ + ' ' + quoteName(onlyFileName(owner_->absFileName())), FileName(owner_->filePath())); } @@ -482,7 +484,7 @@ bool RCS::prepareFileRevision(string const &revis, string & f) if (!VCS::makeRCSRevision(version_, rev)) return false; - TempFile tempfile("lyxvcrev_" + rev + "_"); + TempFile tempfile("lyxvcrev_" + rev + '_'); tempfile.setAutoRemove(false); FileName tmpf = tempfile.name(); if (tmpf.empty()) { @@ -490,10 +492,11 @@ bool RCS::prepareFileRevision(string const &revis, string & f) return false; } - doVCCommand("co -p" + rev + " " + doVCCommand("co -p" + rev + ' ' + quoteName(onlyFileName(owner_->absFileName())) + " > " + quoteName(tmpf.toFilesystemEncoding()), FileName(owner_->filePath())); + tmpf.refresh(); if (tmpf.isFileEmpty()) return false; @@ -564,6 +567,8 @@ void CVS::scanMaster() // Ok extract the fields. smatch sm; + // false positive from coverity + // coverity[CHECKED_RETURN] regex_match(line, sm, reg); //sm[0]; // whole matched string @@ -638,7 +643,7 @@ docstring CVS::toString(CvsStatus status) const case StatusError: return _("Cannot retrieve CVS status"); } - return 0; + return docstring(); } @@ -679,7 +684,7 @@ CVS::CvsStatus CVS::getStatus() while (ifs) { string line; getline(ifs, line); - LYXERR(Debug::LYXVC, line << "\n"); + LYXERR(Debug::LYXVC, line << '\n'); if (prefixIs(line, "File:")) { if (contains(line, "Up-to-date")) status = UpToDate; @@ -707,22 +712,22 @@ void CVS::getRevisionInfo() LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf); return; } - - int rc = doVCCommandCallWithOutput("cvs log -r" + version_ - + " " + getTarget(File), + + int rc = doVCCommandCallWithOutput("cvs log -r" + version_ + + ' ' + getTarget(File), FileName(owner_->filePath()), tmpf); if (rc) { LYXERR(Debug::LYXVC, "cvs log failed with exit code " << rc); return; } - + ifstream ifs(tmpf.toFilesystemEncoding().c_str()); static regex const reg("date: (.*) (.*) (.*); author: (.*); state: (.*);(.*)"); while (ifs) { string line; getline(ifs, line); - LYXERR(Debug::LYXVC, line << "\n"); + LYXERR(Debug::LYXVC, line << '\n'); if (prefixIs(line, "date:")) { smatch sm; regex_match(line, sm, reg); @@ -826,7 +831,7 @@ string CVS::scanLogFile(FileName const & f, string & status) while (ifs) { string line; getline(ifs, line); - LYXERR(Debug::LYXVC, line << "\n"); + LYXERR(Debug::LYXVC, line << '\n'); if (!line.empty()) status += line + "; "; if (prefixIs(line, "C ")) { @@ -910,7 +915,7 @@ string CVS::checkOut() LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf); return string(); } - + int rc = update(File, tmpf); string log; string const res = scanLogFile(tmpf, log); @@ -922,7 +927,7 @@ string CVS::checkOut() from_local8bit(res))); rc = 0; } - + return rc ? string() : log.empty() ? "CVS: Proceeded" : "CVS: " + log; } @@ -944,7 +949,7 @@ string CVS::repoUpdate() LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf); return string(); } - + getDiff(Directory, tmpf); docstring res = tmpf.fileContents("UTF-8"); if (!res.empty()) { @@ -956,13 +961,13 @@ string CVS::repoUpdate() "or you will need to revert back to the repository version."), file); int ret = frontend::Alert::prompt(_("Changes detected"), text, 0, 1, _("&Continue"), _("&Abort"), _("View &Log ...")); - if (ret == 2 ) { + if (ret == 2) { dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + tmpf.absFileName())); ret = frontend::Alert::prompt(_("Changes detected"), text, 0, 1, _("&Continue"), _("&Abort")); hideDialogs("file", 0); } - if (ret == 1 ) + if (ret == 1) return string(); } @@ -1107,7 +1112,7 @@ bool CVS::prepareFileRevision(string const & revis, string & f) if (!VCS::makeRCSRevision(version_, rev)) return false; - TempFile tempfile("lyxvcrev_" + rev + "_"); + TempFile tempfile("lyxvcrev_" + rev + '_'); tempfile.setAutoRemove(false); FileName tmpf = tempfile.name(); if (tmpf.empty()) { @@ -1115,9 +1120,10 @@ bool CVS::prepareFileRevision(string const & revis, string & f) return false; } - doVCCommandWithOutput("cvs update -p -r" + rev + " " + doVCCommandWithOutput("cvs update -p -r" + rev + ' ' + getTarget(File), FileName(owner_->filePath()), tmpf); + tmpf.refresh(); if (tmpf.isFileEmpty()) return false; @@ -1401,8 +1407,8 @@ string SVN::scanLogFile(FileName const & f, string & status) while (ifs) { getline(ifs, line); - LYXERR(Debug::LYXVC, line << "\n"); - if (!line.empty()) + LYXERR(Debug::LYXVC, line << '\n'); + if (!line.empty()) status += line + "; "; if (prefixIs(line, "C ") || prefixIs(line, "CU ") || contains(line, "Commit failed")) { @@ -1429,7 +1435,7 @@ bool SVN::fileLock(bool lock, FileName const & tmpf, string &status) + " > " + quoteName(tmpf.toFilesystemEncoding()), FileName(owner_->filePath())); - // Lock error messages go unfortunately on stderr and are unreachible this way. + // Lock error messages go unfortunately on stderr and are unreachable this way. ifstream ifs(tmpf.toFilesystemEncoding().c_str()); string line; while (ifs) { @@ -1515,13 +1521,13 @@ string SVN::repoUpdate() "\n\nContinue?"), file); int ret = frontend::Alert::prompt(_("Changes detected"), text, 0, 1, _("&Yes"), _("&No"), _("View &Log ...")); - if (ret == 2 ) { + if (ret == 2) { dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + tmpf.absFileName())); ret = frontend::Alert::prompt(_("Changes detected"), text, 0, 1, _("&Yes"), _("&No")); hideDialogs("file", 0); } - if (ret == 1 ) + if (ret == 1) return string(); } @@ -1578,7 +1584,7 @@ string SVN::lockingToggle() return string(); frontend::Alert::warning(_("SVN File Locking"), - (locking ? _("Locking property unset.") : _("Locking property set.")) + "\n" + (locking ? _("Locking property unset.") : _("Locking property set.")) + '\n' + _("Do not forget to commit the locking property into the repository."), true); @@ -1771,7 +1777,7 @@ bool SVN::prepareFileRevision(string const & revis, string & f) } string revname = convert(rev); - TempFile tempfile("lyxvcrev_" + revname + "_"); + TempFile tempfile("lyxvcrev_" + revname + '_'); tempfile.setAutoRemove(false); FileName tmpf = tempfile.name(); if (tmpf.empty()) { @@ -1779,10 +1785,11 @@ bool SVN::prepareFileRevision(string const & revis, string & f) return false; } - doVCCommand("svn cat -r " + revname + " " + doVCCommand("svn cat -r " + revname + ' ' + quoteName(onlyFileName(owner_->absFileName())) + " > " + quoteName(tmpf.toFilesystemEncoding()), FileName(owner_->filePath())); + tmpf.refresh(); if (tmpf.isFileEmpty()) return false; @@ -1842,6 +1849,7 @@ FileName const GIT::findFile(FileName const & file) quoteName(fname) + " > " + quoteName(tmpf.toFilesystemEncoding()), file.onlyPath()); + tmpf.refresh(); bool found = !tmpf.isFileEmpty(); LYXERR(Debug::LYXVC, "GIT control: " << (found ? "enabled" : "disabled")); return found ? file : FileName(); @@ -2011,7 +2019,7 @@ string GIT::scanLogFile(FileName const & f, string & status) while (ifs) { getline(ifs, line); LYXERR(Debug::LYXVC, line << "\n"); - if (!line.empty()) + if (!line.empty()) status += line + "; "; if (prefixIs(line, "C ") || prefixIs(line, "CU ") || contains(line, "Commit failed")) { @@ -2218,9 +2226,9 @@ bool GIT::prepareFileRevision(string const & revis, string & f) else pointer = revis; - pointer += ":"; + pointer += ':'; - TempFile tempfile("lyxvcrev_" + revis + "_"); + TempFile tempfile("lyxvcrev_" + revis + '_'); tempfile.setAutoRemove(false); FileName tmpf = tempfile.name(); if (tmpf.empty()) { @@ -2232,6 +2240,7 @@ bool GIT::prepareFileRevision(string const & revis, string & f) + quoteName(onlyFileName(owner_->absFileName())) + " > " + quoteName(tmpf.toFilesystemEncoding()), FileName(owner_->filePath())); + tmpf.refresh(); if (tmpf.isFileEmpty()) return false; @@ -2248,7 +2257,7 @@ bool GIT::prepareFileRevisionEnabled() bool GIT::toggleReadOnlyEnabled() { - return false; + return true; }