X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FVCBackend.h;h=3dbf5579719900473e755ce18233aae9c450eaba;hb=f6f32ca0ee1d341e39f202e2921ccbd4d5537f5b;hp=6e8ef541de7316a63edada13a22956b5fe2cfbe1;hpb=7929cad343f7049245d04046b4d2b37b58cfb0c6;p=lyx.git diff --git a/src/VCBackend.h b/src/VCBackend.h index 6e8ef541de..3dbf557971 100644 --- a/src/VCBackend.h +++ b/src/VCBackend.h @@ -42,6 +42,8 @@ public: virtual std::string checkIn(std::string const & msg) = 0; // can be this operation processed in the current RCS? virtual bool checkInEnabled() = 0; + // 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? @@ -55,7 +57,9 @@ public: // can be this operation processed in the current RCS? virtual bool lockingToggleEnabled() = 0; /// revert current edits - virtual void revert() = 0; + virtual bool revert() = 0; + // should a confirmation before revert requested? + virtual bool isRevertWithConfirmation() = 0; /// FIXME virtual void undoLast() = 0; // can be this operation processed in the current RCS? @@ -79,7 +83,7 @@ public: /// Return revision info specified by the argument. virtual std::string revisionInfo(LyXVC::RevisionInfo const info) = 0; - virtual bool prepareFileRevision(int rev, std::string & f) = 0; + virtual bool prepareFileRevision(std::string const & rev, std::string & f) = 0; virtual bool prepareFileRevisionEnabled() = 0; @@ -87,8 +91,12 @@ protected: /// parse information from the version file virtual void scanMaster() = 0; + /// 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); + int doVCCommand(std::string const & cmd, support::FileName const & path, bool reportError = true); /** * doVCCommandCall - call out to the version control utility * @param cmd the command to execute @@ -129,6 +137,8 @@ public: virtual bool checkInEnabled(); + virtual bool isCheckInWithConfirmation(); + virtual std::string checkOut(); virtual bool checkOutEnabled(); @@ -141,7 +151,9 @@ public: virtual bool lockingToggleEnabled(); - virtual void revert(); + virtual bool revert(); + + virtual bool isRevertWithConfirmation(); virtual void undoLast(); @@ -157,7 +169,7 @@ public: virtual std::string revisionInfo(LyXVC::RevisionInfo const info); - virtual bool prepareFileRevision(int rev, std::string & f); + virtual bool prepareFileRevision(std::string const & rev, std::string & f); virtual bool prepareFileRevisionEnabled(); @@ -190,6 +202,8 @@ public: virtual bool checkInEnabled(); + virtual bool isCheckInWithConfirmation(); + virtual std::string checkOut(); virtual bool checkOutEnabled(); @@ -202,7 +216,9 @@ public: virtual bool lockingToggleEnabled(); - virtual void revert(); + virtual bool isRevertWithConfirmation(); + + virtual bool revert(); virtual void undoLast(); @@ -210,6 +226,10 @@ public: virtual void getLog(support::FileName const &); + /// Check for messages in cvs output. + /// Returns conflict line. + std::string scanLogFile(support::FileName const & f, std::string & status); + virtual std::string const versionString() const { return "CVS: " + version_; } @@ -218,19 +238,79 @@ public: virtual std::string revisionInfo(LyXVC::RevisionInfo const info); - virtual bool prepareFileRevision(int rev, std::string & f); + virtual bool prepareFileRevision(std::string const & rev, std::string & f); virtual bool prepareFileRevisionEnabled(); protected: virtual void scanMaster(); + /// the mode of operation for some VC commands + enum OperationMode { + Directory = 0, + File = 1 + }; + /// possible status values of file + enum CvsStatus { + UpToDate = 0, + LocallyModified = 1, + LocallyAdded = 2, + NeedsMerge = 3, + NeedsCheckout = 4, + NoCvsFile = 5, + StatusError = 6 + }; private: support::FileName file_; // revision number from scanMaster std::string version_; - /// The user currently keeping the lock on the VC file. - std::string locker_; + + /** + * 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 + /// result is placed in temporary file + void getDiff(OperationMode opmode, support::FileName const & tmpf); + /// make the file ready for editing: + /// save a copy in CVS/Base and change file permissions to rw if needed + virtual int edit(); + /// revert the edit operation + virtual int unedit(); + /// retrieve repository changes into working copy + virtual int update(OperationMode opmode, support::FileName const & tmpf); + /// check readonly state for file + /// assume true when file is writable + virtual bool isLocked() const; + /// query and parse the cvs status of file + 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_; }; @@ -250,6 +330,8 @@ public: virtual bool checkInEnabled(); + virtual bool isCheckInWithConfirmation(); + virtual std::string checkOut(); virtual bool checkOutEnabled(); @@ -262,7 +344,9 @@ public: virtual bool lockingToggleEnabled(); - virtual void revert(); + virtual bool revert(); + + virtual bool isRevertWithConfirmation(); virtual void undoLast(); @@ -278,7 +362,7 @@ public: virtual std::string revisionInfo(LyXVC::RevisionInfo const info); - virtual bool prepareFileRevision(int rev, std::string & f); + virtual bool prepareFileRevision(std::string const & rev, std::string & f); virtual bool prepareFileRevisionEnabled();