X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxvc.C;h=039e4554356281cec5228e9dcd7a97f6502f6721;hb=530749439472bddf13d9f4ee74ee6184ef76e3f9;hp=5dff933476ccba05a8e623ef84f80be54f5ea890;hpb=37a1ffccb9c3e8c1ec6662a18bbd21d773e4a245;p=lyx.git diff --git a/src/lyxvc.C b/src/lyxvc.C index 5dff933476..039e455435 100644 --- a/src/lyxvc.C +++ b/src/lyxvc.C @@ -1,40 +1,50 @@ +/** + * \file lyxvc.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * \author Angus Leeming + * \author John Levon + * \author André Pönitz + * \author Allan Rae + * + * Full author contact details are available in file CREDITS. + */ + #include #include "lyxvc.h" #include "vc-backend.h" #include "debug.h" #include "buffer.h" -#include "BufferView.h" #include "gettext.h" -#include "funcrequest.h" #include "frontends/Alert.h" -#include "frontends/LyXView.h" #include "support/filetools.h" #include "support/lyxlib.h" -#include "BoostFormat.h" -#include +using lyx::support::bformat; +using lyx::support::IsFileReadable; +using lyx::support::MakeDisplayPath; +using lyx::support::tempName; using std::endl; +using std::string; using std::pair; -/* WARNING: Several of the vcs-> methods end up - * deleting this object via BufferView::reload() ! - */ LyXVC::LyXVC() { - vcs = 0; owner_ = 0; } +// for the sake of boost::scoped_ptr LyXVC::~LyXVC() -{ - delete vcs; -} +{} bool LyXVC::file_found_hook(string const & fn) @@ -42,13 +52,13 @@ bool LyXVC::file_found_hook(string const & fn) string found_file; // Check if file is under RCS if (!(found_file = RCS::find_file(fn)).empty()) { - vcs = new RCS(found_file); + vcs.reset(new RCS(found_file)); vcs->owner(owner_); return true; } // Check if file is under CVS if (!(found_file = CVS::find_file(fn)).empty()) { - vcs = new CVS(found_file, fn); + vcs.reset(new CVS(found_file, fn)); vcs->owner(owner_); return true; } @@ -74,40 +84,15 @@ void LyXVC::buffer(Buffer * buf) } -bool LyXVC::ensureClean() -{ - if (owner_->isClean()) - return true; - - string const file = MakeDisplayPath(owner_->fileName(), 30); -#if USE_BOOST_FORMAT - boost::format fmt(_("The document %1$s has unsaved changes.\n\nDo you want to save the document?")); - fmt % file; - string text = fmt.str(); -#else - string text = _("The document "); - text += file + _(" has unsaved changes.\n\nDo you want to save the document?"); -#endif - int const ret = Alert::prompt(_("Save changed document?"), - text, 0, _("&Save"), _("&Cancel")); - - if (ret == 0) { - vcs->owner()->getUser()->owner()->dispatch(FuncRequest(LFUN_MENUWRITE)); - } - - return owner_->isClean(); -} - - void LyXVC::registrer() { string const filename = owner_->fileName(); // there must be a file to save if (!IsFileReadable(filename)) { - Alert::alert(_("File not saved"), - _("You must save the file"), - _("before it can be registered.")); + Alert::error(_("Document not saved"), + _("You must save the document " + "before it can be registered.")); return; } @@ -120,24 +105,19 @@ void LyXVC::registrer() << "LyXVC: registering " << MakeDisplayPath(filename) << " with CVS" << endl; - vcs = new CVS(cvs_entries, filename); + vcs.reset(new CVS(cvs_entries, filename)); } else { lyxerr[Debug::LYXVC] << "LyXVC: registering " << MakeDisplayPath(filename) << " with RCS" << endl; - vcs = new RCS(filename); + vcs.reset(new RCS(filename)); } vcs->owner(owner_); } - // Maybe the save fails, or we answered "no". In both cases, - // the document will be dirty, and we abort. - if (!ensureClean()) - return; - lyxerr[Debug::LYXVC] << "LyXVC: registrer" << endl; pair tmp = Alert::askForText(_("LyX VC: Initial description"), @@ -145,8 +125,6 @@ void LyXVC::registrer() if (!tmp.first || tmp.second.empty()) { // should we insist on checking tmp.second.empty()? lyxerr[Debug::LYXVC] << "LyXVC: user cancelled" << endl; - Alert::alert(_("Info"), - _("This document has NOT been registered.")); return; } @@ -156,16 +134,6 @@ void LyXVC::registrer() void LyXVC::checkIn() { - // If the document is changed, we might want to save it - if (!vcs->owner()->isClean()) { - vcs->owner()->getUser()->owner() - ->dispatch(FuncRequest(LFUN_MENUWRITE)); - } - - // Maybe the save fails, or we answered "no". In both cases, - // the document will be dirty, and we abort. - if (!vcs->owner()->isClean()) - return; lyxerr[Debug::LYXVC] << "LyXVC: checkIn" << endl; pair tmp = Alert::askForText(_("LyX VC: Log Message")); @@ -183,8 +151,6 @@ void LyXVC::checkIn() void LyXVC::checkOut() { lyxerr[Debug::LYXVC] << "LyXVC: checkOut" << endl; - if (!ensureClean()) - return; vcs->checkOut(); } @@ -195,17 +161,11 @@ void LyXVC::revert() lyxerr[Debug::LYXVC] << "LyXVC: revert" << endl; string const file = MakeDisplayPath(owner_->fileName(), 20); -#if USE_BOOST_FORMAT - boost::format fmt(_("Reverting to the stored version of the document %1$s will " - "lose all current changes.\n\nDo you want to revert to the saved version?")); - fmt % file; - string text = fmt.str(); -#else - string text = _("Reverting to the stored version of the document "); - text += file + _(" will lose all current changes.\n\nDo you want to revert to the saved version?"); -#endif + string 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); int const ret = Alert::prompt(_("Revert to stored version of document?"), - text, 1, _("&Revert"), _("&Cancel")); + text, 0, 1, _("&Revert"), _("&Cancel")); if (ret == 0) vcs->revert(); @@ -257,12 +217,17 @@ string const & LyXVC::locker() const } -const string LyXVC::getLogFile() const +string const LyXVC::getLogFile() const { if (!vcs) return string(); - string tmpf = lyx::tempName(string(), "lyxvclog"); + string tmpf = tempName(string(), "lyxvclog"); + if (tmpf.empty()) { + lyxerr[Debug::LYXVC] << "Could not generate logfile " + << tmpf << endl; + return string(); + } lyxerr[Debug::LYXVC] << "Generating logfile " << tmpf << endl; vcs->getLog(tmpf); return tmpf;