]> git.lyx.org Git - lyx.git/blobdiff - src/VCBackend.h
Update my email and status.
[lyx.git] / src / VCBackend.h
index 5832f11d8f01859c1f6b788a8b83a332838fd999..8f2ad4103b3cdb019cafc7388dab33ea42bf1f24 100644 (file)
@@ -34,35 +34,40 @@ 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?
+       /// 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 bool revert() = 0;
-       // should a confirmation before revert requested?
+       /// 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 +76,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 +85,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 +122,7 @@ protected:
        VCStatus vcstatus;
 
        /// The buffer using this VC
-       Buffer * owner_;
+       Buffer * const owner_;
 };
 
 
@@ -120,12 +131,12 @@ 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);
 
@@ -172,6 +183,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 +191,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,11 +205,13 @@ 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);
@@ -257,7 +277,6 @@ protected:
        };
 
 private:
-       support::FileName file_;
        // revision number from scanMaster
        std::string version_;
 
@@ -315,11 +334,13 @@ 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);
@@ -374,7 +395,6 @@ protected:
        void fileLock(bool lock, support::FileName const & tmpf, std::string & status);
 
 private:
-       support::FileName file_;
        /// is the loaded file under locking policy?
        bool locked_mode_;
        /**