2018-01-17 14:23:44 +03:00
|
|
|
import test_hgsubversion_util
|
2009-04-27 18:39:39 +04:00
|
|
|
|
2011-05-25 06:07:27 +04:00
|
|
|
from mercurial import node
|
2009-05-15 21:18:43 +04:00
|
|
|
from mercurial import util as hgutil
|
|
|
|
from mercurial import commands
|
2018-01-11 03:20:54 +03:00
|
|
|
from hgext.hgsubversion import verify
|
2009-04-27 18:39:39 +04:00
|
|
|
|
2018-01-17 14:23:44 +03:00
|
|
|
class TestPull(test_hgsubversion_util.TestBase):
|
2009-04-27 18:39:39 +04:00
|
|
|
def setUp(self):
|
|
|
|
super(TestPull, self).setUp()
|
|
|
|
|
2012-05-17 03:52:25 +04:00
|
|
|
def _loadupdate(self, fixture_name, *args, **kwargs):
|
|
|
|
kwargs = kwargs.copy()
|
2013-08-10 01:45:57 +04:00
|
|
|
kwargs.update(noupdate=False)
|
2012-05-17 03:52:25 +04:00
|
|
|
repo, repo_path = self.load_and_fetch(fixture_name, *args, **kwargs)
|
2012-04-19 20:29:29 +04:00
|
|
|
return repo, repo_path
|
2009-04-27 18:39:39 +04:00
|
|
|
|
|
|
|
def test_nochanges(self):
|
2012-04-19 20:29:25 +04:00
|
|
|
self._loadupdate('single_rev.svndump')
|
2016-05-24 00:15:58 +03:00
|
|
|
state = self.repo[None].parents()
|
2009-05-15 21:18:43 +04:00
|
|
|
commands.pull(self.repo.ui, self.repo)
|
2016-05-24 00:15:58 +03:00
|
|
|
self.assertEqual(state, self.repo[None].parents())
|
2009-04-27 18:39:39 +04:00
|
|
|
|
|
|
|
def test_onerevision_noupdate(self):
|
2012-04-19 20:29:29 +04:00
|
|
|
repo, repo_path = self._loadupdate('single_rev.svndump')
|
2016-05-24 00:15:58 +03:00
|
|
|
state = repo[None].parents()
|
2012-04-19 20:29:29 +04:00
|
|
|
self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
|
2009-05-15 21:18:43 +04:00
|
|
|
commands.pull(self.repo.ui, repo)
|
2016-05-24 00:15:58 +03:00
|
|
|
self.assertEqual(state, repo[None].parents())
|
2015-07-09 08:00:57 +03:00
|
|
|
self.assertTrue('tip' not in repo['.'].tags())
|
2011-05-25 00:20:56 +04:00
|
|
|
|
2009-04-27 18:39:39 +04:00
|
|
|
def test_onerevision_doupdate(self):
|
2012-04-19 20:29:29 +04:00
|
|
|
repo, repo_path = self._loadupdate('single_rev.svndump')
|
2016-05-24 00:15:58 +03:00
|
|
|
state = repo[None].parents()
|
2012-04-19 20:29:29 +04:00
|
|
|
self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
|
2009-05-15 21:18:43 +04:00
|
|
|
commands.pull(self.repo.ui, repo, update=True)
|
2016-05-24 00:15:58 +03:00
|
|
|
self.failIfEqual(state, repo[None].parents())
|
2015-07-09 08:00:57 +03:00
|
|
|
self.assertTrue('tip' in repo['.'].tags())
|
2009-04-27 18:39:39 +04:00
|
|
|
|
|
|
|
def test_onerevision_divergent(self):
|
2012-04-19 20:29:29 +04:00
|
|
|
repo, repo_path = self._loadupdate('single_rev.svndump')
|
2009-04-27 18:39:39 +04:00
|
|
|
self.commitchanges((('alpha', 'alpha', 'Changed another way'),))
|
2016-05-24 00:15:58 +03:00
|
|
|
state = repo[None].parents()
|
2012-04-19 20:29:29 +04:00
|
|
|
self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed one way'})
|
2011-06-15 16:44:14 +04:00
|
|
|
try:
|
|
|
|
commands.pull(self.repo.ui, repo, update=True)
|
|
|
|
except hgutil.Abort:
|
|
|
|
# hg < 1.9 raised when crossing branches
|
|
|
|
pass
|
2016-05-24 00:15:58 +03:00
|
|
|
self.assertEqual(state, repo[None].parents())
|
2015-07-09 08:00:57 +03:00
|
|
|
self.assertTrue('tip' not in repo['.'].tags())
|
2009-04-27 18:39:39 +04:00
|
|
|
self.assertEqual(len(repo.heads()), 2)
|
|
|
|
|
2011-05-25 06:07:27 +04:00
|
|
|
def test_tag_repull_doesnt_happen(self):
|
2012-04-19 20:29:29 +04:00
|
|
|
repo = self._loadupdate('branchtagcollision.svndump')[0]
|
2011-05-25 06:07:27 +04:00
|
|
|
oldheads = map(node.hex, repo.heads())
|
|
|
|
commands.pull(repo.ui, repo)
|
2014-04-05 05:27:55 +04:00
|
|
|
self.assertEqual(oldheads, map(node.hex, repo.heads()))
|
|
|
|
|
|
|
|
def test_pull_with_secret_default(self):
|
|
|
|
repo = self._loadupdate('branchtagcollision.svndump',
|
|
|
|
config={'phases.new-commit': 'secret'})[0]
|
|
|
|
oldheads = map(node.hex, repo.heads())
|
|
|
|
commands.pull(repo.ui, repo)
|
2011-05-25 06:07:27 +04:00
|
|
|
self.assertEqual(oldheads, map(node.hex, repo.heads()))
|
|
|
|
|
2012-05-17 03:52:25 +04:00
|
|
|
def test_skip_basic(self):
|
|
|
|
repo, repo_path = self._loadupdate('single_rev.svndump')
|
|
|
|
self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
|
|
|
|
self.add_svn_rev(repo_path, {'trunk/beta': 'More changed'})
|
|
|
|
self.add_svn_rev(repo_path, {'trunk/gamma': 'Even more changeder'})
|
|
|
|
repo.ui.setconfig('hgsubversion', 'unsafeskip', '3 4')
|
|
|
|
commands.pull(repo.ui, repo)
|
|
|
|
tip = repo['tip'].rev()
|
|
|
|
self.assertEqual(tip, 1)
|
|
|
|
self.assertEquals(verify.verify(repo.ui, repo, rev=tip), 1)
|
|
|
|
|
|
|
|
def test_skip_delete_restore(self):
|
|
|
|
repo, repo_path = self._loadupdate('delete_restore_trunk.svndump',
|
|
|
|
rev=2)
|
|
|
|
repo.ui.setconfig('hgsubversion', 'unsafeskip', '3 4')
|
|
|
|
commands.pull(repo.ui, repo)
|
|
|
|
tip = repo['tip'].rev()
|
|
|
|
self.assertEqual(tip, 1)
|
|
|
|
self.assertEquals(verify.verify(repo.ui, repo, rev=tip), 0)
|