# HG changeset patch # User Dan Villiom Podlaski Christiansen # Date 1290085406 -3600 # Node ID caa527346a0fe6d97925c947ce3656bf9d1ef0a7 # Parent b218d2bb8c45e4fbe24ff2ddd2e472b8c0e60766 svncommands: abort on missing metadata or Subversion URL (fixes #226) diff --git a/hgsubversion/svncommands.py b/hgsubversion/svncommands.py --- a/hgsubversion/svncommands.py +++ b/hgsubversion/svncommands.py @@ -89,7 +89,8 @@ def rebuildmeta(ui, repo, args, **opts): elif len(args) > 1: raise hgutil.Abort('rebuildmeta takes 1 or no arguments') uuid = None - url = repo.ui.expandpath(dest or 'default-push', dest or 'default') + url = repo.ui.expandpath(dest or repo.ui.config('paths', 'default-push') or + repo.ui.config('paths', 'default') or '') svn = svnrepo.svnremoterepo(ui, url).svn subdir = svn.subdir svnmetadir = os.path.join(repo.path, 'svn') diff --git a/hgsubversion/svnrepo.py b/hgsubversion/svnrepo.py --- a/hgsubversion/svnrepo.py +++ b/hgsubversion/svnrepo.py @@ -78,6 +78,8 @@ class svnremoterepo(mercurial.repo.repos self.ui = ui if path is None: path = self.ui.config('paths', 'default') + if not path: + raise hgutil.Abort('no Subversion URL specified') self.path = path self.capabilities = set(['lookup', 'subversion']) diff --git a/hgsubversion/util.py b/hgsubversion/util.py --- a/hgsubversion/util.py +++ b/hgsubversion/util.py @@ -82,6 +82,8 @@ def version(ui): def normalize_url(url): + if not url: + return url if url.startswith('svn+http://') or url.startswith('svn+https://'): url = url[4:] url, revs, checkout = parseurl(url) diff --git a/tests/test_utility_commands.py b/tests/test_utility_commands.py --- a/tests/test_utility_commands.py +++ b/tests/test_utility_commands.py @@ -82,13 +82,31 @@ class UtilityTests(test_util.TestBase): }) self.assertMultiLineEqual(expected, actual) - def test_info_missing_metadata(self): - repo = self._load_fixture_and_fetch('two_heads.svndump') - test_util.rmtree(repo.join('svn')) + def test_missing_metadata(self): + self._load_fixture_and_fetch('two_heads.svndump') + test_util.rmtree(self.repo.join('svn')) + self.assertRaises(hgutil.Abort, + self.repo.svnmeta) + self.assertRaises(hgutil.Abort, + svncommands.info, + self.ui(), repo=self.repo, args=[]) + self.assertRaises(hgutil.Abort, + svncommands.genignore, + self.ui(), repo=self.repo, args=[]) + + os.remove(self.repo.join('hgrc')) + self.assertRaises(hgutil.Abort, + self.repo.svnmeta) self.assertRaises(hgutil.Abort, - repo.svnmeta) + svncommands.info, + self.ui(), repo=self.repo, args=[]) + self.assertRaises(hgutil.Abort, + svncommands.genignore, + self.ui(), repo=self.repo, args=[]) + self.assertRaises(hgutil.Abort, - svncommands.info, self.ui, self.repo) + svncommands.rebuildmeta, + self.ui(), repo=self.repo, args=[]) def test_parent_output(self): self._load_fixture_and_fetch('two_heads.svndump')