Mercurial > hgsubversion
comparison tests/test_util.py @ 304:ce676eff002b
First merge, totally untested.
| author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
|---|---|
| date | Fri, 01 May 2009 10:28:59 +0200 |
| parents | dc2bb6faf904 |
| children | 33736e2e25f0 |
comparison
equal
deleted
inserted
replaced
| 303:f423a8780832 | 304:ce676eff002b |
|---|---|
| 11 from mercurial import context | 11 from mercurial import context |
| 12 from mercurial import hg | 12 from mercurial import hg |
| 13 from mercurial import node | 13 from mercurial import node |
| 14 from mercurial import ui | 14 from mercurial import ui |
| 15 | 15 |
| 16 import fetch_command | 16 import wrappers |
| 17 import push_cmd | |
| 18 | 17 |
| 19 # Fixtures that need to be pulled at a subdirectory of the repo path | 18 # Fixtures that need to be pulled at a subdirectory of the repo path |
| 20 subdir = {'truncatedhistory.svndump': '/project2', | 19 subdir = {'truncatedhistory.svndump': '/project2', |
| 21 'fetch_missing_files_subdir.svndump': '/foo', | 20 'fetch_missing_files_subdir.svndump': '/foo', |
| 21 'empty_dir_in_trunk_not_repo_root.svndump': '/project', | |
| 22 } | 22 } |
| 23 | 23 |
| 24 FIXTURES = os.path.join(os.path.abspath(os.path.dirname(__file__)), | 24 FIXTURES = os.path.join(os.path.abspath(os.path.dirname(__file__)), |
| 25 'fixtures') | 25 'fixtures') |
| 26 | 26 |
| 43 inp = open(os.path.join(FIXTURES, fixture_name)) | 43 inp = open(os.path.join(FIXTURES, fixture_name)) |
| 44 proc.stdin.write(inp.read()) | 44 proc.stdin.write(inp.read()) |
| 45 proc.stdin.flush() | 45 proc.stdin.flush() |
| 46 proc.communicate() | 46 proc.communicate() |
| 47 | 47 |
| 48 def load_fixture_and_fetch(fixture_name, repo_path, wc_path, stupid=False, subdir=''): | 48 def load_fixture_and_fetch(fixture_name, repo_path, wc_path, stupid=False, subdir='', noupdate=True): |
| 49 load_svndump_fixture(repo_path, fixture_name) | 49 load_svndump_fixture(repo_path, fixture_name) |
| 50 if subdir: | 50 if subdir: |
| 51 repo_path += '/' + subdir | 51 repo_path += '/' + subdir |
| 52 fetch_command.fetch_revisions(ui.ui(), | 52 wrappers.clone(None, ui.ui(), source=fileurl(repo_path), |
| 53 svn_url=fileurl(repo_path), | 53 dest=wc_path, stupid=stupid, noupdate=noupdate) |
| 54 hg_repo_path=wc_path, | |
| 55 stupid=stupid) | |
| 56 repo = hg.repository(ui.ui(), wc_path) | 54 repo = hg.repository(ui.ui(), wc_path) |
| 57 return repo | 55 return repo |
| 58 | 56 |
| 59 def rmtree(path): | 57 def rmtree(path): |
| 60 # Read-only files cannot be removed under Windows | 58 # Read-only files cannot be removed under Windows |
| 73 | 71 |
| 74 | 72 |
| 75 class MockUI(object): | 73 class MockUI(object): |
| 76 real_ui = ui.ui | 74 real_ui = ui.ui |
| 77 _isatty = False | 75 _isatty = False |
| 78 def __init__(self, parentui=None): | 76 def __init__(self, src=None): |
| 79 self.stream = StringIO.StringIO() | 77 self.stream = StringIO.StringIO() |
| 80 self.inner_ui = self.real_ui(parentui=parentui) | 78 self.inner_ui = self.real_ui(src) |
| 81 | 79 |
| 82 def status(self, *args): | 80 def status(self, *args): |
| 83 self.stream.write(''.join(args)) | 81 self.stream.write(''.join(args)) |
| 84 | 82 |
| 85 def warn(self, *args): | 83 def warn(self, *args): |
| 86 self.stream.write(*args) | 84 self.stream.write(*args) |
| 87 | 85 |
| 88 def write(self, *args): | 86 def write(self, *args): |
| 89 self.stream.write(*args) | 87 self.stream.write(*args) |
| 88 | |
| 89 def copy(self): | |
| 90 return self.__class__(self.inner_ui) | |
| 90 | 91 |
| 91 def __getattr__(self, attr): | 92 def __getattr__(self, attr): |
| 92 return getattr(self.inner_ui, attr) | 93 return getattr(self.inner_ui, attr) |
| 93 | 94 |
| 94 | 95 |
| 95 class TestBase(unittest.TestCase): | 96 class TestBase(unittest.TestCase): |
| 96 def setUp(self): | 97 def setUp(self): |
| 97 self.oldwd = os.getcwd() | 98 self.oldwd = os.getcwd() |
| 98 self.tmpdir = tempfile.mkdtemp( | 99 self.tmpdir = tempfile.mkdtemp( |
| 99 'svnwrap_test', dir=os.environ.get('HGSUBVERSION_TEST_TEMP', None)) | 100 'svnwrap_test', dir=os.environ.get('HGSUBVERSION_TEST_TEMP', None)) |
| 101 self.hgrc = os.path.join(self.tmpdir, '.hgrc') | |
| 102 os.environ['HGRCPATH'] = self.hgrc | |
| 103 rc = open(self.hgrc, 'w') | |
| 104 rc.write('[extensions]\nhgsubversion=') | |
| 100 | 105 |
| 101 self.repo_path = '%s/testrepo' % self.tmpdir | 106 self.repo_path = '%s/testrepo' % self.tmpdir |
| 102 self.wc_path = '%s/testrepo_wc' % self.tmpdir | 107 self.wc_path = '%s/testrepo_wc' % self.tmpdir |
| 103 self._real_ui = ui.ui | 108 self._real_ui = ui.ui |
| 104 ui.ui = MockUI | 109 ui.ui = MockUI |
| 118 def repo(self): | 123 def repo(self): |
| 119 return hg.repository(ui.ui(), self.wc_path) | 124 return hg.repository(ui.ui(), self.wc_path) |
| 120 | 125 |
| 121 def pushrevisions(self, stupid=False): | 126 def pushrevisions(self, stupid=False): |
| 122 before = len(self.repo) | 127 before = len(self.repo) |
| 123 push_cmd.push_revisions_to_subversion( | 128 wrappers.push(None, ui.ui(), repo=self.repo, stupid=stupid) |
| 124 ui.ui(), repo=self.repo, hg_repo_path=self.wc_path, | |
| 125 svn_url=fileurl(self.repo_path), stupid=stupid) | |
| 126 after = len(self.repo) | 129 after = len(self.repo) |
| 127 self.assertEqual(0, after - before) | 130 self.assertEqual(0, after - before) |
| 128 | 131 |
| 129 def svnls(self, path, rev='HEAD'): | 132 def svnls(self, path, rev='HEAD'): |
| 130 path = self.repo_path + '/' + path | 133 path = self.repo_path + '/' + path |
| 138 raise Exception('svn ls failed on %s: %r' % (path, stderr)) | 141 raise Exception('svn ls failed on %s: %r' % (path, stderr)) |
| 139 entries = [e.strip('/') for e in stdout.splitlines()] | 142 entries = [e.strip('/') for e in stdout.splitlines()] |
| 140 entries.sort() | 143 entries.sort() |
| 141 return entries | 144 return entries |
| 142 | 145 |
| 143 def commitchanges(self, changes): | 146 def commitchanges(self, changes, parent='tip'): |
| 144 """Commit changes to mercurial directory | 147 """Commit changes to mercurial directory |
| 145 | 148 |
| 146 'changes' is a sequence of tuples (source, dest, data). It can look | 149 'changes' is a sequence of tuples (source, dest, data). It can look |
| 147 like: | 150 like: |
| 148 - (source, source, data) to set source content to data | 151 - (source, source, data) to set source content to data |
| 151 - (source, dest, data) to set dest content to data, and mark it as copied | 154 - (source, dest, data) to set dest content to data, and mark it as copied |
| 152 from source. | 155 from source. |
| 153 - (source, None, None) to remove source. | 156 - (source, None, None) to remove source. |
| 154 """ | 157 """ |
| 155 repo = self.repo | 158 repo = self.repo |
| 156 parentctx = repo['tip'] | 159 parentctx = repo[parent] |
| 157 | 160 |
| 158 changed, removed = [], [] | 161 changed, removed = [], [] |
| 159 for source, dest, newdata in changes: | 162 for source, dest, newdata in changes: |
| 160 if dest is None: | 163 if dest is None: |
| 161 removed.append(source) | 164 removed.append(source) |
| 185 filectxfn, | 188 filectxfn, |
| 186 'an_author', | 189 'an_author', |
| 187 '2008-10-07 20:59:48 -0500') | 190 '2008-10-07 20:59:48 -0500') |
| 188 nodeid = repo.commitctx(ctx) | 191 nodeid = repo.commitctx(ctx) |
| 189 repo = self.repo | 192 repo = self.repo |
| 190 hg.update(repo, nodeid) | 193 hg.clean(repo, nodeid) |
| 191 return nodeid | 194 return nodeid |
| 192 | 195 |
| 193 def assertchanges(self, changes, ctx): | 196 def assertchanges(self, changes, ctx): |
| 194 """Assert that all 'changes' (as in defined in commitchanged()) | 197 """Assert that all 'changes' (as in defined in commitchanged()) |
| 195 went into ctx. | 198 went into ctx. |
