comparison tests/comprehensive/test_rebuildmeta.py @ 1255:139a44a63090 stable 1.7

Merge default into stable for a release.
author Augie Fackler <raf@durin42.com>
date Wed, 05 Nov 2014 12:48:59 -0500
parents 11c8de73b48a
children c6b01fd34694
comparison
equal deleted inserted replaced
1230:807c443928d4 1255:139a44a63090
1 import os 1 import os
2 import pickle
3 import unittest 2 import unittest
4 import sys 3 import sys
5 4
6 # wrapped in a try/except because of weirdness in how 5 # wrapped in a try/except because of weirdness in how
7 # run.py works as compared to nose. 6 # run.py works as compared to nose.
12 import test_util 11 import test_util
13 12
14 from mercurial import context 13 from mercurial import context
15 from mercurial import extensions 14 from mercurial import extensions
16 from mercurial import hg 15 from mercurial import hg
16 from mercurial import localrepo
17 from mercurial import ui 17 from mercurial import ui
18 from mercurial import util as hgutil
18 19
19 from hgsubversion import compathacks 20 from hgsubversion import compathacks
20 from hgsubversion import svncommands 21 from hgsubversion import svncommands
21 from hgsubversion import svnmeta 22 from hgsubversion import svnmeta
23 from hgsubversion import util
22 24
23 # These test repositories have harmless skew in rebuildmeta for the 25 # These test repositories have harmless skew in rebuildmeta for the
24 # last-pulled-rev because the last rev in svn causes absolutely no 26 # last-pulled-rev because the last rev in svn causes absolutely no
25 # changes in hg. 27 # changes in hg.
26 expect_youngest_skew = [('file_mixed_with_branches.svndump', False, False), 28 expect_youngest_skew = [('file_mixed_with_branches.svndump', False, False),
83 subdir), ]) 85 subdir), ])
84 finally: 86 finally:
85 # remove the wrapper 87 # remove the wrapper
86 context.changectx.children = origchildren 88 context.changectx.children = origchildren
87 89
88 dest.pull(src) 90 if hgutil.safehasattr(localrepo.localrepository, 'pull'):
91 dest.pull(src)
92 else:
93 # Mercurial >= 3.2
94 from mercurial import exchange
95 exchange.pull(dest, src)
89 96
90 # insert a wrapper that prevents calling changectx.children() 97 # insert a wrapper that prevents calling changectx.children()
91 extensions.wrapfunction(context.changectx, 'children', failfn) 98 extensions.wrapfunction(context.changectx, 'children', failfn)
92 try: 99 try:
93 svncommands.updatemeta(u, dest, 100 svncommands.updatemeta(u, dest,
108 'no .hg/svn directory in the destination!') 115 'no .hg/svn directory in the destination!')
109 dest = hg.repository(u, os.path.dirname(dest.path)) 116 dest = hg.repository(u, os.path.dirname(dest.path))
110 for tf in ('lastpulled', 'rev_map', 'uuid', 'tagmap', 'layout', 'subdir',): 117 for tf in ('lastpulled', 'rev_map', 'uuid', 'tagmap', 'layout', 'subdir',):
111 118
112 stf = os.path.join(src.path, 'svn', tf) 119 stf = os.path.join(src.path, 'svn', tf)
113 self.assertTrue(os.path.isfile(stf), '%r is missing!' % stf) 120 # the generation of tagmap is lazy so it doesn't strictly need to exist
121 # if it's not being used
122 if not stf.endswith('tagmap'):
123 self.assertTrue(os.path.isfile(stf), '%r is missing!' % stf)
114 dtf = os.path.join(dest.path, 'svn', tf) 124 dtf = os.path.join(dest.path, 'svn', tf)
115 self.assertTrue(os.path.isfile(dtf), '%r is missing!' % tf) 125 old, new = None, None
116 old, new = open(stf).read(), open(dtf).read() 126 if not dtf.endswith('tagmap'):
127 self.assertTrue(os.path.isfile(dtf), '%r is missing!' % tf)
128 if os.path.isfile(stf) and os.path.isfile(dtf):
129 old, new = util.load(stf, resave=False), util.load(dtf, resave=False)
117 if tf == 'lastpulled' and (name, 130 if tf == 'lastpulled' and (name,
118 self.stupid, single) in expect_youngest_skew: 131 self.stupid, single) in expect_youngest_skew:
119 self.assertNotEqual(old, new, 132 self.assertNotEqual(old, new,
120 'rebuildmeta unexpected match on youngest rev!') 133 'rebuildmeta unexpected match on youngest rev!')
121 continue 134 continue
122 self.assertMultiLineEqual(old, new, tf + ' differs') 135 self.assertEqual(old, new, tf + ' differs')
123 try: 136 try:
124 self.assertEqual(src.branchmap(), dest.branchmap()) 137 self.assertEqual(src.branchmap(), dest.branchmap())
125 except AttributeError: 138 except AttributeError:
126 # hg 2.8 and earlier 139 # hg 2.8 and earlier
127 self.assertEqual(src.branchtags(), dest.branchtags()) 140 self.assertEqual(src.branchtags(), dest.branchtags())
128 srcbi = pickle.load(open(os.path.join(src.path, 'svn', 'branch_info'))) 141 srcbi = util.load(os.path.join(src.path, 'svn', 'branch_info'))
129 destbi = pickle.load(open(os.path.join(dest.path, 'svn', 'branch_info'))) 142 destbi = util.load(os.path.join(dest.path, 'svn', 'branch_info'))
130 self.assertEqual(sorted(srcbi.keys()), sorted(destbi.keys())) 143 self.assertEqual(sorted(srcbi.keys()), sorted(destbi.keys()))
131 revkeys = svnmeta.SVNMeta(dest).revmap.keys() 144 revkeys = svnmeta.SVNMeta(dest).revmap.keys()
132 for branch in destbi: 145 for branch in destbi:
133 srcinfo = srcbi[branch] 146 srcinfo = srcbi[branch]
134 destinfo = destbi[branch] 147 destinfo = destbi[branch]