X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXVC.cpp;h=a8455546642642b632bd8bc0a1319f1837e08fbc;hb=834bfe5e2143179ac3ccb6dd9a0618d349bf6958;hp=4518a8076c9bf880cec5acaec2276cc02bd7bb58;hpb=4020357dd20534adf4c5c0b557445a4924e9d508;p=lyx.git diff --git a/src/LyXVC.cpp b/src/LyXVC.cpp index 4518a8076c..a845554664 100644 --- a/src/LyXVC.cpp +++ b/src/LyXVC.cpp @@ -3,11 +3,11 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes * \author Angus Leeming * \author John Levon - * \author André Pönitz + * \author André Pönitz * \author Allan Rae * * Full author contact details are available in file CREDITS. @@ -17,15 +17,14 @@ #include "LyXVC.h" #include "VCBackend.h" -#include "support/debug.h" #include "Buffer.h" -#include "support/gettext.h" #include "frontends/alert.h" +#include "support/debug.h" #include "support/filetools.h" +#include "support/gettext.h" #include "support/lstrings.h" -#include "support/lyxlib.h" using namespace std; using namespace lyx::support; @@ -61,6 +60,13 @@ bool LyXVC::file_found_hook(FileName const & fn) vcs->owner(owner_); return true; } + // Check if file is under SVN + if (!(found_file = SVN::findFile(fn)).empty()) { + vcs.reset(new SVN(found_file, fn)); + vcs->owner(owner_); + return true; + } + // file is not under any VCS. return false; } @@ -68,11 +74,13 @@ bool LyXVC::file_found_hook(FileName const & fn) bool LyXVC::file_not_found_hook(FileName const & fn) { - // Check if file is under RCS + // Check if file is under RCS. + // This happens if we are trying to load non existent + // file on disk, but existent in ,v version. + // Seems there is no reasonable scenario for adding implementation + // of retrieve for cvs or svn. if (!RCS::findFile(fn).empty()) return true; - if (!CVS::findFile(fn).empty()) - return true; return false; } @@ -83,7 +91,7 @@ void LyXVC::setBuffer(Buffer * buf) } -void LyXVC::registrer() +bool LyXVC::registrer() { FileName const filename = owner_->fileName(); @@ -92,14 +100,21 @@ void LyXVC::registrer() Alert::error(_("Document not saved"), _("You must save the document " "before it can be registered.")); - return; + return false; } // it is very likely here that the vcs is not created yet... if (!vcs) { - FileName const cvs_entries(makeAbsPath("CVS/Entries")); + //check in the root directory of the document + FileName const cvs_entries(onlyPath(filename.absFilename()) + "/CVS/Entries"); + FileName const svn_entries(onlyPath(filename.absFilename()) + "/.svn/entries"); + + if (svn_entries.isReadableFile()) { + LYXERR(Debug::LYXVC, "LyXVC: registering " + << to_utf8(filename.displayName()) << " with SVN"); + vcs.reset(new SVN(cvs_entries, filename)); - if (cvs_entries.isReadableFile()) { + } else if (cvs_entries.isReadableFile()) { LYXERR(Debug::LYXVC, "LyXVC: registering " << to_utf8(filename.displayName()) << " with CVS"); vcs.reset(new CVS(cvs_entries, filename)); @@ -107,7 +122,7 @@ void LyXVC::registrer() } else { LYXERR(Debug::LYXVC, "LyXVC: registering " << to_utf8(filename.displayName()) << " with RCS"); - vcs.reset(new RCS(filename)); + vcs.reset(new RCS(FileName())); } vcs->owner(owner_); @@ -117,35 +132,48 @@ void LyXVC::registrer() docstring response; bool ok = Alert::askForText(response, _("LyX VC: Initial description"), _("(no initial description)")); - if (!ok || response.empty()) { - // should we insist on checking response.empty()? + if (!ok) { LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); - return; + return false; } - + if (response.empty()) + response = _("(no initial description)"); vcs->registrer(to_utf8(response)); + return true; } -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 string(); + LYXERR(Debug::LYXVC, "LyXVC: checkOut"); - vcs->checkOut(); + return vcs->checkOut(); +} + + +string LyXVC::lockingToggle() +{ + LYXERR(Debug::LYXVC, "LyXVC: toggle locking property"); + return vcs->lockingToggle(); } @@ -155,8 +183,8 @@ void LyXVC::revert() docstring const file = owner_->fileName().displayName(20); docstring text = bformat(_("Reverting to the stored version of the " - "document %1$s will lose all current changes.\n\n" - "Do you want to revert to the saved version?"), file); + "document %1$s will lose all current changes.\n\n" + "Do you want to revert to the older version?"), file); int const ret = Alert::prompt(_("Revert to stored version of document?"), text, 0, 1, _("&Revert"), _("&Cancel")); @@ -173,6 +201,9 @@ void LyXVC::undoLast() void LyXVC::toggleReadOnly() { + if (!vcs->toggleReadOnlyEnabled()) + return; + switch (vcs->status()) { case VCS::UNLOCKED: LYXERR(Debug::LYXVC, "LyXVC: toggle to locked"); @@ -182,6 +213,8 @@ void LyXVC::toggleReadOnly() LYXERR(Debug::LYXVC, "LyXVC: toggle to unlocked"); checkIn(); break; + case VCS::NOLOCKING: + break; } } @@ -217,7 +250,7 @@ string const LyXVC::getLogFile() const if (!vcs) return string(); - FileName const tmpf = FileName::tempName(FileName(), "lyxvclog"); + FileName const tmpf = FileName::tempName("lyxvclog"); if (tmpf.empty()) { LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf); return string(); @@ -228,4 +261,28 @@ string const LyXVC::getLogFile() const } +bool LyXVC::checkOutEnabled() +{ + return vcs && vcs->checkOutEnabled(); +} + + +bool LyXVC::checkInEnabled() +{ + return vcs && vcs->checkInEnabled(); +} + + +bool LyXVC::lockingToggleEnabled() +{ + return vcs && vcs->lockingToggleEnabled(); +} + + +bool LyXVC::undoLastEnabled() +{ + return vcs && vcs->undoLastEnabled(); +} + + } // namespace lyx