diff --git a/src/rosdistro/rosdistro.py b/src/rosdistro/rosdistro.py index 4033ac25b..c8bba47ad 100644 --- a/src/rosdistro/rosdistro.py +++ b/src/rosdistro/rosdistro.py @@ -197,6 +197,8 @@ def __init__(self, name, repository): def _fetch_package_xml(self, rosdistro): repo = self.repository + supported_non_githubs = [ 'gitlab', 'bitbucket' ] + if 'github.com' in repo.url: url = repo.url release_tag = 'release/{0}/{1}/{2}'.format(rosdistro, self.name, repo.version) @@ -222,7 +224,22 @@ def _fetch_package_xml(self, rosdistro): self._release_tags[rosdistro] = release_tag return package_xml, release_tag else: - raise Exception("Non-github repositories are net yet supported by the rosdistro tool") + release_tag = 'release/{0}/{1}/{2}'.format(rosdistro, self.name, repo.version) + for nongithub in supported_non_githubs: + url = repo.url + try: + url = url.replace('.git', { + 'gitlab' : '/raw/{0}/package.xml', + 'bitbucket' : '/raw/{0}/package.xml' + }[nongithub].format(release_tag)) + package_xml = urlopen(url).read() + self._package_xmls[rosdistro] = package_xml + self._release_tags[rosdistro] = release_tag + return package_xml, release_tag + except Exception as e: + # If we get here, try the next one. + pass + raise Exception('Failed to identify non-github repository type!') def get_package_xml(self, rosdistro): if rosdistro not in self._package_xmls: