X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXVC.h;h=55de93f103ff8f9f38d02031c1ea7017f6581f67;hb=53a72a45266feb86c13f47615a4cbb15053f3c63;hp=59413e2153eaadb82d2ad2918dd70e16cb53f925;hpb=f07105d0e5d7feea9a09abea413bfd5d4d059108;p=lyx.git diff --git a/src/LyXVC.h b/src/LyXVC.h index 59413e2153..55de93f103 100644 --- a/src/LyXVC.h +++ b/src/LyXVC.h @@ -4,7 +4,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * * Full author contact details are available in file CREDITS. */ @@ -25,16 +25,15 @@ class VCS; class Buffer; /** Version Control for LyX. - This is the class giving the verison control features to LyX. It is - intended to support different kinds of version control, but at this point - we will only support RCS. Later CVS is a likely candidate for support. + This is the class giving the version control features to LyX. It is + intended to support different kinds of version control. The support in LyX is based loosely upon the version control in GNU Emacs, - but is not as extensive as that one. See examples/VC.lyx for a simple + but is not as extensive as that one. See Extended Manual for a simple tutorial and manual for the use of the version control system in LyX. LyXVC use this algorithm when it searches for VC files: - for RCS it searches for ,v and RCS/,v similar - should be done for CVS. By doing this there doesn't need to be any + for RCS it searches for ,v and RCS/,v similarly + CVS/Entries for cvs and .svn/entries. By doing this there doesn't need to be any special support for VC in the lyx format, and this is especially good when the lyx format will be a subset of LaTeX. */ @@ -45,11 +44,11 @@ public: /// ~LyXVC(); /** Not a good name perhaps. This function should be called whenever - LyX loads a file. This function then checks for a master VC file - (for RCS this is *,v or RCS/ *,v) if this file is found, the loaded - file is assumed to be under controll by VC (only RCS so far), and - the appropiate actions is taken. Returns true if the file is under - control by a VCS. + LyX loads a file. This function then checks for a master VC file (for + RCS this is *,v or RCS/ *,v ; for CVS this is CVS/Entries and .svn/entries + for SVN) if this file or entry is found, the loaded file is assumed to be + under controll by VC, and the appropiate actions is taken. + Returns true if the file is under control by a VCS. */ bool file_found_hook(support::FileName const & fn); @@ -66,19 +65,59 @@ public: void setBuffer(Buffer *); /// Register the document as an VC file. - void registrer(); + bool registrer(); - /// Unlock and commit changes. - void checkIn(); - /// Lock and prepare to edit document. - void checkOut(); + // std::string used as a return value in functions below are + // workaround to defer messages to be displayed in UI. If message() + // is used directly, message string is immediately overwritten + // by the next multiple messages on the top of the processed dispatch + // machinery. + + /// Unlock and commit changes. Returns log. + std::string checkIn(); + /// Does the current VC supports this operation? + bool checkInEnabled() const; + + /// Lock/update and prepare to edit document. Returns log. + std::string checkOut(); + /// Does the current VC supports this operation? + bool checkOutEnabled() const; + + /// Synchronize the whole archive with repository + std::string repoUpdate(); + /// Does the current VC supports this operation? + bool repoUpdateEnabled() const; + + /** + * Toggle locking property of the edited file, + * i.e. whether the file uses locking mechanism. + */ + std::string lockingToggle(); + /// Does the current VC support this operation? + bool lockingToggleEnabled() const; /// Revert to last version - void revert(); + bool revert(); /// Undo last check-in. void undoLast(); + /// Does the current VC supports this operation? + bool undoLastEnabled() const; + /** + * Prepare revision rev of the file into newly created temporary file + * and save the filename into parameter f. + * Parameter rev can be either revision number or negative number + * which is interpreted as how many revision back from the current + * one do we want. rev=0 is reserved for the last (committed) revision. + * We need rev to be string, since in various VCS revision is not integer. + * If RCS addressed by a single number, it is automatically used + * as the last number in the whole revision specification (it applies + * for retrieving normal revisions (rev>0) or backtracking (rev<0). + */ + bool prepareFileRevision(std::string const & rev, std::string & f); + /// Does the current VC supports this operation? + bool prepareFileRevisionEnabled(); /** * Generate a log file and return the filename. @@ -87,19 +126,41 @@ public: */ const std::string getLogFile() const; - /// + /** + * We do not support this generally. In RCS/SVN file read-only flag + * is often connected with locking state and one has to be careful to + * keep things in synchro once we would allow user to toggle + * read-only flags. + */ void toggleReadOnly(); - /// Is the document under administration by RCS? - bool inUse(); + /// Is the document under administration by VCS? + bool inUse() const; - /// Returns the version number. - //std::string const & version() const; - /// Returns the version number. + /// Returns the RCS + version number for messages std::string const versionString() const; - /// Returns the userid of the person who has locked the doc. - std::string const & locker() const; + /** + * Returns whether we use locking for the given file. + */ + bool locking() const; + + // type of the revision information + enum RevisionInfo { + Unknown = 0, + File = 1, + Tree = 2, + Author = 3, + Date = 4, + Time = 5 + }; + + /** + * Return revision info specified by the argument. + * Its safe to call it regardless VCS is in usage or this + * info is (un)available. Returns empty string in such a case. + */ + std::string revisionInfo(RevisionInfo const info) const; private: ///