Skip to content

Commit 43ba58a

Browse files
committed
distro: introduce raw URL formatters
Refactor GitHub formatting code and add GitLab formatter.
1 parent 4d9015c commit 43ba58a

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

vinca/distro.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,39 @@ def get_package_xml_for_additional_package(self, pkg_info):
215215
return xml_content
216216
except Exception as e:
217217
raise RuntimeError(f"Failed to fetch package.xml from {raw_url}: {e}")
218+
219+
# Based on https://github.com/ros-infrastructure/rosdistro/blob/fad8d9f647631945847cb18bc1d1f43008d7a282/src/rosdistro/manifest_provider/github.py#L51C1-L69C29
220+
# But with the option to specify the name of the package.xml file in case the repo uses a non-standard name
221+
def _construct_raw_url_github(self, pkg_info):
222+
# Build raw GitHub URL for package.xml
223+
raw_url_base = pkg_info.get("url")
224+
if raw_url_base.endswith(".git"):
225+
raw_url_base = raw_url_base[:-4]
226+
if "github.com" not in raw_url_base:
227+
raise RuntimeError(f"Cannot handle non-GitHub URL: {raw_url_base}")
228+
# Extract owner/repo
229+
owner_repo = raw_url_base.split("github.com/")[-1]
230+
# Use rev if available, otherwise fallback to tag
231+
ref = pkg_info.get("rev") or pkg_info.get("tag")
232+
xml_name = pkg_info.get("package_xml_name", "package.xml")
233+
additional_folder = pkg_info.get("additional_folder", "")
234+
if additional_folder != "":
235+
additional_folder = additional_folder + "/"
236+
raw_url = f"https://raw.githubusercontent.com/{owner_repo}/{ref}/{additional_folder}{xml_name}"
237+
return raw_url
238+
239+
# format (checked against GitLab 19.x): https://gitlab.com/<NAMESPACE>/-/raw/<REV>/<PATH>
240+
def _construct_raw_url_gitlab(self, pkg_info):
241+
raw_url_base = pkg_info.get("url")
242+
if raw_url_base.endswith(".git"):
243+
raw_url_base = raw_url_base[:-4]
244+
if "gitlab.com" not in raw_url_base:
245+
raise RuntimeError(f"Cannot handle non-GitLab URL: {raw_url_base}")
246+
# Use rev if available, otherwise fallback to tag
247+
ref = pkg_info.get("rev") or pkg_info.get("tag")
248+
xml_name = pkg_info.get("package_xml_name", "package.xml")
249+
additional_folder = pkg_info.get("additional_folder", "")
250+
if additional_folder != "":
251+
additional_folder = additional_folder + "/"
252+
raw_url = f"{raw_url_base}/-/raw/{ref}/{additional_folder}{xml_name}"
253+
return raw_url

0 commit comments

Comments
 (0)