]> git.lyx.org Git - lyx.git/blobdiff - src/VCBackend.cpp
Change the "empty layout" to the "plain layout", to try to avoid confusion.
[lyx.git] / src / VCBackend.cpp
index ff816a2112d03aba88a5e03c505854d2e026f2c0..d05e4428ac2e35b244078e0455f6548b391b6d9f 100644 (file)
@@ -36,12 +36,18 @@ using boost::smatch;
 namespace lyx {
 
 
-int VCS::doVCCommand(string const & cmd, FileName const & path)
-{
-       LYXERR(Debug::LYXVC, "doVCCommand: " << cmd);
+int VCS::doVCCommandCall(string const & cmd, FileName const & path){
+       LYXERR(Debug::LYXVC, "doVCCommandCall: " << cmd);
        Systemcall one;
        support::PathChanger p(path);
-       int const ret = one.startscript(Systemcall::Wait, cmd);
+       return one.startscript(Systemcall::Wait, cmd);
+}
+
+int VCS::doVCCommand(string const & cmd, FileName const & path)
+{
+       owner_->setBusy(true);
+       int const ret = doVCCommandCall(cmd, path);
+       owner_->setBusy(false);
        if (ret)
                frontend::Alert::error(_("Revision control error."),
                        bformat(_("Some problem occured while running the command:\n"
@@ -89,7 +95,7 @@ FileName const RCS::findFile(FileName const & file)
 void RCS::retrieve(FileName const & file)
 {
        LYXERR(Debug::LYXVC, "LyXVC::RCS: retrieve.\n\t" << file);
-       VCS::doVCCommand("co -q -r " + quoteName(file.toFilesystemEncoding()),
+       doVCCommandCall("co -q -r " + quoteName(file.toFilesystemEncoding()),
                         FileName());
 }
 
@@ -164,11 +170,12 @@ void RCS::registrer(string const & msg)
 }
 
 
-void RCS::checkIn(string const & msg)
+string RCS::checkIn(string const & msg)
 {
-       doVCCommand("ci -q -u -m\"" + msg + "\" "
+       int ret = doVCCommand("ci -q -u -m\"" + msg + "\" "
                    + quoteName(onlyFilename(owner_->absFileName())),
                    FileName(owner_->filePath()));
+       return ret ? string() : "RCS: Proceeded";
 }
 
 bool RCS::checkInEnabled()
@@ -176,11 +183,12 @@ bool RCS::checkInEnabled()
        return owner_ && !owner_->isReadonly();
 }
 
-void RCS::checkOut()
+string RCS::checkOut()
 {
        owner_->markClean();
-       doVCCommand("co -q -l " + quoteName(onlyFilename(owner_->absFileName())),
+       int ret = doVCCommand("co -q -l " + quoteName(onlyFilename(owner_->absFileName())),
                    FileName(owner_->filePath()));
+       return ret ? string() : "RCS: Proceeded";
 }
 
 
@@ -321,11 +329,12 @@ void CVS::registrer(string const & msg)
 }
 
 
-void CVS::checkIn(string const & msg)
+string CVS::checkIn(string const & msg)
 {
-       doVCCommand("cvs -q commit -m \"" + msg + "\" "
+       int ret = doVCCommand("cvs -q commit -m \"" + msg + "\" "
                    + quoteName(onlyFilename(owner_->absFileName())),
                    FileName(owner_->filePath()));
+       return ret ? string() : "CVS: Proceeded";
 }
 
 
@@ -335,12 +344,13 @@ bool CVS::checkInEnabled()
 }
 
 
-void CVS::checkOut()
+string CVS::checkOut()
 {
        // cvs update or perhaps for cvs this should be a noop
        // we need to detect conflict (eg "C" in output)
        // before we can do this.
        lyxerr << "Sorry not implemented." << endl;
+       return string();
 }
 
 
@@ -450,26 +460,28 @@ void SVN::registrer(string const & msg)
 }
 
 
-void SVN::checkIn(string const & msg)
+string SVN::checkIn(string const & msg)
 {
        FileName tmpf = FileName::tempName("lyxvcout");
        if (tmpf.empty()){
                LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
-               return;
+               return N_("Error: Could not generate logfile.");
        }
 
        doVCCommand("svn commit -m \"" + msg + "\" "
                    + quoteName(onlyFilename(owner_->absFileName()))
-                   + " 2> " + tmpf.toFilesystemEncoding(),
+                   + " > " + tmpf.toFilesystemEncoding(),
                    FileName(owner_->filePath()));
 
-       string res = scanLogFile(tmpf);
+       string log;
+       string res = scanLogFile(tmpf, log);
        if (!res.empty())
                frontend::Alert::error(_("Revision control error."),
                                _("Error when commiting to repository.\n"
                                "You have to manually resolve the problem.\n"
                                "After pressing OK, LyX will reopen the document."));
        tmpf.erase();
+       return "SVN: " + log;
 }
 
 
@@ -480,36 +492,40 @@ bool SVN::checkInEnabled()
 
 // FIXME Correctly return code should be checked instead of this.
 // This would need another solution than just plain startscript.
-string SVN::scanLogFile(FileName const & f)
+// Hint from Andre': QProcess::readAllStandardError()...
+string SVN::scanLogFile(FileName const & f, string & status)
 {
        ifstream ifs(f.toFilesystemEncoding().c_str());
        string line;
 
-       while (ifs){
-               getline(ifs,line);
-               lyxerr<<line<<"\n";
-               if (prefixIs(line, "C "))
-                       return line;
-               if (contains(line, "Commit failed"))
+       while (ifs) {
+               getline(ifs, line);
+               lyxerr << line << "\n";
+               if (!line.empty()) status += line + "; ";
+               if (prefixIs(line, "C ") || contains(line, "Commit failed")) {
+                       ifs.close();
                        return line;
+               }
        }
+       ifs.close();
        return string();
 }
 
 
-void SVN::checkOut()
+string SVN::checkOut()
 {
        FileName tmpf = FileName::tempName("lyxvcout");
-       if (tmpf.empty()){
+       if (tmpf.empty()) {
                LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf);
-               return;
+               return N_("Error: Could not generate logfile.");
        }
 
        doVCCommand("svn update " + quoteName(onlyFilename(owner_->absFileName()))
                    + " > " + tmpf.toFilesystemEncoding(),
                    FileName(owner_->filePath()));
 
-       string res = scanLogFile(tmpf);
+       string log;
+       string res = scanLogFile(tmpf, log);
        if (!res.empty())
                frontend::Alert::error(_("Revision control error."),
                        bformat(_("Error when updating from repository.\n"
@@ -517,6 +533,7 @@ void SVN::checkOut()
                                "After pressing OK, LyX will try to reopen resolved document."),
                        from_ascii(res)));
        tmpf.erase();
+       return "SVN: " + log;
 }