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,
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();
}
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 -n 0 " + 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;
}