X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVCBackend.cpp;h=ca603c9e1f8ed89c1c3ea9cd35ed045815485c41;hb=110445e3e2fe9beab1c38d2806cfd126dae967a9;hp=01d546d3d4637064cb7a4e232331ba5cd64a7ad5;hpb=7e5c42593e45424676b466db257e5c377329c2e4;p=lyx.git diff --git a/src/VCBackend.cpp b/src/VCBackend.cpp index 01d546d3d4..ca603c9e1f 100644 --- a/src/VCBackend.cpp +++ b/src/VCBackend.cpp @@ -61,7 +61,7 @@ int VCS::doVCCommand(string const & cmd, FileName const & path, bool reportError if (ret && reportError) { docstring rcsmsg; if (prefixIs(cmd, "ci ")) - rcsmsg = "\n" + _("Perhaps the RCS package is not installed on your system?"); + rcsmsg = "\n" + _("Check whether the GNU RCS package is installed on your system."); frontend::Alert::error(_("Revision control error."), bformat(_("Some problem occurred while running the command:\n" "'%1$s'.") + rcsmsg, @@ -107,7 +107,6 @@ bool VCS::makeRCSRevision(string const &version, string &revis) const FileName VCS::checkParentDirs(FileName const & start, std::string const & file) { - static FileName empty; FileName dirname = start.onlyPath(); do { FileName tocheck = FileName(addPathName(dirname.absFileName(), file)); @@ -117,7 +116,7 @@ FileName VCS::checkParentDirs(FileName const & start, std::string const & file) // this construct because of #8295 dirname = FileName(dirname.absFileName()).parentPath(); } while (!dirname.empty()); - return empty; + return FileName(); } @@ -162,8 +161,8 @@ bool RCS::retrieve(FileName const & file) { LYXERR(Debug::LYXVC, "LyXVC::RCS: retrieve.\n\t" << file); // The caller ensures that file does not exist, so no need to check that. - return doVCCommandCall("co -q -r " + quoteName(file.toFilesystemEncoding()), - FileName()) == 0; + int const ret = doVCCommandCall("co -q -r " + quoteName(file.toFilesystemEncoding())); + return ret == 0; } @@ -537,19 +536,25 @@ CVS::CVS(FileName const & m, Buffer * b) : VCS(b) FileName const CVS::findFile(FileName const & file) { - LYXERR(Debug::LYXVC, "LyXVC: Checking if " - << onlyFileName(file.absFileName()) << "is under cvs"); - // First we look for the CVS/Entries in the same dir where we have file. + // First we look for the CVS/Entries in the same dir + // where we have file. // Note that it is not necessary to search parent directories, since // there will be a CVS/Entries file in every subdirectory. FileName const entries(onlyPath(file.absFileName()) + "/CVS/Entries"); + string const tmpf = '/' + onlyFileName(file.absFileName()) + '/'; + LYXERR(Debug::LYXVC, "LyXVC: Checking if file is under cvs in `" << entries + << "' for `" << tmpf << '\''); if (entries.isReadableFile()) { - // We are in a CVS-managed directory - // See if the file is known to CVS - string const cmd = "cvs log " + quoteName(file.toFilesystemEncoding()); - int const ret = doVCCommandCall(cmd, file.onlyPath()); - if (ret == 0) - return entries; + // 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(entries.toFilesystemEncoding().c_str()); + string line; + while (getline(ifs, line)) { + LYXERR(Debug::LYXVC, "\tEntries: " << line); + if (contains(line, tmpf)) + return entries; + } } return FileName(); } @@ -1183,12 +1188,8 @@ void SVN::scanMaster() // vcstatus code is somewhat superflous, // until we want to implement read-only toggle for svn. vcstatus_ = NOLOCKING; - if (checkLockMode()) { - if (isLocked()) - vcstatus_ = LOCKED; - else - vcstatus_ = UNLOCKED; - } + if (checkLockMode()) + vcstatus_ = isLocked() ? LOCKED : UNLOCKED; } @@ -1831,13 +1832,23 @@ bool GIT::findFile(FileName const & file) return false; } - // Now we check if the file is known to git. + // Now we check the status of the file. + TempFile tempfile("lyxvcout"); + FileName tmpf = tempfile.name(); + if (tmpf.empty()) { + LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf); + return false; + } + string const fname = onlyFileName(file.absFileName()); LYXERR(Debug::LYXVC, "LyXVC: Checking if file is under git control for `" << fname << '\''); - int const ret = doVCCommandCall("git log " + quoteName(fname), + doVCCommandCall("git ls-files " + + quoteName(fname) + " > " + + quoteName(tmpf.toFilesystemEncoding()), file.onlyPath()); - bool const found = (ret == 0); + tmpf.refresh(); + bool found = !tmpf.isFileEmpty(); LYXERR(Debug::LYXVC, "GIT control: " << (found ? "enabled" : "disabled")); return found; }