diff --git a/swh/loader/svn/tests/test_utils.py b/swh/loader/svn/tests/test_utils.py
index a41a8f4fe4bf5042981537c9fa1130f4f608f74f..ccc3c2a59cb1dbae3a40b3642fc97e4ee6a9355a 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 3fbe9fe64fe81e25c0049f109b893b597e64f3b6..3319efee4d30382bf854ce97c128a671040e627c 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/