X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVCBackend.h;h=467a094d937060689a37a882b648b139383745ed;hb=57b69a5efddf9f3c148007322f00dad6c253a2ed;hp=8f2ad4103b3cdb019cafc7388dab33ea42bf1f24;hpb=aafd52f44167d5510be1ddcb974daa9dae486933;p=lyx.git diff --git a/src/VCBackend.h b/src/VCBackend.h index 8f2ad4103b..467a094d93 100644 --- a/src/VCBackend.h +++ b/src/VCBackend.h @@ -16,6 +16,7 @@ #include "support/FileName.h" #include +#include #include "LyXVC.h" @@ -31,16 +32,26 @@ public: enum VCStatus { UNLOCKED, LOCKED, - NOLOCKING + NOLOCKING, }; - VCS(Buffer * b) : owner_(b) {} + VCS(Buffer * b) : vcstatus(NOLOCKING), owner_(b) {} virtual ~VCS() {} /// register a file for version control virtual void registrer(std::string const & msg) = 0; - /// check in the current revision, returns log - virtual std::string checkIn(std::string const & msg) = 0; + /// can this operation be processed in the current VCS? + virtual bool renameEnabled() = 0; + /// rename a file. Return non-empty log on success, empty log on failure. + virtual std::string rename(support::FileName const &, std::string const &) = 0; + /// can this operation be processed in the current VCS? + virtual bool copyEnabled() = 0; + /// copy a file. Return non-empty log on success, empty log on failure. + virtual std::string copy(support::FileName const &, std::string const &) = 0; + /// check in the current revision. + /// \p log is non-empty on success and may be empty on failure. + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log) = 0; /// can this operation be processed in the current VCS? virtual bool checkInEnabled() = 0; /// should a log message provided for next checkin? @@ -91,8 +102,8 @@ public: virtual bool prepareFileRevisionEnabled() = 0; /// Check the directory of file and all parent directories - /// for the existence of the given pathname - static bool checkparentdirs(support::FileName const & file, std::string const & pathname); + /// for the existence of repository-info like .git or .svn + static bool checkparentdirs(support::FileName const & file, std::string const & vcsdir); protected: /// parse information from the version file @@ -136,11 +147,21 @@ public: /// return the revision file for the given file, if found static support::FileName const findFile(support::FileName const & file); + /// get file from repo, the caller must ensure that it does not exist locally static bool retrieve(support::FileName const & file); virtual void registrer(std::string const & msg); - virtual std::string checkIn(std::string const & msg); + virtual bool renameEnabled(); + + virtual std::string rename(support::FileName const &, std::string const &); + + virtual bool copyEnabled(); + + virtual std::string copy(support::FileName const &, std::string const &); + + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); virtual bool checkInEnabled(); @@ -210,11 +231,21 @@ public: /// return the revision file for the given file, if found static support::FileName const findFile(support::FileName const & file); + /// get file from repo, the caller must ensure that it does not exist locally static bool retrieve(support::FileName const & file); virtual void registrer(std::string const & msg); - virtual std::string checkIn(std::string const & msg); + virtual bool renameEnabled(); + + virtual std::string rename(support::FileName const &, std::string const &); + + virtual bool copyEnabled(); + + virtual std::string copy(support::FileName const &, std::string const &); + + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); virtual bool checkInEnabled(); @@ -339,11 +370,21 @@ public: /// return the revision file for the given file, if found static support::FileName const findFile(support::FileName const & file); + /// get file from repo, the caller must ensure that it does not exist locally static bool retrieve(support::FileName const & file); virtual void registrer(std::string const & msg); - virtual std::string checkIn(std::string const & msg); + virtual bool renameEnabled(); + + virtual std::string rename(support::FileName const &, std::string const &); + + virtual bool copyEnabled(); + + virtual std::string copy(support::FileName const &, std::string const &); + + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); virtual bool checkInEnabled(); @@ -392,7 +433,10 @@ protected: /// is the loaded file locked? bool isLocked() const; /// acquire/release write lock for the current file - void fileLock(bool lock, support::FileName const & tmpf, std::string & status); + bool fileLock(bool lock, support::FileName const & tmpf, std::string & status); + /// Check in files \p f with log \p msg + LyXVC::CommandResult checkIn(std::vector const & f, + std::string const & msg, std::string & log); private: /// is the loaded file under locking policy? @@ -418,6 +462,106 @@ private: std::string rev_tree_cache_; }; + +/** + * Very basic git support: + * Remote repos are completely ignored, only the local tree is considered. + * How push and pull could be integrated with the LyX VCS interface needs + * to be discussed. + */ +class GIT : public VCS { +public: + /// + explicit + GIT(support::FileName const & m, Buffer * b); + + /// return the revision file for the given file, if found + static support::FileName const findFile(support::FileName const & file); + + /// get file from repo, the caller must ensure that it does not exist locally + static bool retrieve(support::FileName const & file); + + virtual void registrer(std::string const & msg); + + virtual bool renameEnabled(); + + virtual std::string rename(support::FileName const &, std::string const &); + + virtual bool copyEnabled(); + + virtual std::string copy(support::FileName const &, std::string const &); + + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); + + virtual bool checkInEnabled(); + + virtual bool isCheckInWithConfirmation(); + + virtual std::string checkOut(); + + virtual bool checkOutEnabled(); + + virtual std::string repoUpdate(); + + virtual bool repoUpdateEnabled(); + + virtual std::string lockingToggle(); + + virtual bool lockingToggleEnabled(); + + virtual bool revert(); + + virtual bool isRevertWithConfirmation(); + + virtual void undoLast(); + + virtual bool undoLastEnabled(); + + virtual void getLog(support::FileName const &); + + virtual std::string const versionString() const { + return "GIT: ?"; + } + + virtual bool toggleReadOnlyEnabled(); + + virtual std::string revisionInfo(LyXVC::RevisionInfo const info); + + virtual bool prepareFileRevision(std::string const & rev, std::string & f); + + virtual bool prepareFileRevisionEnabled(); + +protected: + virtual void scanMaster(); + /// Check for messages in svn output. Returns error. + std::string scanLogFile(support::FileName const & f, std::string & status); + /// Check in files \p f with log \p msg + LyXVC::CommandResult checkIn(std::vector const & f, + std::string const & msg, std::string & log); + +private: + /** + * Real code for obtaining file revision info. Fills all file-related caches + * and returns true if successfull. + * "?" is stored in rev_file_cache_ as a signal if request for obtaining info + * was already unsuccessful. + */ + bool getFileRevisionInfo(); + /// cache for file revision number, "?" if already unsuccessful, isNumber==true + std::string rev_file_cache_; + /// cache for author of last commit + std::string rev_author_cache_; + /// cache for date of last commit + std::string rev_date_cache_; + /// cache for time of last commit + std::string rev_time_cache_; + /// fills rev_tree_cache_, returns true if successfull. + bool getTreeRevisionInfo(); + /// cache for tree revision number, "?" if already unsuccessful + std::string rev_tree_cache_; +}; + } // namespace lyx #endif // VCBACKEND_H