X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXVC.cpp;h=244dff156d166797c314d79d5a220a6a2aa3b272;hb=52c2fb81e971eb6a53a4ce433e728b6ad958e5e8;hp=93c44b3b0fdc98596dc654ea2b258598f3db9b81;hpb=4257aa5e7fbeb2e9aa06d7b9da5b3dbb841c3275;p=lyx.git diff --git a/src/LyXVC.cpp b/src/LyXVC.cpp index 93c44b3b0f..244dff156d 100644 --- a/src/LyXVC.cpp +++ b/src/LyXVC.cpp @@ -45,29 +45,39 @@ LyXVC::~LyXVC() {} +bool LyXVC::fileInVC(FileName const & fn) +{ + if (!RCS::findFile(fn).empty()) + return true; + if (!CVS::findFile(fn).empty()) + return true; + if (!SVN::findFile(fn).empty()) + return true; + return false; +} + + bool LyXVC::file_found_hook(FileName const & fn) { FileName found_file; // Check if file is under RCS if (!(found_file = RCS::findFile(fn)).empty()) { - vcs.reset(new RCS(found_file)); - vcs->owner(owner_); + vcs.reset(new RCS(found_file, owner_)); return true; } // Check if file is under CVS if (!(found_file = CVS::findFile(fn)).empty()) { - vcs.reset(new CVS(found_file, fn)); - vcs->owner(owner_); + vcs.reset(new CVS(found_file, 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_); + vcs.reset(new SVN(found_file, owner_)); return true; } // file is not under any VCS. + vcs.reset(0); return false; } @@ -77,10 +87,31 @@ bool LyXVC::file_not_found_hook(FileName const & fn) // 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; + bool foundRCS = !RCS::findFile(fn).empty(); + bool foundCVS = foundRCS ? false : !CVS::findFile(fn).empty(); + bool foundSVN = (foundRCS || foundCVS) ? false : !SVN::findFile(fn).empty(); + if (foundRCS || foundCVS || foundSVN) { + docstring const file = makeDisplayPath(fn.absFileName(), 20); + docstring const text = + bformat(_("Do you want to retrieve the document" + " %1$s from version control?"), file); + int const ret = Alert::prompt(_("Retrieve from version control?"), + text, 0, 1, _("&Retrieve"), _("&Cancel")); + + if (ret == 0) { + // Since the retrieve commands are implemented using + // more general update commands we need to ensure that + // we do not change an existing file by accident. + if (fn.exists()) + return false; + if (foundRCS) + return RCS::retrieve(fn); + else if (foundCVS) + return CVS::retrieve(fn); + else + return SVN::retrieve(fn); + } + } return false; } @@ -106,26 +137,24 @@ bool LyXVC::registrer() // it is very likely here that the vcs is not created yet... if (!vcs) { //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"); + 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)); + vcs.reset(new SVN(cvs_entries, owner_)); } else if (cvs_entries.isReadableFile()) { LYXERR(Debug::LYXVC, "LyXVC: registering " << to_utf8(filename.displayName()) << " with CVS"); - vcs.reset(new CVS(cvs_entries, filename)); + vcs.reset(new CVS(cvs_entries, owner_)); } else { LYXERR(Debug::LYXVC, "LyXVC: registering " << to_utf8(filename.displayName()) << " with RCS"); - vcs.reset(new RCS(FileName())); + vcs.reset(new RCS(FileName(), owner_)); } - - vcs->owner(owner_); } LYXERR(Debug::LYXVC, "LyXVC: registrer"); @@ -134,6 +163,7 @@ bool LyXVC::registrer() _("(no initial description)")); if (!ok) { LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); + vcs.reset(0); return false; } if (response.empty()) @@ -146,13 +176,24 @@ bool LyXVC::registrer() string LyXVC::checkIn() { LYXERR(Debug::LYXVC, "LyXVC: checkIn"); + if (!vcs) + return string(); + docstring empty(_("(no log message)")); docstring response; string log; - bool ok = Alert::askForText(response, _("LyX VC: Log Message")); + bool ok = true; + if (vcs->isCheckInWithConfirmation()) + ok = Alert::askForText(response, _("LyX VC: Log Message")); if (ok) { if (response.empty()) - response = _("(no log message)"); + response = empty; + //shell collisions + response = subst(response, from_utf8("\""), from_utf8("\\\"")); log = vcs->checkIn(to_utf8(response)); + + // Reserve empty string for cancel button + if (log.empty()) + log = to_utf8(empty); } else { LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); } @@ -162,8 +203,11 @@ string LyXVC::checkIn() string LyXVC::checkOut() { + if (!vcs) + return string(); //RCS allows checkOut only in ReadOnly mode - if (vcs->toggleReadOnlyEnabled() && !owner_->isReadonly()) return string(); + if (vcs->toggleReadOnlyEnabled() && !owner_->isReadonly()) + return string(); LYXERR(Debug::LYXVC, "LyXVC: checkOut"); return vcs->checkOut(); @@ -173,6 +217,8 @@ string LyXVC::checkOut() string LyXVC::repoUpdate() { LYXERR(Debug::LYXVC, "LyXVC: repoUpdate"); + if (!vcs) + return string(); return vcs->repoUpdate(); } @@ -180,34 +226,43 @@ string LyXVC::repoUpdate() string LyXVC::lockingToggle() { LYXERR(Debug::LYXVC, "LyXVC: toggle locking property"); + if (!vcs) + return string(); return vcs->lockingToggle(); } -void LyXVC::revert() +bool LyXVC::revert() { LYXERR(Debug::LYXVC, "LyXVC: revert"); + if (!vcs) + return false; 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 older version?"), file); - int const ret = Alert::prompt(_("Revert to stored version of document?"), - text, 0, 1, _("&Revert"), _("&Cancel")); + int ret = 0; + if (vcs->isRevertWithConfirmation()) + ret = Alert::prompt(_("Revert to stored version of document?"), + text, 0, 1, _("&Revert"), _("&Cancel")); - if (ret == 0) - vcs->revert(); + return ret == 0 && vcs->revert(); } void LyXVC::undoLast() { + if (!vcs) + return; vcs->undoLast(); } void LyXVC::toggleReadOnly() { + if (!vcs) + return; if (!vcs->toggleReadOnlyEnabled()) return; @@ -226,7 +281,7 @@ void LyXVC::toggleReadOnly() } -bool LyXVC::inUse() +bool LyXVC::inUse() const { if (vcs) return true; @@ -234,21 +289,19 @@ bool LyXVC::inUse() } -//string const & LyXVC::version() const -//{ -// return vcs->version(); -//} - - string const LyXVC::versionString() const { + if (!vcs) + return string(); return vcs->versionString(); } -string const & LyXVC::locker() const +bool LyXVC::locking() const { - return vcs->locker(); + if (!vcs) + return false; + return vcs->status() != VCS::NOLOCKING; } @@ -264,32 +317,58 @@ string const LyXVC::getLogFile() const } LYXERR(Debug::LYXVC, "Generating logfile " << tmpf); vcs->getLog(tmpf); - return tmpf.absFilename(); + return tmpf.absFileName(); +} + + +string LyXVC::revisionInfo(RevisionInfo const info) const +{ + if (!vcs) + return string(); + + return vcs->revisionInfo(info); } -bool LyXVC::checkOutEnabled() +bool LyXVC::checkOutEnabled() const { return vcs && vcs->checkOutEnabled(); } -bool LyXVC::checkInEnabled() +bool LyXVC::checkInEnabled() const { return vcs && vcs->checkInEnabled(); } -bool LyXVC::lockingToggleEnabled() +bool LyXVC::lockingToggleEnabled() const { return vcs && vcs->lockingToggleEnabled(); } -bool LyXVC::undoLastEnabled() +bool LyXVC::undoLastEnabled() const { return vcs && vcs->undoLastEnabled(); } +bool LyXVC::repoUpdateEnabled() const +{ + return vcs && vcs->repoUpdateEnabled(); +} + + +bool LyXVC::prepareFileRevision(string const & rev, std::string & f) +{ + return vcs && vcs->prepareFileRevision(rev, f); +} + + +bool LyXVC::prepareFileRevisionEnabled() +{ + return vcs && vcs->prepareFileRevisionEnabled(); +} + } // namespace lyx