mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
5a73bf5843
Summary: This migration allows `./run-tests.py` to run `hgsubversion` tests. Since hgsubversion tests are actually python unittests, we don't care about their output at all, they fail differently. But the behavior of the test suite require us to match whatever the tests prints. We do this later in the stack. Depends on D6719886 Test Plan: - check that tests are runnable at least Reviewers: #sourcecontrol Differential Revision: https://phabricator.intern.facebook.com/D6719890
216 lines
10 KiB
Python
216 lines
10 KiB
Python
# no-check-code -- see T24862348
|
|
|
|
import test_hgsubversion_util
|
|
|
|
import errno
|
|
|
|
from mercurial import commands
|
|
from mercurial import context
|
|
from mercurial import hg
|
|
from mercurial import node
|
|
|
|
from hgext.hgsubversion import compathacks
|
|
|
|
class TestSingleDirPush(test_hgsubversion_util.TestBase):
|
|
stupid_mode_tests = True
|
|
obsolete_mode_tests = True
|
|
|
|
def test_push_single_dir(self):
|
|
# Tests simple pushing from default branch to a single dir repo
|
|
repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
|
|
layout='single',
|
|
subdir='')
|
|
def file_callback(repo, memctx, path):
|
|
if path == 'adding_file':
|
|
return compathacks.makememfilectx(repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data='foo',
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False)
|
|
elif path == 'adding_binary':
|
|
return compathacks.makememfilectx(repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data='\0binary',
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False)
|
|
raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
|
|
ctx = context.memctx(repo,
|
|
(repo['tip'].node(), node.nullid),
|
|
'automated test',
|
|
['adding_file', 'adding_binary'],
|
|
file_callback,
|
|
'an_author',
|
|
'2009-10-19 18:49:30 -0500',
|
|
{'branch': 'default', })
|
|
repo.commitctx(ctx)
|
|
hg.update(repo, repo['tip'].node())
|
|
self.pushrevisions()
|
|
self.assertTrue('adding_file' in test_hgsubversion_util.svnls(repo_path, ''))
|
|
self.assertEqual('application/octet-stream',
|
|
test_hgsubversion_util.svnpropget(repo_path, 'adding_binary',
|
|
'svn:mime-type'))
|
|
# Now add another commit and test mime-type being reset
|
|
changes = [('adding_binary', 'adding_binary', 'no longer binary')]
|
|
self.commitchanges(changes)
|
|
self.pushrevisions()
|
|
self.assertEqual('', test_hgsubversion_util.svnpropget(repo_path, 'adding_binary',
|
|
'svn:mime-type'))
|
|
|
|
def test_push_single_dir_at_subdir(self):
|
|
repo = self._load_fixture_and_fetch('branch_from_tag.svndump',
|
|
layout='single',
|
|
subdir='trunk')
|
|
def filectxfn(repo, memctx, path):
|
|
return compathacks.makememfilectx(repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data='contents of %s' % path,
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False)
|
|
ctx = context.memctx(repo,
|
|
(repo['tip'].node(), node.nullid),
|
|
'automated test',
|
|
['bogus'],
|
|
filectxfn,
|
|
'an_author',
|
|
'2009-10-19 18:49:30 -0500',
|
|
{'branch': 'localhacking', })
|
|
# Why is this here? Revisit! T24862348
|
|
repo.commitctx(ctx)
|
|
self.assertEqual(self.repo['tip']['bogus'].data(),
|
|
'contents of bogus')
|
|
before = repo['tip'].hex()
|
|
hg.update(repo, self.repo['tip'].hex())
|
|
self.pushrevisions()
|
|
self.assertNotEqual(before, self.repo['tip'].hex())
|
|
self.assertEqual(self.repo['tip']['bogus'].data(),
|
|
'contents of bogus')
|
|
|
|
def test_push_single_dir_one_incoming_and_two_outgoing(self):
|
|
# Tests simple pushing from default branch to a single dir repo
|
|
# Pushes two outgoing over one incoming svn rev
|
|
# (used to cause an "unknown revision")
|
|
# This can happen if someone committed to svn since our last pull (race).
|
|
repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
|
|
layout='single',
|
|
subdir='trunk')
|
|
self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
|
|
def file_callback(repo, memctx, path):
|
|
return compathacks.makememfilectx(repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data='data of %s' % path,
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False)
|
|
for fn in ['one', 'two']:
|
|
ctx = context.memctx(repo,
|
|
(repo['tip'].node(), node.nullid),
|
|
'automated test',
|
|
[fn],
|
|
file_callback,
|
|
'an_author',
|
|
'2009-10-19 18:49:30 -0500',
|
|
{'branch': 'default', })
|
|
repo.commitctx(ctx)
|
|
hg.update(repo, repo['tip'].node())
|
|
self.pushrevisions(expected_extra_back=1)
|
|
self.assertTrue('trunk/one' in test_hgsubversion_util.svnls(repo_path, ''))
|
|
self.assertTrue('trunk/two' in test_hgsubversion_util.svnls(repo_path, ''))
|
|
|
|
def test_push_single_dir_branch(self):
|
|
# Tests local branches pushing to a single dir repo. Creates a fork at
|
|
# tip. The default branch adds a file called default, while branch foo
|
|
# adds a file called foo, then tries to push the foo branch and default
|
|
# branch in that order.
|
|
repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
|
|
layout='single',
|
|
subdir='')
|
|
def file_callback(data):
|
|
def cb(repo, memctx, path):
|
|
if path == data:
|
|
return compathacks.makememfilectx(repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data=data,
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False)
|
|
raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
|
|
return cb
|
|
|
|
def commit_to_branch(name, parent):
|
|
repo.commitctx(context.memctx(repo,
|
|
(parent, node.nullid),
|
|
'automated test (%s)' % name,
|
|
[name],
|
|
file_callback(name),
|
|
'an_author',
|
|
'2009-10-19 18:49:30 -0500',
|
|
{'branch': name, }))
|
|
|
|
parent = repo['tip'].node()
|
|
commit_to_branch('default', parent)
|
|
commit_to_branch('foo', parent)
|
|
hg.update(repo, repo['foo'].node())
|
|
self.pushrevisions()
|
|
repo = self.repo # repo is outdated after the rebase happens, refresh
|
|
self.assertTrue('foo' in test_hgsubversion_util.svnls(repo_path, ''))
|
|
self.assertEqual(compathacks.branchset(repo), set(['default']))
|
|
# Have to cross to another branch head, so hg.update doesn't work
|
|
commands.update(self.ui(),
|
|
self.repo,
|
|
self.repo.branchheads('default')[1],
|
|
clean=True)
|
|
self.pushrevisions()
|
|
self.assertTrue('default' in test_hgsubversion_util.svnls(repo_path, ''))
|
|
self.assertEquals(len(self.repo.branchheads('default')), 1)
|
|
|
|
@test_hgsubversion_util.requiresoption('branch')
|
|
def test_push_single_dir_renamed_branch(self):
|
|
# Tests pulling and pushing with a renamed branch
|
|
# Based on test_push_single_dir
|
|
repo_path = self.load_svndump('branch_from_tag.svndump')
|
|
cmd = ['clone', '--quiet', '--layout=single', '--branch=flaf']
|
|
if self.stupid:
|
|
cmd.append('--stupid')
|
|
cmd += [test_hgsubversion_util.fileurl(repo_path), self.wc_path]
|
|
test_hgsubversion_util.dispatch(cmd)
|
|
|
|
def file_callback(repo, memctx, path):
|
|
if path == 'adding_file':
|
|
return compathacks.makememfilectx(repo,
|
|
memctx=memctx,
|
|
path=path,
|
|
data='foo',
|
|
islink=False,
|
|
isexec=False,
|
|
copied=False)
|
|
raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
|
|
lr = self.repo
|
|
ctx = context.memctx(lr,
|
|
(lr['tip'].node(), node.nullid),
|
|
'automated test',
|
|
['adding_file'],
|
|
file_callback,
|
|
'an_author',
|
|
'2009-10-19 18:49:30 -0500',
|
|
{'branch': 'default', })
|
|
lr.commitctx(ctx)
|
|
hg.update(self.repo, self.repo['tip'].node())
|
|
self.pushrevisions()
|
|
self.assertTrue('adding_file' in test_hgsubversion_util.svnls(repo_path, ''))
|
|
|
|
self.assertEquals(set(['flaf']),
|
|
set(self.repo[i].branch() for i in self.repo))
|
|
|
|
if __name__ == '__main__':
|
|
import silenttestrunner
|
|
silenttestrunner.main(__name__)
|
|
|