source: tailor/vcpx/tests/tailor.py @ 1104

Revision 1104, 9.9 KB checked in by lele@…, 7 years ago (diff)

Replace the mercurial cli backend with the native hglib one

Line 
1# -*- mode: python; coding: utf-8 -*-
2# :Progetto: vcpx -- Operational tests
3# :Creato:   lun 08 ago 2005 22:17:10 CEST
4# :Autore:   Lele Gaifax <lele@nautilus.homeip.net>
5# :Licenza:  GNU General Public License
6#
7
8"""\
9#!tailor
10'''
11[DEFAULT]
12target-module = None
13source-repository = %(tailor_repo)s
14encoding = None
15target-repository = None
16use-svn-propset = False
17source-module = None
18update = True
19subdir = test
20debug = False
21remove-first-log-line = False
22patch-name-format = None
23verbose = False
24state-file = tailor.state
25start-revision = Version 0.9.17
26
27[darcs2bzr]
28target = bzr:tailor
29root-directory = %(testdir)s/darcs2bzr
30source = darcs:tailor
31patch-name-format = %(revision)s
32
33[bzr2darcs]
34source = bzr:tailor
35root-directory = %(testdir)s/bzr2darcs
36target = darcs:bzrtailor
37patch-name-format = %(revision)s
38start-revision = INITIAL
39
40[darcs:tailor]
41
42[bzr:tailor]
43repository = %(testdir)s/darcs2bzr
44
45[darcs:bzrtailor]
46
47
48[darcs2cdv]
49target = cdv:tailor
50root-directory = %(testdir)s/darcs2cdv
51source = darcs:tailor
52
53[cdv:tailor]
54
55
56[darcs2hg]
57target = hg:tailor
58root-directory = %(testdir)s/darcs2hg
59source = darcs:tailor
60
61[hg:tailor]
62
63
64[darcs2svn]
65target = svn:tailor
66root-directory = %(testdir)s/darcs2svn
67source = darcs:svntailor
68start-revision = INITIAL
69
70[svn2darcs]
71target = darcs:svntailor
72root-directory = %(testdir)s/svn2darcs
73source = svn:tailor
74start-revision = 1
75
76[svn:tailor]
77repository = file://%(testdir)s/svnrepo
78module = tailor
79subdir = svnside
80use-propset = True
81
82[darcs:svntailor]
83repository = %(tailor_repo)s
84subdir = darcside
85
86
87[darcs2monotone]
88target = monotone:tailor
89root-directory = %(testdir)s/darcs2monotone
90source = darcs:tailor
91
92[monotone2darcs]
93source = monotone:tailor
94root-directory = %(testdir)s/monotone2darcs
95target = darcs:mtntailor
96start-revision = INITIAL
97
98[monotone:tailor]
99keyid = tailor
100passphrase = fin che la barca va
101repository = %(testdir)s/tailor-mtn.db
102module = tailor.test
103subdir = mntside
104
105[darcs:mtntailor]
106subdir = darcside
107
108
109[cvs2darcs]
110target = darcs:pxlib
111root-directory = %(testdir)s/cvs2darcs
112source = cvs:pxlib
113start-revision = R-0-5-1
114subdir = pxlib
115
116[darcs:pxlib]
117
118[cvs:pxlib]
119repository = :pserver:anonymous@cvs.sf.net:/cvsroot/pxlib
120module = pxlib
121encoding = iso-8859-1
122
123
124[darcs2cvs]
125target = cvs:tailor
126root-directory = %(testdir)s/darcs2cvs
127source = darcs:tailor
128
129[cvs:tailor]
130repository = :local:%(testdir)s/cvsrepo
131module = tailor
132
133
134[cvs2hg]
135root-directory = %(testdir)s/cvs2hg
136source = cvs:cmsmini
137target = hg:cmsmini
138start-revision = INITIAL
139subdir = cmsmini
140before-commit = remap_authors
141
142[cvs:cmsmini]
143repository = :ext:anoncvs@savannah.nongnu.org:/cvsroot/cmsmini
144module = cmsmini
145
146[hg:cmsmini]
147
148
149[cvs2bzr]
150root-directory = %(testdir)s/cvs2bzr
151source = cvs:atse
152target = bzr:atse
153start-revision = spamies-improvement-branch INITIAL
154subdir = atse
155
156[cvs:atse]
157repository = :pserver:anonymous@cvs.sourceforge.net:/cvsroot/collective
158module = ATSchemaEditorNG
159
160[bzr:atse]
161
162
163[svndump2darcs]
164source = svndump:simple
165target = darcs:simple
166root-directory = %(testdir)s/svndump2darcs
167subdir = simple
168start-revision = INITIAL
169
170[svndump:simple]
171repository = %(tailor_repo)s/vcpx/tests/data/simple.svndump
172subdir = plain
173
174[darcs:simple]
175subdir = .
176
177
178[svndump2hg]
179source = svndump:pyobjc
180target = hg:pyobjc
181root-directory = %(testdir)s/svndump2hg
182start-revision = INITIAL
183
184[svndump:pyobjc]
185repository = %(tailor_repo)s/pyobjc.svndump
186subdir = plain
187
188[hg:pyobjc]
189subdir = hg
190
191
192[svndump2hg-partial]
193source = svndump:simple-partial
194target = hg:simple-partial
195root-directory = %(testdir)s/svndump2hg-partial
196start-revision = INITIAL
197
198[svndump:simple-partial]
199repository = %(tailor_repo)s/vcpx/tests/data/simple.svndump
200#repository = /usr/local/tmp/docit.svndump
201module = subdir
202subdir = plain
203
204[hg:simple-partial]
205subdir = hg
206
207
208[cvs2svn]
209source = cvs:cmfeditions-houston-sprint
210target = svn:cmfeditions
211start-revision = houston-sprint-branch INITIAL
212root-directory = %(testdir)s/cvs2svn
213
214[cvs:cmfeditions-houston-sprint]
215repository = :pserver:anonymous@cvs.sourceforge.net:/cvsroot/collective
216module = CMFEditions
217subdir = cvside
218
219[svn:cmfeditions]
220repository = file://%(testdir)s/cmfeditions.svnrepo
221module = cmfeditions
222subdir = svnside
223
224
225[svn2hg]
226source = svn:plonebook
227target = hg:plonebook
228start-revision = 1101
229root-directory = %(testdir)s/svn2hg
230
231[svn:plonebook]
232repository = http://docit.bice.dyndns.org
233module = /Plone/PloneBook2/it
234
235[hg:plonebook]
236
237[svn2hg_with_externals]
238source = svn:plonebook_we
239target = hg:plonebook
240start-revision = HEAD
241root-directory = %(testdir)s/svn2hg_we
242
243[svn:plonebook_we]
244repository = http://docit.bice.dyndns.org
245module = /Plone/PloneBook2/it
246ignore-externals = False
247
248
249[bazaarng2darcs]
250source = bzr:oodoctest
251target = darcs:oodoctest
252root-directory = %(testdir)s/bazaarng2darcs
253start-revision = INITIAL
254
255[bzr:oodoctest]
256repository = http://download.gna.org/oodoctest/oodoctest.og.main/
257
258[darcs:oodoctest]
259'''
260
261def remap_authors(context, changeset):
262    if changeset.author == 'tizziano':
263        changeset.author = 'tiziano'
264    return True
265"""
266
267from unittest import TestCase
268from cStringIO import StringIO
269from vcpx.config import Config
270from vcpx.tailor import Tailorizer
271from vcpx.shwrap import ExternalCommand, PIPE
272
273class OperationalTest(TestCase):
274
275    TESTDIR = '/tmp/tailor-tests'
276
277    def setUp(self):
278        from os import mkdir, getcwd
279        from os.path import exists, split, join
280        from atexit import register
281        from shutil import rmtree
282
283        tailor_repo = getcwd()
284        while tailor_repo and not exists(join(tailor_repo, '_darcs')):
285            tailor_repo = split(tailor_repo)[0]
286        assert exists(join(tailor_repo, '_darcs')), "Tailor Darcs repository not found!"
287        self.tailor_repo = tailor_repo
288        self.config = Config(StringIO(__doc__), {'tailor_repo': tailor_repo,
289                                                 'testdir': self.TESTDIR})
290        if not exists(self.TESTDIR):
291            mkdir(self.TESTDIR)
292            register(rmtree, self.TESTDIR)
293
294    def diffWhenPossible(self, tailorizer):
295        "Diff the resulting sides"
296
297        dwd = tailorizer.workingDir()
298        if not dwd.shared_basedirs:
299            cmd = ["diff", "-r", "-u"]
300            if tailorizer.source.METADIR:
301                cmd.extend(["-x", tailorizer.source.METADIR])
302            if tailorizer.target.METADIR:
303                cmd.extend(["-x", tailorizer.target.METADIR])
304            d = ExternalCommand(command=cmd)
305            out = d.execute(dwd.source.basedir, dwd.target.basedir,
306                            stdout=PIPE)[0]
307            return out.read()
308        else:
309            return ""
310
311    def tailorize(self, project):
312        "The actual test"
313
314        tailorizer = Tailorizer(project, self.config)
315        self.assert_(not tailorizer.exists(),
316                     "For test purposes, better start from scratch!")
317        tailorizer()
318        self.assertEqual(self.diffWhenPossible(tailorizer), "")
319
320class Darcs(OperationalTest):
321    "Test darcs backend"
322
323    def testConfiguration(self):
324        "Test basic configuration"
325
326        from os.path import expanduser
327
328        p = Tailorizer('darcs2svn', self.config)
329        self.assertEqual(p.source.subdir, 'darcside')
330        self.assertEqual(p.rootdir, '%s/darcs2svn' % self.TESTDIR)
331        self.assertEqual(p.source.repository, self.tailor_repo)
332        self.assertEqual(p.target.repository,
333                         'file://%s/svnrepo' % self.TESTDIR)
334        self.assertEqual(p.state_file.filename,
335                         '%s/darcs2svn/tailor.state' % self.TESTDIR)
336
337        tailorizer = Tailorizer('cvs2darcs', self.config)
338        self.assertEqual(tailorizer.subdir, 'pxlib')
339        self.assertEqual(tailorizer.source.subdir, 'pxlib')
340
341    def testDarcsAndBazaarng(self):
342        "Test darcs to bazaar-ng and the other way around"
343
344        self.tailorize('darcs2bzr')
345        self.tailorize('bzr2darcs')
346
347    def testDarcsToMercurial(self):
348        "Test darcs to mercurial"
349
350        self.tailorize('darcs2hg')
351
352    def testDarcsToCodeville(self):
353        "Test darcs to codeville"
354
355        self.tailorize('darcs2cdv')
356
357    def testDarcsAndSubversion(self):
358        "Test darcs to subversion and the other way around"
359
360        self.tailorize('darcs2svn')
361        self.tailorize('svn2darcs')
362
363    def testDarcsAndMonotone(self):
364        "Test darcs to monotone and the other way around"
365
366        self.tailorize('darcs2monotone')
367        self.tailorize('monotone2darcs')
368
369
370class Bazaarng(OperationalTest):
371    "Test the BazaarNG source backend"
372
373    def testBazaarngToDarcs(self):
374        "Test bazaar-ng to darcs"
375
376        self.tailorize('bazaarng2darcs')
377
378
379class Cvs(OperationalTest):
380    "Test the CVS source backend"
381
382    def testCvsToDarcs(self):
383        "Test CVS to darcs"
384
385        self.tailorize('cvs2darcs')
386
387    def testDarcsToCvs(self):
388        "Test Darcs to CVS"
389
390        self.tailorize('darcs2cvs')
391
392    def testCvsToMercurial(self):
393        "Test CVS to mercurial"
394
395        self.tailorize('cvs2hg')
396
397    def testCvsToBazaarng(self):
398        "Test CVS to bazaar-ng"
399
400        self.tailorize('cvs2bzr')
401
402    def testCvsToSubversion(self):
403        "Test CVS branch to Subversion"
404
405        self.tailorize('cvs2svn')
406
407
408class Svn(OperationalTest):
409    "Test the subversion backend"
410
411    def testExternals(self):
412        "Exercise svn to mercurial with and without svn:externals"
413
414        from os.path import exists
415
416        external = self.TESTDIR + '/svn2hg%s/test/make/docutils.make'
417        self.tailorize('svn2hg')
418        self.failIf(exists(external % ''))
419
420        self.tailorize('svn2hg_with_externals')
421        self.failUnless(exists(external % '_we'))
422
423
424class Svndump(OperationalTest):
425    "Test the svndump source backend (deprecated)"
426
427    def testSvndumpToDarcs(self):
428        "Test subversion dump to darcs"
429
430        self.tailorize('svndump2darcs')
431
432    def testSvndumpToMercurial(self):
433        "Test subversion dump to mercurial"
434
435        self.tailorize('svndump2hg')
436
437    def testPartialSvndumpToMercurial(self):
438        "Test partial subversion dump to mercurial"
439
440        self.tailorize('svndump2hg-partial')
Note: See TracBrowser for help on using the repository browser.