X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXVC.cpp;h=4dbcfd2675f5041bda2285e6950f266cc2fee87a;hb=bc47054be88467f01fd2f6e437d555743bd8a7c9;hp=8ef5439332321d91ba827d78505a9c1de226fb5d;hpb=e82cc5d498244b0d0f0571249f12480e1f514355;p=lyx.git diff --git a/src/LyXVC.cpp b/src/LyXVC.cpp index 8ef5439332..4dbcfd2675 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; @@ -53,6 +54,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 +78,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 +98,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 +117,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,11 +150,17 @@ 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 (git_index.isReadableFile()) { + LYXERR(Debug::LYXVC, "LyXVC: registering " + << to_utf8(filename.displayName()) << " with GIT"); + vcs.reset(new GIT(git_index, owner_)); - if (svn_entries.isReadableFile()) { + } else if (svn_entries.isReadableFile()) { LYXERR(Debug::LYXVC, "LyXVC: registering " << to_utf8(filename.displayName()) << " with SVN"); - vcs.reset(new SVN(cvs_entries, owner_)); + vcs.reset(new SVN(svn_entries, owner_)); } else if (cvs_entries.isReadableFile()) { LYXERR(Debug::LYXVC, "LyXVC: registering " @@ -173,14 +190,51 @@ bool LyXVC::registrer() } -string LyXVC::checkIn() +string LyXVC::rename(FileName const & fn) +{ + LYXERR(Debug::LYXVC, "LyXVC: rename"); + if (!vcs || fileInVC(fn)) + return string(); + docstring response; + bool ok = Alert::askForText(response, _("LyX VC: Log message"), + _("(no log message)")); + if (!ok) { + LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); + return string(); + } + if (response.empty()) + response = _("(no log message)"); + string ret = vcs->rename(fn, to_utf8(response)); + return ret; +} + + +string LyXVC::copy(FileName const & fn) +{ + LYXERR(Debug::LYXVC, "LyXVC: copy"); + if (!vcs || fileInVC(fn)) + return string(); + docstring response; + bool ok = Alert::askForText(response, _("LyX VC: Log message"), + _("(no log message)")); + if (!ok) { + LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); + return string(); + } + if (response.empty()) + response = _("(no log message)"); + string ret = vcs->copy(fn, to_utf8(response)); + return ret; +} + + +LyXVC::CommandResult LyXVC::checkIn(string & log) { LYXERR(Debug::LYXVC, "LyXVC: checkIn"); if (!vcs) - return string(); + return ErrorBefore; docstring empty(_("(no log message)")); docstring response; - string log; bool ok = true; if (vcs->isCheckInWithConfirmation()) ok = Alert::askForText(response, _("LyX VC: Log Message")); @@ -189,15 +243,11 @@ string LyXVC::checkIn() response = empty; //shell collisions response = subst(response, from_ascii("\""), from_ascii("\\\"")); - log = vcs->checkIn(to_utf8(response)); - - // Reserve empty string for cancel button - if (log.empty()) - log = to_utf8(empty); + return vcs->checkIn(to_utf8(response), log); } else { LYXERR(Debug::LYXVC, "LyXVC: user cancelled"); + return Cancelled; } - return log; } @@ -259,25 +309,28 @@ void LyXVC::undoLast() } -void LyXVC::toggleReadOnly() +string LyXVC::toggleReadOnly() { if (!vcs) - return; + return string(); if (!vcs->toggleReadOnlyEnabled()) - return; + return string(); switch (vcs->status()) { case VCS::UNLOCKED: LYXERR(Debug::LYXVC, "LyXVC: toggle to locked"); - checkOut(); - break; - case VCS::LOCKED: + return checkOut(); + case VCS::LOCKED: { LYXERR(Debug::LYXVC, "LyXVC: toggle to unlocked"); - checkIn(); - break; + string log; + if (checkIn(log) != VCSuccess) + return string(); + return log; + } case VCS::NOLOCKING: break; } + return string(); } @@ -310,7 +363,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(); @@ -330,6 +385,22 @@ string LyXVC::revisionInfo(RevisionInfo const info) const } +bool LyXVC::renameEnabled() const +{ + if (!inUse()) + return false; + return vcs->renameEnabled(); +} + + +bool LyXVC::copyEnabled() const +{ + if (!inUse()) + return false; + return vcs->copyEnabled(); +} + + bool LyXVC::checkOutEnabled() const { return vcs && vcs->checkOutEnabled(); @@ -342,6 +413,12 @@ bool LyXVC::checkInEnabled() const } +bool LyXVC::isCheckInWithConfirmation() const +{ + return vcs && vcs->isCheckInWithConfirmation(); +} + + bool LyXVC::lockingToggleEnabled() const { return vcs && vcs->lockingToggleEnabled();