X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXVC.cpp;h=cb2c5488f210b66fe3c7ce0cf71d3bc88c13efdb;hb=c7d29be153debac82e3d2e8865fcc849f0a5f40d;hp=a697d9d42e282d3cb949fc3ee5c0224cccd89318;hpb=a3e6c7830c979f5c891179061507e6a50a210026;p=lyx.git diff --git a/src/LyXVC.cpp b/src/LyXVC.cpp index a697d9d42e..cb2c5488f2 100644 --- a/src/LyXVC.cpp +++ b/src/LyXVC.cpp @@ -25,6 +25,7 @@ #include "support/filetools.h" #include "support/gettext.h" #include "support/lstrings.h" +#include "support/TempFile.h" using namespace std; using namespace lyx::support; @@ -40,9 +41,15 @@ LyXVC::LyXVC() } -// for the sake of boost::scoped_ptr -LyXVC::~LyXVC() -{} +docstring LyXVC::vcstatus() const +{ + if (!vcs) + return docstring(); + if (locking()) + return bformat(_("%1$s lock"), from_ascii(vcs->vcname())); + else + return from_ascii(vcs->vcname()); +} bool LyXVC::fileInVC(FileName const & fn) @@ -53,6 +60,8 @@ bool LyXVC::fileInVC(FileName const & fn) return true; if (!SVN::findFile(fn).empty()) return true; + if (!GIT::findFile(fn).empty()) + return true; return false; } @@ -75,6 +84,11 @@ bool LyXVC::file_found_hook(FileName const & fn) vcs.reset(new SVN(found_file, owner_)); return true; } + // Check if file is under GIT + if (!(found_file = GIT::findFile(fn)).empty()) { + vcs.reset(new GIT(found_file, owner_)); + return true; + } // file is not under any VCS. vcs.reset(0); @@ -90,7 +104,8 @@ bool LyXVC::file_not_found_hook(FileName const & fn) 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) { + bool foundGIT = (foundRCS || foundCVS || foundSVN) ? false : !GIT::findFile(fn).empty(); + if (foundRCS || foundCVS || foundSVN || foundGIT) { docstring const file = makeDisplayPath(fn.absFileName(), 20); docstring const text = bformat(_("Do you want to retrieve the document" @@ -108,8 +123,10 @@ bool LyXVC::file_not_found_hook(FileName const & fn) return RCS::retrieve(fn); else if (foundCVS) return CVS::retrieve(fn); - else + else if (foundSVN) return SVN::retrieve(fn); + else + return GIT::retrieve(fn); } } return false; @@ -139,8 +156,14 @@ bool LyXVC::registrer() //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 (svn_entries.isReadableFile()) { + if (git_index.isReadableFile()) { + 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_)); @@ -239,7 +262,7 @@ string LyXVC::checkOut() if (!vcs) return string(); //RCS allows checkOut only in ReadOnly mode - if (vcs->toggleReadOnlyEnabled() && !owner_->isReadonly()) + if (vcs->toggleReadOnlyEnabled() && !owner_->hasReadonlyFlag()) return string(); LYXERR(Debug::LYXVC, "LyXVC: checkOut"); @@ -306,13 +329,18 @@ string LyXVC::toggleReadOnly() case VCS::LOCKED: { LYXERR(Debug::LYXVC, "LyXVC: toggle to unlocked"); string log; - if (checkIn(log) != Success) + if (checkIn(log) != VCSuccess) return string(); return log; } case VCS::NOLOCKING: - case VCS::UNVERSIONED: - break; + Buffer * b = vcs->owner(); + bool const newstate = !b->hasReadonlyFlag(); + string result = "LyXVC: toggle to "; + result += (newstate ? "readonly" : "readwrite"); + LYXERR(Debug::LYXVC, result); + b->setReadonly(newstate); + return result; } return string(); } @@ -321,7 +349,7 @@ string LyXVC::toggleReadOnly() bool LyXVC::inUse() const { if (vcs) - return vcs->status() != VCS::UNVERSIONED; + return true; return false; } @@ -347,7 +375,9 @@ string const LyXVC::getLogFile() const if (!vcs) return string(); - FileName const tmpf = FileName::tempName("lyxvclog"); + TempFile tempfile("lyxvclog"); + tempfile.setAutoRemove(false); + FileName const tmpf = tempfile.name(); if (tmpf.empty()) { LYXERR(Debug::LYXVC, "Could not generate logfile " << tmpf); return string(); @@ -377,7 +407,9 @@ bool LyXVC::renameEnabled() const bool LyXVC::copyEnabled() const { - return inUse(); + if (!inUse()) + return false; + return vcs->copyEnabled(); } @@ -415,8 +447,8 @@ bool LyXVC::repoUpdateEnabled() const { return vcs && vcs->repoUpdateEnabled(); } - - + + bool LyXVC::prepareFileRevision(string const & rev, std::string & f) { return vcs && vcs->prepareFileRevision(rev, f);