X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXVC.cpp;h=7e7e770b10791fc9eae0c526f1c35d1db33619e3;hb=01da93521d573ca5064ab961ec7062b16bec880a;hp=97a0554e8c4212a73acb648f773541dc0311219d;hpb=0cb85e920666e8a47cb74ce96711fdcae8168862;p=lyx.git diff --git a/src/LyXVC.cpp b/src/LyXVC.cpp index 97a0554e8c..7e7e770b10 100644 --- a/src/LyXVC.cpp +++ b/src/LyXVC.cpp @@ -37,18 +37,18 @@ namespace Alert = frontend::Alert; LyXVC::LyXVC() { - owner_ = 0; + owner_ = nullptr; } docstring LyXVC::vcstatus() const { - if (!vcs) + if (!vcs_) return docstring(); if (locking()) - return bformat(_("%1$s lock"), from_ascii(vcs->vcname())); + return bformat(_("%1$s lock"), from_ascii(vcs_->vcname())); else - return from_ascii(vcs->vcname()); + return from_ascii(vcs_->vcname()); } @@ -58,9 +58,9 @@ bool LyXVC::fileInVC(FileName const & fn) return true; if (!CVS::findFile(fn).empty()) return true; - if (!SVN::findFile(fn).empty()) + if (SVN::findFile(fn)) return true; - if (!GIT::findFile(fn).empty()) + if (GIT::findFile(fn)) return true; return false; } @@ -71,40 +71,40 @@ 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, 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, 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, owner_)); + if (SVN::findFile(fn)) { + vcs_.reset(new SVN(owner_)); return true; } // Check if file is under GIT - if (!(found_file = GIT::findFile(fn)).empty()) { - vcs.reset(new GIT(found_file, owner_)); + if (GIT::findFile(fn)) { + vcs_.reset(new GIT(owner_)); return true; } // file is not under any VCS. - vcs.reset(0); + vcs_.reset(nullptr); return false; } 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. + // Check if file is under version control. + // This happens if we are trying to load file that does not exist. + // It may yet exist in the repository and so could be checked out. bool foundRCS = !RCS::findFile(fn).empty(); bool foundCVS = foundRCS ? false : !CVS::findFile(fn).empty(); - bool foundSVN = (foundRCS || foundCVS) ? false : !SVN::findFile(fn).empty(); - bool foundGIT = (foundRCS || foundCVS || foundSVN) ? false : !GIT::findFile(fn).empty(); + bool foundSVN = (foundRCS || foundCVS) ? false : SVN::findFile(fn); + bool foundGIT = (foundRCS || foundCVS || foundSVN) ? false : GIT::findFile(fn); if (foundRCS || foundCVS || foundSVN || foundGIT) { docstring const file = makeDisplayPath(fn.absFileName(), 20); docstring const text = @@ -152,31 +152,37 @@ 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 git_index(onlyPath(filename.absFileName()) + "/.git/index"); + if (!vcs_) { + FileName found = VCS::checkParentDirs(filename, ".git/index"); - if (git_index.isReadableFile()) { + if (!found.empty()) { LYXERR(Debug::LYXVC, "LyXVC: registering " << to_utf8(filename.displayName()) << " with GIT"); - vcs.reset(new GIT(git_index, owner_)); - - } else if (svn_entries.isReadableFile()) { - LYXERR(Debug::LYXVC, "LyXVC: registering " - << to_utf8(filename.displayName()) << " with SVN"); - vcs.reset(new SVN(svn_entries, owner_)); - - } else if (cvs_entries.isReadableFile()) { - LYXERR(Debug::LYXVC, "LyXVC: registering " - << to_utf8(filename.displayName()) << " with CVS"); - vcs.reset(new CVS(cvs_entries, owner_)); + vcs_.reset(new GIT(owner_)); } else { - LYXERR(Debug::LYXVC, "LyXVC: registering " - << to_utf8(filename.displayName()) << " with RCS"); - vcs.reset(new RCS(FileName(), owner_)); + found = VCS::checkParentDirs(filename, ".svn/entries"); + if (!found.empty()) { + LYXERR(Debug::LYXVC, "LyXVC: registering " + << to_utf8(filename.displayName()) << " with SVN"); + vcs_.reset(new SVN(owner_)); + + } else { + // We only need to check the current directory, since CVS meta-data + // is in every sub-directory. + FileName const cvs_entries(onlyPath(filename.absFileName()) + "/CVS/Entries"); + if (cvs_entries.isReadableFile()) { + LYXERR(Debug::LYXVC, "LyXVC: registering " + << to_utf8(filename.displayName()) << " with CVS"); + vcs_.reset(new CVS(cvs_entries, owner_)); + + } else { + // If all else fails, use RCS + LYXERR(Debug::LYXVC, "LyXVC: registering " + << to_utf8(filename.displayName()) << " with RCS"); + vcs_.reset(new RCS(FileName(), owner_)); + } + } } } @@ -186,12 +192,12 @@ bool LyXVC::registrer() _("(no initial description)")); if (!ok) { LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); - vcs.reset(0); + vcs_.reset(nullptr); return false; } if (response.empty()) response = _("(no initial description)"); - vcs->registrer(to_utf8(response)); + vcs_->registrer(to_utf8(response)); return true; } @@ -199,7 +205,7 @@ bool LyXVC::registrer() string LyXVC::rename(FileName const & fn) { LYXERR(Debug::LYXVC, "LyXVC: rename"); - if (!vcs || fileInVC(fn)) + if (!vcs_ || fileInVC(fn)) return string(); docstring response; bool ok = Alert::askForText(response, _("LyX VC: Log message"), @@ -210,7 +216,7 @@ string LyXVC::rename(FileName const & fn) } if (response.empty()) response = _("(no log message)"); - string ret = vcs->rename(fn, to_utf8(response)); + string ret = vcs_->rename(fn, to_utf8(response)); return ret; } @@ -218,7 +224,7 @@ string LyXVC::rename(FileName const & fn) string LyXVC::copy(FileName const & fn) { LYXERR(Debug::LYXVC, "LyXVC: copy"); - if (!vcs || fileInVC(fn)) + if (!vcs_ || fileInVC(fn)) return string(); docstring response; bool ok = Alert::askForText(response, _("LyX VC: Log message"), @@ -229,7 +235,7 @@ string LyXVC::copy(FileName const & fn) } if (response.empty()) response = _("(no log message)"); - string ret = vcs->copy(fn, to_utf8(response)); + string ret = vcs_->copy(fn, to_utf8(response)); return ret; } @@ -237,19 +243,19 @@ string LyXVC::copy(FileName const & fn) LyXVC::CommandResult LyXVC::checkIn(string & log) { LYXERR(Debug::LYXVC, "LyXVC: checkIn"); - if (!vcs) + if (!vcs_) return ErrorBefore; docstring empty(_("(no log message)")); docstring response; bool ok = true; - if (vcs->isCheckInWithConfirmation()) + if (vcs_->isCheckInWithConfirmation()) ok = Alert::askForText(response, _("LyX VC: Log Message")); if (ok) { if (response.empty()) response = empty; //shell collisions response = subst(response, from_ascii("\""), from_ascii("\\\"")); - return vcs->checkIn(to_utf8(response), log); + return vcs_->checkIn(to_utf8(response), log); } else { LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); return Cancelled; @@ -259,39 +265,39 @@ LyXVC::CommandResult LyXVC::checkIn(string & log) string LyXVC::checkOut() { - if (!vcs) + if (!vcs_) return string(); //RCS allows checkOut only in ReadOnly mode - if (vcs->toggleReadOnlyEnabled() && !owner_->hasReadonlyFlag()) + if (vcs_->toggleReadOnlyEnabled() && !owner_->hasReadonlyFlag()) return string(); LYXERR(Debug::LYXVC, "LyXVC: checkOut"); - return vcs->checkOut(); + return vcs_->checkOut(); } string LyXVC::repoUpdate() { LYXERR(Debug::LYXVC, "LyXVC: repoUpdate"); - if (!vcs) + if (!vcs_) return string(); - return vcs->repoUpdate(); + return vcs_->repoUpdate(); } string LyXVC::lockingToggle() { LYXERR(Debug::LYXVC, "LyXVC: toggle locking property"); - if (!vcs) + if (!vcs_) return string(); - return vcs->lockingToggle(); + return vcs_->lockingToggle(); } bool LyXVC::revert() { LYXERR(Debug::LYXVC, "LyXVC: revert"); - if (!vcs) + if (!vcs_) return false; docstring const file = owner_->fileName().displayName(20); @@ -299,30 +305,30 @@ bool LyXVC::revert() "document %1$s will lose all current changes.\n\n" "Do you want to revert to the older version?"), file); int ret = 0; - if (vcs->isRevertWithConfirmation()) + if (vcs_->isRevertWithConfirmation()) ret = Alert::prompt(_("Revert to stored version of document?"), text, 0, 1, _("&Revert"), _("&Cancel")); - return ret == 0 && vcs->revert(); + return ret == 0 && vcs_->revert(); } void LyXVC::undoLast() { - if (!vcs) + if (!vcs_) return; - vcs->undoLast(); + vcs_->undoLast(); } string LyXVC::toggleReadOnly() { - if (!vcs) + if (!vcs_) return string(); - if (!vcs->toggleReadOnlyEnabled()) + if (!vcs_->toggleReadOnlyEnabled()) return string(); - switch (vcs->status()) { + switch (vcs_->status()) { case VCS::UNLOCKED: LYXERR(Debug::LYXVC, "LyXVC: toggle to locked"); return checkOut(); @@ -334,7 +340,7 @@ string LyXVC::toggleReadOnly() return log; } case VCS::NOLOCKING: - Buffer * b = vcs->owner(); + Buffer * b = vcs_->owner(); bool const newstate = !b->hasReadonlyFlag(); string result = "LyXVC: toggle to "; result += (newstate ? "readonly" : "readwrite"); @@ -348,31 +354,29 @@ string LyXVC::toggleReadOnly() bool LyXVC::inUse() const { - if (vcs) - return true; - return false; + return vcs_ != nullptr; } string const LyXVC::versionString() const { - if (!vcs) + if (!vcs_) return string(); - return vcs->versionString(); + return vcs_->versionString(); } bool LyXVC::locking() const { - if (!vcs) + if (!vcs_) return false; - return vcs->status() != VCS::NOLOCKING; + return vcs_->status() != VCS::NOLOCKING; } string const LyXVC::getLogFile() const { - if (!vcs) + if (!vcs_) return string(); TempFile tempfile("lyxvclog"); @@ -383,17 +387,17 @@ string const LyXVC::getLogFile() const return string(); } LYXERR(Debug::LYXVC, "Generating logfile " << tmpf); - vcs->getLog(tmpf); + vcs_->getLog(tmpf); return tmpf.absFileName(); } string LyXVC::revisionInfo(RevisionInfo const info) const { - if (!vcs) + if (!vcs_) return string(); - return vcs->revisionInfo(info); + return vcs_->revisionInfo(info); } @@ -401,7 +405,7 @@ bool LyXVC::renameEnabled() const { if (!inUse()) return false; - return vcs->renameEnabled(); + return vcs_->renameEnabled(); } @@ -409,55 +413,55 @@ bool LyXVC::copyEnabled() const { if (!inUse()) return false; - return vcs->copyEnabled(); + return vcs_->copyEnabled(); } bool LyXVC::checkOutEnabled() const { - return vcs && vcs->checkOutEnabled(); + return vcs_ && vcs_->checkOutEnabled(); } bool LyXVC::checkInEnabled() const { - return vcs && vcs->checkInEnabled(); + return vcs_ && vcs_->checkInEnabled(); } bool LyXVC::isCheckInWithConfirmation() const { - return vcs && vcs->isCheckInWithConfirmation(); + return vcs_ && vcs_->isCheckInWithConfirmation(); } bool LyXVC::lockingToggleEnabled() const { - return vcs && vcs->lockingToggleEnabled(); + return vcs_ && vcs_->lockingToggleEnabled(); } bool LyXVC::undoLastEnabled() const { - return vcs && vcs->undoLastEnabled(); + return vcs_ && vcs_->undoLastEnabled(); } bool LyXVC::repoUpdateEnabled() const { - return vcs && vcs->repoUpdateEnabled(); + return vcs_ && vcs_->repoUpdateEnabled(); } - - + + bool LyXVC::prepareFileRevision(string const & rev, std::string & f) { - return vcs && vcs->prepareFileRevision(rev, f); + return vcs_ && vcs_->prepareFileRevision(rev, f); } bool LyXVC::prepareFileRevisionEnabled() { - return vcs && vcs->prepareFileRevisionEnabled(); + return vcs_ && vcs_->prepareFileRevisionEnabled(); } } // namespace lyx