From 651e2964eeb3c0dc3c691973bd26c6495593176d Mon Sep 17 00:00:00 2001 From: Antoine Lambert <anlambert@softwareheritage.org> Date: Fri, 17 Jun 2022 12:01:36 +0200 Subject: [PATCH] utils: Ensure to return correct revision in parse_external_definition An external definition can be of the following form (where XXX and YYY are revision numbers): -r XXX <repo_url>@YYY In that case, the official subversion client will export the revision XXX of the external repository. So ensure to have the same behavior when the subversion loader processes a repository with such external defintion in it. --- swh/loader/svn/tests/test_utils.py | 12 ++++++++++++ swh/loader/svn/utils.py | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/swh/loader/svn/tests/test_utils.py b/swh/loader/svn/tests/test_utils.py index a41a8f4f..ccc3c2a5 100644 --- a/swh/loader/svn/tests/test_utils.py +++ b/swh/loader/svn/tests/test_utils.py @@ -408,6 +408,18 @@ def test_svn_urljoin(base_url, paths_to_join, expected_result): False, ), ), + ( + "-r 123 http://svn.example.com/repos/sounds@100 third-party/sounds", + "trunk/externals", + "http://svn.example.org/repos/test", + ("third-party/sounds", "http://svn.example.com/repos/sounds", 123, False), + ), + ( + "-r 123 http://svn.example.com/repos/sounds@150 third-party/sounds", + "trunk/externals", + "http://svn.example.org/repos/test", + ("third-party/sounds", "http://svn.example.com/repos/sounds", 123, False), + ), ], ) def test_parse_external_definition(external, dir_path, repo_url, expected_result): diff --git a/swh/loader/svn/utils.py b/swh/loader/svn/utils.py index 3fbe9fe6..3319efee 100644 --- a/swh/loader/svn/utils.py +++ b/swh/loader/svn/utils.py @@ -288,7 +288,10 @@ def parse_external_definition( # http://svn.example.org/repos/test/path@XXX url, revision_s = external_url.rsplit("@", maxsplit=1) try: - revision = int(revision_s) + # ensure revision_s can be parsed to int + rev = int(revision_s) + # -r XXX takes priority over <svn_url>@XXX + revision = revision or rev external_url = url except ValueError: # handle URL like http://user@svn.example.org/ -- GitLab