X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVCBackend.h;h=771d20f486ce5fb7f260b391577ef63f7927db61;hb=f51636b547b87b710f6a22e067e94f96d41c740f;hp=b50fe371149b1f7ae15c34078f5862343e709df1;hpb=c6d4080694c300be7a198f2975a5b2900a76ab97;p=lyx.git diff --git a/src/VCBackend.h b/src/VCBackend.h index b50fe37114..771d20f486 100644 --- a/src/VCBackend.h +++ b/src/VCBackend.h @@ -34,35 +34,42 @@ public: NOLOCKING }; + VCS(Buffer * b) : 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 be this operation processed in the current RCS? + /// 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? + /// should a log message provided for next checkin? virtual bool isCheckInWithConfirmation() = 0; /// check out for editing, returns log virtual std::string checkOut() = 0; - // can be this operation processed in the current RCS? + /// can this operation be processed in the current VCS? virtual bool checkOutEnabled() = 0; /// synchronize with repository, returns log virtual std::string repoUpdate() = 0; - // can be this operation processed in the current RCS? + /// can this operation be processed in the current VCS? virtual bool repoUpdateEnabled() = 0; - // toggle locking property of the file + /// toggle locking property of the file virtual std::string lockingToggle() = 0; - // can be this operation processed in the current RCS? + /// can this operation be processed in the current VCS? virtual bool lockingToggleEnabled() = 0; /// revert current edits - virtual void revert() = 0; - // should a confirmation before revert requested? + virtual bool revert() = 0; + /// should a confirmation before revert requested? virtual bool isRevertWithConfirmation() = 0; - /// FIXME + /** + * Merge the current with the previous version + * in a reverse patch kind of way, so that the + * result is to revert the last changes. + */ virtual void undoLast() = 0; - // can be this operation processed in the current RCS? + /// can this operation be processed in the current VCS? virtual bool undoLastEnabled() = 0; /** * getLog - read the revision log into the given file @@ -71,8 +78,6 @@ public: virtual void getLog(support::FileName const &) = 0; /// return the current version description virtual std::string const versionString() const = 0; - /// set the owning buffer - void owner(Buffer * b) { owner_ = b; } /// return the owning buffer Buffer * owner() const { return owner_; } /// return the lock status of this file @@ -82,16 +87,24 @@ public: virtual bool toggleReadOnlyEnabled() = 0; /// Return revision info specified by the argument. virtual std::string revisionInfo(LyXVC::RevisionInfo const info) = 0; - + /// can this operation be processed in the current VCS? virtual bool prepareFileRevision(std::string const & rev, std::string & f) = 0; - + /// can this operation be processed in the current VCS? 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); + protected: /// parse information from the version file virtual void scanMaster() = 0; - // GUI container for doVCCommandCall + /// Prepare a version identifier suitable for RCS and CVS. + /// If needed converts last or relative number to the absolute revision. + bool makeRCSRevision(std::string const &version, std::string &revis) const; + + /// GUI container for doVCCommandCall int doVCCommand(std::string const & cmd, support::FileName const & path, bool reportError = true); /** * doVCCommandCall - call out to the version control utility @@ -111,7 +124,7 @@ protected: VCStatus vcstatus; /// The buffer using this VC - Buffer * owner_; + Buffer * const owner_; }; @@ -120,16 +133,17 @@ class RCS : public VCS { public: explicit - RCS(support::FileName const & m); + RCS(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); - static void retrieve(support::FileName const & file); + static bool retrieve(support::FileName const & file); virtual void registrer(std::string const & msg); - virtual std::string checkIn(std::string const & msg); + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); virtual bool checkInEnabled(); @@ -147,7 +161,7 @@ public: virtual bool lockingToggleEnabled(); - virtual void revert(); + virtual bool revert(); virtual bool isRevertWithConfirmation(); @@ -172,6 +186,7 @@ public: protected: virtual void scanMaster(); private: + bool getRevisionInfo(); /** * The version of the VC file. I am not sure if this can be a * string or if it must be a float/int. @@ -179,6 +194,12 @@ private: std::string version_; /// The user currently keeping the lock on the VC file (or "Unlocked"). std::string locker_; + /// Cache for revision info. + std::string rev_date_cache_; + /// + std::string rev_time_cache_; + /// + std::string rev_author_cache_; }; @@ -187,14 +208,17 @@ class CVS : public VCS { public: /// explicit - CVS(support::FileName const & m, support::FileName const & f); + CVS(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); + static bool retrieve(support::FileName const & file); + virtual void registrer(std::string const & msg); - virtual std::string checkIn(std::string const & msg); + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); virtual bool checkInEnabled(); @@ -214,7 +238,7 @@ public: virtual bool isRevertWithConfirmation(); - virtual void revert(); + virtual bool revert(); virtual void undoLast(); @@ -257,10 +281,27 @@ protected: }; private: - support::FileName file_; // revision number from scanMaster std::string version_; + /** + * doVCCommandWithOutput + * - call out to the version control utility + * - it is able to collect output in a file + * @param cmd the command to execute + * @param path the path from which to execute + * @param output the path where to store output + * @param reportError display of low level error message dialog + * @return exit status + */ + int doVCCommandWithOutput(std::string const & cmd, + support::FileName const & path, + support::FileName const & output, + bool reportError = true); + static int doVCCommandCallWithOutput(std::string const & cmd, + support::FileName const & path, + support::FileName const & output); + /// return the quoted pathname if Directory or filename if File virtual std::string const getTarget(OperationMode opmode) const; /// collect the diff of file or directory against repository @@ -280,6 +321,15 @@ private: virtual CvsStatus getStatus(); /// convert enum to string virtual docstring toString(CvsStatus status) const; + + /// cache the info values of current file revision + /// author, date and time of commit + std::string rev_author_cache_; + std::string rev_date_cache_; + std::string rev_time_cache_; + /// fills the cache values, returns true if successfull. + void getRevisionInfo(); + bool have_rev_info_; }; @@ -288,14 +338,17 @@ class SVN : public VCS { public: /// explicit - SVN(support::FileName const & m, support::FileName const & f); + SVN(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); + static bool retrieve(support::FileName const & file); + virtual void registrer(std::string const & msg); - virtual std::string checkIn(std::string const & msg); + virtual LyXVC::CommandResult + checkIn(std::string const & msg, std::string & log); virtual bool checkInEnabled(); @@ -313,7 +366,7 @@ public: virtual bool lockingToggleEnabled(); - virtual void revert(); + virtual bool revert(); virtual bool isRevertWithConfirmation(); @@ -344,10 +397,9 @@ 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); private: - support::FileName file_; /// is the loaded file under locking policy? bool locked_mode_; /**