]> git.lyx.org Git - lyx.git/blob - src/VCBackend.h
Get rid of unused SessionInfoSection.
[lyx.git] / src / VCBackend.h
1 // -*- C++ -*-
2 /**
3  * \file VCBackend.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Lars Gullik Bjønnes
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #ifndef VC_BACKEND_H
13 #define VC_BACKEND_H
14
15 #include "support/FileName.h"
16
17 #include <string>
18
19
20 namespace lyx {
21
22 class Buffer;
23
24 /// A simple version control system interface
25 class VCS {
26 public:
27         /// the status of the managed file
28         enum VCStatus {
29                 UNLOCKED,
30                 LOCKED
31         };
32
33         virtual ~VCS() {}
34
35         /// register a file for version control
36         virtual void registrer(std::string const & msg) = 0;
37         /// check in the current revision, returns log
38         virtual std::string checkIn(std::string const & msg) = 0;
39         // can be this operation processed in the current RCS?
40         virtual bool checkInEnabled() = 0;
41         /// check out for editing, returns log
42         virtual std::string checkOut() = 0;
43         // can be this operation processed in the current RCS?
44         virtual bool checkOutEnabled() = 0;
45         /// revert current edits
46         virtual void revert() = 0;
47         /// FIXME
48         virtual void undoLast() = 0;
49         // can be this operation processed in the current RCS?
50         virtual bool undoLastEnabled() = 0;
51         /**
52          * getLog - read the revision log into the given file
53          * @param fname file name to read into
54          */
55         virtual void getLog(support::FileName const &) = 0;
56         /// return the current version description
57         virtual std::string const versionString() const = 0;
58         /// return the current version
59         std::string const & version() const { return version_; }
60         /// return the user who has locked the file
61         std::string const & locker() const { return locker_; }
62         /// set the owning buffer
63         void owner(Buffer * b) { owner_ = b; }
64         /// return the owning buffer
65         Buffer * owner() const { return owner_; }
66         /// return the lock status of this file
67         VCStatus status() const { return vcstatus; }
68         /// do we need special handling for read-only toggling?
69         /// (also used for check-out operation)
70         virtual bool toggleReadOnlyEnabled() = 0;
71 protected:
72         /// parse information from the version file
73         virtual void scanMaster() = 0;
74
75         // GUI container for doVCCommandCall
76         int doVCCommand(std::string const & cmd, support::FileName const & path);
77         /**
78          * doVCCommandCall - call out to the version control utility
79          * @param cmd the command to execute
80          * @param path the path from which to execute
81          * @return exit status
82          */
83         static int doVCCommandCall(std::string const & cmd, support::FileName const & path);
84
85         /**
86          * The master VC file. For RCS this is *,v or RCS/ *,v. master should
87          * have full path.
88          */
89         support::FileName master_;
90
91         /// The status of the VC controlled file.
92         VCStatus vcstatus;
93
94         /**
95          * The version of the VC file. I am not sure if this can be a
96          * string or if it must be a float/int.
97          */
98         std::string version_;
99
100         /// The user currently keeping the lock on the VC file.
101         std::string locker_;
102         /// The buffer using this VC
103         Buffer * owner_;
104 };
105
106
107 ///
108 class RCS : public VCS {
109 public:
110
111         explicit
112         RCS(support::FileName const & m);
113
114         /// return the revision file for the given file, if found
115         static support::FileName const findFile(support::FileName const & file);
116
117         static void retrieve(support::FileName const & file);
118
119         virtual void registrer(std::string const & msg);
120
121         virtual std::string checkIn(std::string const & msg);
122
123         virtual bool checkInEnabled();
124
125         virtual std::string checkOut();
126
127         virtual bool checkOutEnabled();
128
129         virtual void revert();
130
131         virtual void undoLast();
132
133         virtual bool undoLastEnabled();
134
135         virtual void getLog(support::FileName const &);
136
137         virtual std::string const versionString() const {
138                 return "RCS: " + version_;
139         }
140
141         virtual bool toggleReadOnlyEnabled();
142
143 protected:
144         virtual void scanMaster();
145 };
146
147
148 ///
149 class CVS : public VCS {
150 public:
151         ///
152         explicit
153         CVS(support::FileName const & m, support::FileName const & f);
154
155         /// return the revision file for the given file, if found
156         static support::FileName const findFile(support::FileName const & file);
157
158         virtual void registrer(std::string const & msg);
159
160         virtual std::string checkIn(std::string const & msg);
161
162         virtual bool checkInEnabled();
163
164         virtual std::string checkOut();
165
166         virtual bool checkOutEnabled();
167
168         virtual void revert();
169
170         virtual void undoLast();
171
172         virtual bool undoLastEnabled();
173
174         virtual void getLog(support::FileName const &);
175
176         virtual std::string const versionString() const {
177                 return "CVS: " + version_;
178         }
179
180         virtual bool toggleReadOnlyEnabled();
181
182 protected:
183         virtual void scanMaster();
184
185 private:
186         support::FileName file_;
187 };
188
189
190 ///
191 class SVN : public VCS {
192 public:
193         ///
194         explicit
195         SVN(support::FileName const & m, support::FileName const & f);
196
197         /// return the revision file for the given file, if found
198         static support::FileName const findFile(support::FileName const & file);
199
200         virtual void registrer(std::string const & msg);
201
202         virtual std::string checkIn(std::string const & msg);
203
204         virtual bool checkInEnabled();
205
206         virtual std::string checkOut();
207
208         virtual bool checkOutEnabled();
209
210         virtual void revert();
211
212         virtual void undoLast();
213
214         virtual bool undoLastEnabled();
215
216         virtual void getLog(support::FileName const &);
217
218         virtual std::string const versionString() const {
219                 return "SVN: " + version_;
220         }
221
222         virtual bool toggleReadOnlyEnabled();
223
224 protected:
225         virtual void scanMaster();
226         /// Check for messages in svn output. Returns error.
227         std::string scanLogFile(support::FileName const & f, std::string & status);
228
229 private:
230         support::FileName file_;
231 };
232
233 } // namespace lyx
234
235 #endif // VCBACKEND_H