VCS: Towards statusbar info.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@25976 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Pavel Sanda 2008-07-29 13:14:51 +00:00
parent d7a30a2ea1
commit aaa4169ece
5 changed files with 52 additions and 40 deletions

View 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;

View 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();
}

View 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();

View 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;
}

View 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_;