You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/07/24 00:36:31 UTC
[15/27] git commit: [#6463] Move get_repo_type() to Extractor and add
import guards
[#6463] Move get_repo_type() to Extractor and add import guards
Signed-off-by: Tim Van Steenburgh <tv...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/62099e2d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/62099e2d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/62099e2d
Branch: refs/heads/cj/6456
Commit: 62099e2d9dd567a928143c977bf2bd40f2f8ee73
Parents: 97e46b9
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Tue Jul 23 16:58:48 2013 +0000
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Tue Jul 23 16:58:48 2013 +0000
----------------------------------------------------------------------
.../forgeimporters/google/__init__.py | 13 +++++++
ForgeImporters/forgeimporters/google/code.py | 39 +++++++++-----------
.../forgeimporters/google/tests/test_code.py | 31 +---------------
.../tests/google/test_extractor.py | 27 ++++++++++++++
4 files changed, 59 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62099e2d/ForgeImporters/forgeimporters/google/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/__init__.py b/ForgeImporters/forgeimporters/google/__init__.py
index 4d264e4..49aa907 100644
--- a/ForgeImporters/forgeimporters/google/__init__.py
+++ b/ForgeImporters/forgeimporters/google/__init__.py
@@ -15,6 +15,7 @@
# specific language governing permissions and limitations
# under the License.
+import re
import urllib
import urllib2
from urlparse import urlparse
@@ -30,6 +31,8 @@ from allura import model as M
class GoogleCodeProjectExtractor(object):
+ RE_REPO_TYPE = re.compile(r'(svn|hg|git)')
+
PAGE_MAP = {
'project_info': 'http://code.google.com/p/%s/',
'source_browse': 'http://code.google.com/p/%s/source/browse/',
@@ -72,3 +75,13 @@ class GoogleCodeProjectExtractor(object):
trove = M.TroveCategory.query.get(fullname=self.LICENSE_MAP[license])
self.project.trove_license.append(trove._id)
+ def get_repo_type(self):
+ repo_type = self.page.find(id="crumb_root")
+ if not repo_type:
+ raise Exception("Couldn't detect repo type: no #crumb_root in "
+ "{0}".format(self.url))
+ re_match = self.RE_REPO_TYPE.match(repo_type.text.lower())
+ if re_match:
+ return re_match.group(0)
+ else:
+ raise Exception("Unknown repo type: {0}".format(repo_type.text))
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62099e2d/ForgeImporters/forgeimporters/google/code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/code.py b/ForgeImporters/forgeimporters/google/code.py
index 3c2e484..29951a6 100644
--- a/ForgeImporters/forgeimporters/google/code.py
+++ b/ForgeImporters/forgeimporters/google/code.py
@@ -15,8 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-import re
-
import formencode as fe
from formencode import validators as fev
@@ -34,15 +32,26 @@ from tg.decorators import (
from allura.controllers import BaseController
from allura.lib.decorators import require_post
-from forgehg.hg_main import ForgeHgApp
-from forgegit.git_main import ForgeGitApp
-from forgesvn.svn_main import ForgeSVNApp
-
from forgeimporters.base import ToolImporter
from forgeimporters.google import GoogleCodeProjectExtractor
+TARGET_APPS = []
+try:
+ from forgehg.hg_main import ForgeHgApp
+ TARGET_APPS.append(ForgeHgApp)
+except ImportError:
+ pass
+try:
+ from forgegit.git_main import ForgeGitApp
+ TARGET_APPS.append(ForgeGitApp)
+except ImportError:
+ pass
+try:
+ from forgesvn.svn_main import ForgeSVNApp
+ TARGET_APPS.append(ForgeSVNApp)
+except ImportError:
+ pass
-RE_REPO_TYPE = re.compile(r'(svn|hg|git)')
REPO_URLS = {
'svn': 'http://{0}.googlecode.com/svn/trunk/',
'git': 'https://code.google.com/p/{0}/',
@@ -59,18 +68,6 @@ def get_repo_url(project_name, type_):
return REPO_URLS[type_].format(project_name)
-def get_repo_type(extractor):
- repo_type = extractor.page.find(id="crumb_root")
- if not repo_type:
- raise Exception("Couldn't detect repo type: no #crumb_root in "
- "{0}".format(extractor.url))
- re_match = RE_REPO_TYPE.match(repo_type.text.lower())
- if re_match:
- return re_match.group(0)
- else:
- raise Exception("Unknown repo type: {0}".format(repo_type.text))
-
-
class GoogleRepoImportSchema(fe.Schema):
gc_project_name = fev.UnicodeString(not_empty=True)
mount_point = fev.UnicodeString()
@@ -96,7 +93,7 @@ class GoogleRepoImportController(BaseController):
class GoogleRepoImporter(ToolImporter):
- target_app = (ForgeHgApp, ForgeGitApp, ForgeSVNApp)
+ target_app = TARGET_APPS
source = 'Google Code'
controller = GoogleRepoImportController
tool_label = 'Google Code Source Importer'
@@ -111,7 +108,7 @@ class GoogleRepoImporter(ToolImporter):
if not project.get_tool_data('google-code', 'project_name'):
raise Exception("Missing Google Code project name")
extractor = GoogleCodeProjectExtractor(project, page='source_browse')
- repo_type = get_repo_type(extractor)
+ repo_type = extractor.get_repo_type()
repo_url = get_repo_url(project.get_tool_data('google-code',
'project_name'), repo_type)
return project.install_app(
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62099e2d/ForgeImporters/forgeimporters/google/tests/test_code.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/google/tests/test_code.py b/ForgeImporters/forgeimporters/google/tests/test_code.py
index 1459290..a2d9a54 100644
--- a/ForgeImporters/forgeimporters/google/tests/test_code.py
+++ b/ForgeImporters/forgeimporters/google/tests/test_code.py
@@ -6,7 +6,6 @@ from forgesvn.tests import with_svn
from forgeimporters.google.code import (
get_repo_url,
- get_repo_type,
GoogleRepoImporter,
GoogleRepoImportController,
)
@@ -27,34 +26,6 @@ class TestGetRepoUrl(TestCase):
self.assertEqual(r, 'https://code.google.com/p/projname/')
-class TestRepoType(TestCase):
-
- def _make_extractor(self, html):
- from BeautifulSoup import BeautifulSoup
- return Mock(page=BeautifulSoup(html),
- url="http://test/source/browse")
-
- def test_happy_path(self):
- extractor = self._make_extractor(
- '<span id="crumb_root">\nsvn/ </span>')
- self.assertEqual('svn', get_repo_type(extractor))
-
- def test_no_crumb_root(self):
- extractor = self._make_extractor('')
- with self.assertRaises(Exception) as cm:
- get_repo_type(extractor)
- self.assertEqual(str(cm.exception),
- "Couldn't detect repo type: no #crumb_root in "
- "http://test/source/browse")
-
- def test_unknown_repo_type(self):
- extractor = self._make_extractor(
- '<span id="crumb_root">cvs</span>')
- with self.assertRaises(Exception) as cm:
- get_repo_type(extractor)
- self.assertEqual(str(cm.exception), "Unknown repo type: cvs")
-
-
class TestGoogleRepoImporter(TestCase):
def _make_project(self, gc_proj_name=None):
@@ -62,7 +33,7 @@ class TestGoogleRepoImporter(TestCase):
project.get_tool_data.side_effect = lambda *args: gc_proj_name
return project
- @patch('forgeimporters.google.code.get_repo_type')
+ @patch('forgeimporters.google.code.GoogleCodeProjectExtractor.get_repo_type')
@patch('forgeimporters.google.code.get_repo_url')
def test_import_tool_happy_path(self, get_repo_url, get_repo_type):
get_repo_type.return_value = 'git'
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/62099e2d/ForgeImporters/forgeimporters/tests/google/test_extractor.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/google/test_extractor.py b/ForgeImporters/forgeimporters/tests/google/test_extractor.py
index f03c82c..e346f1e 100644
--- a/ForgeImporters/forgeimporters/tests/google/test_extractor.py
+++ b/ForgeImporters/forgeimporters/tests/google/test_extractor.py
@@ -91,3 +91,30 @@ class TestGoogleCodeProjectExtractor(TestCase):
extractor.page.find.return_value.findNext.return_value.find.return_value.string = 'non-existant license'
extractor.get_license()
M.TroveCategory.query.get.assert_called_once_with(fullname='Other/Proprietary License')
+
+ def _make_extractor(self, html):
+ from BeautifulSoup import BeautifulSoup
+ extractor = google.GoogleCodeProjectExtractor(self.project)
+ extractor.page = BeautifulSoup(html)
+ extractor.url="http://test/source/browse"
+ return extractor
+
+ def test_get_repo_type_happy_path(self):
+ extractor = self._make_extractor(
+ '<span id="crumb_root">\nsvn/ </span>')
+ self.assertEqual('svn', extractor.get_repo_type())
+
+ def test_get_repo_type_no_crumb_root(self):
+ extractor = self._make_extractor('')
+ with self.assertRaises(Exception) as cm:
+ extractor.get_repo_type()
+ self.assertEqual(str(cm.exception),
+ "Couldn't detect repo type: no #crumb_root in "
+ "http://test/source/browse")
+
+ def test_get_repo_type_unknown_repo_type(self):
+ extractor = self._make_extractor(
+ '<span id="crumb_root">cvs</span>')
+ with self.assertRaises(Exception) as cm:
+ extractor.get_repo_type()
+ self.assertEqual(str(cm.exception), "Unknown repo type: cvs")