diff --git a/reviewboard/hostingsvcs/service.py b/reviewboard/hostingsvcs/service.py
index 610ad2d300d5d2067434d193a88c2cb95166ef2a..8da0682bdede0642a5178c2090069b8ae1a9dc08 100644
--- a/reviewboard/hostingsvcs/service.py
+++ b/reviewboard/hostingsvcs/service.py
@@ -97,6 +97,22 @@ class HostingService(object):
                   *args, **kwargs):
         raise NotImplementedError
 
+    def check_repository(self, path, username, password, scmtool_class,
+                         local_site_name, *args, **kwargs):
+        """Checks the validity of a repository configuration.
+
+        This performs a check against the hosting service or repository
+        to ensure that the information provided by the user represents
+        a valid repository.
+
+        This is passed in the repository details, such as the path and
+        raw credentials, as well as the SCMTool class being used, the
+        LocalSite's name (if any), and all field data from the
+        HostingServiceForm as keyword arguments.
+        """
+        return scmtool_class.check_repository(path, username, password,
+                                              local_site_name)
+
     def get_file(self, repository, path, revision, *args, **kwargs):
         if not self.supports_repositories:
             raise NotImplementedError
diff --git a/reviewboard/scmtools/forms.py b/reviewboard/scmtools/forms.py
index 2b5133ecddb60a82f03f0f6276b3fef60c4f0e82..4797e34f930e73e4b749a2b0d771c6f8da058059 100644
--- a/reviewboard/scmtools/forms.py
+++ b/reviewboard/scmtools/forms.py
@@ -1039,12 +1039,34 @@ class RepositoryForm(forms.ModelForm):
                 ['Repository path cannot be empty'])
             return
 
+        hosting_type = self.cleaned_data['hosting_type']
+        hosting_service_cls = get_hosting_service(hosting_type)
+        repository_extra_data = {}
+
+        if hosting_service_cls:
+            hosting_service = hosting_service_cls(
+                self.cleaned_data['hosting_account'])
+            plan = self.cleaned_data['repository_plan'] or self.DEFAULT_PLAN_ID
+
+            if hosting_type in self.repository_forms:
+                repository_extra_data = \
+                    self.repository_forms[hosting_type][plan].cleaned_data
+
         while 1:
             # Keep doing this until we have an error we don't want
             # to ignore, or it's successful.
             try:
-                scmtool_class.check_repository(path, username, password,
-                                               self.local_site_name)
+                if hosting_service:
+                    hosting_service.check_repository(
+                        path=path,
+                        username=username,
+                        password=password,
+                        scmtool_class=scmtool_class,
+                        local_site_name=self.local_site_name,
+                        **repository_extra_data)
+                else:
+                    scmtool_class.check_repository(path, username, password,
+                                                   self.local_site_name)
 
                 # Success.
                 break
