]> git.lyx.org Git - features.git/commitdiff
VCS: Towards statusbar info.
authorPavel Sanda <sanda@lyx.org>
Tue, 29 Jul 2008 13:14:51 +0000 (13:14 +0000)
committerPavel Sanda <sanda@lyx.org>
Tue, 29 Jul 2008 13:14:51 +0000 (13:14 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@25976 a592a061-630c-0410-9148-cb99ea01b6c8

src/LyXFunc.cpp
src/LyXVC.cpp
src/LyXVC.h
src/VCBackend.cpp
src/VCBackend.h

index a869903c284ad08f1c2b49904ad5df3b270ef09e..6e9aa55af5a9329ee4e0f7edb13a839e848df3cc 100644 (file)
@@ -1052,7 +1052,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                                break;
                        if (lyx_view_->buffer()->lyxvc().inUse()
                                        && !lyx_view_->buffer()->isReadonly()) {
-                               lyx_view_->buffer()->lyxvc().checkIn();
+                               setMessage(from_utf8(lyx_view_->buffer()->lyxvc().checkIn()));
                                reloadBuffer();
                        }
                        break;
@@ -1062,7 +1062,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
                        if (!ensureBufferClean(view()))
                                break;
                        if (lyx_view_->buffer()->lyxvc().inUse()) {
-                               lyx_view_->buffer()->lyxvc().checkOut();
+                               setMessage(from_utf8(lyx_view_->buffer()->lyxvc().checkOut()));
                                reloadBuffer();
                        }
                        break;
index 2b51b4291b908351c2ec6cfcab1cb57b5d7609f5..5b510ae0f3ac07c7176c5dc3ca602c074aabf893 100644 (file)
@@ -142,28 +142,30 @@ void LyXVC::registrer()
 }
 
 
-void LyXVC::checkIn()
+string LyXVC::checkIn()
 {
        LYXERR(Debug::LYXVC, "LyXVC: checkIn");
        docstring response;
+       string log;
        bool ok = Alert::askForText(response, _("LyX VC: Log Message"));
        if (ok) {
                if (response.empty())
                        response = _("(no log message)");
-               vcs->checkIn(to_utf8(response));
+               log = vcs->checkIn(to_utf8(response));
        } else {
                LYXERR(Debug::LYXVC, "LyXVC: user cancelled");
        }
+       return log;
 }
 
 
-void LyXVC::checkOut()
+string LyXVC::checkOut()
 {
        //RCS allows checkOut only in ReadOnly mode
-       if (vcs->toggleReadOnlyEnabled() && !owner_->isReadonly()) return;
+       if (vcs->toggleReadOnlyEnabled() && !owner_->isReadonly()) return string();
 
        LYXERR(Debug::LYXVC, "LyXVC: checkOut");
-       vcs->checkOut();
+       return vcs->checkOut();
 }
 
 
index 86d7dcc370bf4c5c1367b81a4dd6dfba636c48fc..79490ec89179fe8b156582aef4ddbb827019dd8a 100644 (file)
@@ -67,13 +67,13 @@ public:
        /// Register the document as an VC file.
        void registrer();
 
-       /// Unlock and commit changes.
-       void checkIn();
+       /// Unlock and commit changes. Returns log.
+       std::string checkIn();
        /// Does the current VC supports this operation?
        bool checkInEnabled();
 
-       /// Lock and prepare to edit document.
-       void checkOut();
+       /// Lock/update and prepare to edit document. Returns log.
+       std::string checkOut();
        /// Does the current VC supports this operation?
        bool checkOutEnabled();
 
index 8dcef4332f7d822772d4c3dd5dcd86dd371e4023..3c1185f92cb6326c029f00a62f60ca479ef886a8 100644 (file)
@@ -170,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()
@@ -182,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";
 }
 
 
@@ -327,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";
 }
 
 
@@ -341,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();
 }
 
 
@@ -456,12 +460,12 @@ 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 + "\" "
@@ -469,13 +473,15 @@ void SVN::checkIn(string const & msg)
                    + " 2> " + 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;
 }
 
 
@@ -487,7 +493,7 @@ bool SVN::checkInEnabled()
 // FIXME Correctly return code should be checked instead of this.
 // This would need another solution than just plain startscript.
 // Hint from Andre': QProcess::readAllStandardError()...
-string SVN::scanLogFile(FileName const & f)
+string SVN::scanLogFile(FileName const & f, string & status)
 {
        ifstream ifs(f.toFilesystemEncoding().c_str());
        string line;
@@ -495,28 +501,31 @@ string SVN::scanLogFile(FileName const & f)
        while (ifs) {
                getline(ifs, line);
                lyxerr << line << "\n";
-               if (prefixIs(line, "C "))
-                       return line;
-               if (contains(line, "Commit failed"))
+               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()) {
                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"
@@ -524,6 +533,7 @@ void SVN::checkOut()
                                "After pressing OK, LyX will try to reopen resolved document."),
                        from_ascii(res)));
        tmpf.erase();
+       return "SVN: " + log;
 }
 
 
index 3f7b6ffa6453c26dc1ae0708d896dd354b20a7ff..ab83535ad7f65fd21847ae564d94502293c9590c 100644 (file)
@@ -34,12 +34,12 @@ public:
 
        /// register a file for version control
        virtual void registrer(std::string const & msg) = 0;
-       /// check in the current revision
-       virtual void checkIn(std::string const & msg) = 0;
+       /// check in the current revision, returns log
+       virtual std::string checkIn(std::string const & msg) = 0;
        // can be this operation processed in the current RCS?
        virtual bool checkInEnabled() = 0;
-       /// check out for editing
-       virtual void checkOut() = 0;
+       /// check out for editing, returns log
+       virtual std::string checkOut() = 0;
        // can be this operation processed in the current RCS?
        virtual bool checkOutEnabled() = 0;
        /// revert current edits
@@ -118,11 +118,11 @@ public:
 
        virtual void registrer(std::string const & msg);
 
-       virtual void checkIn(std::string const & msg);
+       virtual std::string checkIn(std::string const & msg);
 
        virtual bool checkInEnabled();
 
-       virtual void checkOut();
+       virtual std::string checkOut();
 
        virtual bool checkOutEnabled();
 
@@ -157,11 +157,11 @@ public:
 
        virtual void registrer(std::string const & msg);
 
-       virtual void checkIn(std::string const & msg);
+       virtual std::string checkIn(std::string const & msg);
 
        virtual bool checkInEnabled();
 
-       virtual void checkOut();
+       virtual std::string checkOut();
 
        virtual bool checkOutEnabled();
 
@@ -199,11 +199,11 @@ public:
 
        virtual void registrer(std::string const & msg);
 
-       virtual void checkIn(std::string const & msg);
+       virtual std::string checkIn(std::string const & msg);
 
        virtual bool checkInEnabled();
 
-       virtual void checkOut();
+       virtual std::string checkOut();
 
        virtual bool checkOutEnabled();
 
@@ -223,8 +223,8 @@ public:
 
 protected:
        virtual void scanMaster();
-       /// Check for error messages in svn output.
-       std::string scanLogFile(support::FileName const & f);
+       /// Check for messages in svn output. Returns error.
+       std::string scanLogFile(support::FileName const & f, std::string & status);
 
 private:
        support::FileName file_;