1
2
3
4 import common
5
6 import os
7 import commands
8 import tempfile
9
10 from moap.util import log
11 from moap.vcs import svn
12
14 if os.system('svn --version > /dev/null 2>&1') != 0:
15 skip = "No 'svn' binary, skipping test."
16
18 self.repository = self.createRepository()
19 self.livedir = self.createLive()
20 cmd = 'svn checkout file://%s %s' % (self.repository, self.livedir)
21 (status, output) = commands.getstatusoutput(cmd)
22 self.failIf(status)
23
25 os.system('rm -rf %s' % self.livedir)
26 os.system('rm -rf %s' % self.repository)
27
30
31 self.failIf(svn.detect(self.repository))
32
34
35 self.failUnless(svn.detect(self.livedir))
36
38
39 checkout = tempfile.mkdtemp(prefix="moap.test.")
40 os.mkdir(os.path.join(checkout, '.svn'))
41 self.failIf(svn.detect(checkout))
42 os.system('rm -rf %s' % checkout)
43
46 v = svn.VCSClass(self.livedir)
47 self.failUnless(v)
48
49 paths = ['test/test1.py', 'test/test2.py', 'test/test3/test4.py',
50 'test5.py', 'test6/', 'test/test7/']
51 tree = v.createTree(paths)
52 keys = tree.keys()
53 keys.sort()
54 self.assertEquals(keys, ['', 'test', 'test/test3'])
55 self.failUnless('test1.py' in tree['test'])
56 self.failUnless('test2.py' in tree['test'])
57 self.failUnless('test7' in tree['test'])
58 self.failUnless('test4.py' in tree['test/test3'])
59 self.failUnless('test5.py' in tree[''], tree[''])
60 self.failUnless('test6' in tree[''], tree[''])
61
76
79 v = svn.VCSClass(self.livedir)
80 self.failUnless(v)
81
82 self.assertEquals(v.diff(self.livedir), "")
83
85 v = svn.VCSClass(self.livedir)
86 self.failUnless(v)
87
88
89 path = self.liveWriteFile('test', "test\n")
90
91
92 os.system('svn add %s' % path)
93
94
95
96
97 diff = v.diff(self.livedir)
98 lines = diff.split('\n')
99 self.assertEquals(len(lines), 6)
100 self.failIfEquals(diff[-1], '\n')
101
102
104 v = svn.VCSClass(self.livedir)
105 self.failUnless(v)
106
107 file = os.path.join(os.path.dirname(__file__), 'diff',
108 'svn_add_one_line.diff')
109 d = open(file).read()
110 c = v.getChanges(None, d)
111
112 self.assertEquals(len(c.keys()), 1)
113 self.failUnless(c.has_key('moap/vcs/svn.py'))
114 self.assertEquals(c['moap/vcs/svn.py'], [(105, 0, 105, 1)])
115
117 v = svn.VCSClass(self.livedir)
118 self.failUnless(v)
119
120 file = os.path.join(os.path.dirname(__file__), 'diff',
121 'svn_multiple.diff')
122 d = open(file).read()
123 c = v.getChanges(None, d)
124
125
126 self.assertEquals(len(c.keys()), 3)
127
128 self.failUnless(c.has_key('moap/vcs/vcs.py'))
129 self.assertEquals(c['moap/vcs/vcs.py'], [
130 (8, 0, 8, 1),
131 (114, 0, 115, 42),
132 ])
133
135 v = svn.VCSClass(self.livedir)
136 self.failUnless(v)
137
138 file = os.path.join(os.path.dirname(__file__), 'diff',
139 'svn_symlink.diff')
140 d = v.scrubPropertyChanges(open(file).read())
141 c = v.getChanges(None, d)
142
143
144 self.assertEquals(len(c.keys()), 5)
145
146 self.failUnless(c.has_key('buildbot1/Makefile'))
147 self.failUnless(c.has_key('buildbot1/words.cfg'))
148 self.assertEquals(c['buildbot1/Makefile'], [
149 (9, 2, 9, 6),
150 ])
151
153 v = svn.VCSClass(self.livedir)
154 self.failUnless(v)
155
156 file = os.path.join(os.path.dirname(__file__), 'diff',
157 'svn_add_first_last_line.diff')
158 d = open(file).read()
159 c = v.getChanges(None, d)
160
161
162 self.assertEquals(len(c.keys()), 1)
163
164 self.failUnless(c.has_key('moap/vcs/svn.py'))
165 self.assertEquals(c['moap/vcs/svn.py'], [
166 (1, 0, 1, 1),
167 (117, 0, 118, 1),
168 ])
169
171
172
173
174 v = svn.VCSClass(self.livedir)
175 self.failUnless(v)
176
177
178 path = self.liveWriteFile('test', "test\n")
179 path2 = self.liveWriteFile('test2', "test\n")
180
181
182 os.system('svn add %s' % path)
183 os.system('svn add %s' % path2)
184 os.system('svn commit -m "test" %s' % self.livedir)
185
186
187 self.liveWriteFile('test', "test change\n")
188 self.liveWriteFile('test2', "test 2 change\n")
189
190
191 os.system('svn ps property value %s' % path)
192
193
194 c = v.getChanges(self.livedir)
195 self.assertEquals(c[path], [
196 (1, 1, 1, 1),
197 ])
198 self.assertEquals(c[path2], [
199 (1, 1, 1, 1),
200 ])
201
204 v = svn.VCSClass(self.livedir)
205 self.failUnless(v)
206
207
208 path = self.liveWriteFile('test', "test\n")
209 path2 = self.liveWriteFile('test2', "test\n")
210
211
212 os.system('svn add %s' % path)
213 os.system('svn add %s' % path2)
214 os.system('svn commit -m "test" %s' % self.livedir)
215
216
217 os.system('svn ps svn:property value %s' % path)
218 os.system('svn ps svn:property value %s' % path2)
219 os.system('svn ps svn:property2 value %s' % path2)
220
221
222 c = v.getPropertyChanges(self.livedir)
223 self.assertEquals(c, {
224 path: ['svn:property', ],
225 path2: ['svn:property', 'svn:property2'],
226 })
227
230 v = svn.VCSClass(self.livedir)
231 self.failUnless(v)
232
233
234 path = self.liveWriteFile('test', "test\n")
235
236
237 os.system('svn add %s' % path)
238
239 paths = v.getAdded(self.livedir)
240 self.assertEquals(paths, ['test', ])
241
242
243 os.system('svn commit -m "test" %s' % self.livedir)
244
245 paths = v.getAdded(self.livedir)
246 self.failIf(paths)
247
248
249 os.system('svn delete %s' % path)
250 paths = v.getDeleted(self.livedir)
251 self.assertEquals(paths, ['test', ])
252 paths = v.getAdded(self.livedir)
253 self.failIf(paths)
254
255
256 os.system('svn commit -m "test" %s' % self.livedir)
257
258 paths = v.getAdded(self.livedir)
259 self.failIf(paths)
260 paths = v.getDeleted(self.livedir)
261 self.failIf(paths)
262
268
270
271 fd, archive = tempfile.mkstemp(suffix='.tar.gz', prefix="moap.test.")
272 os.close(fd)
273
274
275 log.debug('test', 'backing up archive %s', archive)
276 self.vcs.backup(archive)
277
278 os.unlink(archive)
279
281 v = svn.VCSClass(self.livedir)
282 self.failUnless(v)
283
284
285 path = self.liveWriteFile('test', "test\n")
286
287 self.assertBackupRestore()
288
289
290 os.system('svn add %s' % path)
291
292
293
294
295
296 os.system('svn commit -m "test" %s' % self.livedir)
297 self.assertBackupRestore()
298
299
300 os.system('svn delete %s' % path)
301
302
303
304
305
306 os.system('svn commit -m "test" %s' % self.livedir)
307 self.assertBackupRestore()
308
309
310 return
311
312 paths = v.getAdded(self.livedir)
313 self.failIf(paths)
314
315
316 paths = v.getAdded(self.livedir)
317 self.failIf(paths)
318 paths = v.getDeleted(self.livedir)
319 self.failIf(paths)
320