diff --git a/swh/loader/svn/replay.py b/swh/loader/svn/replay.py --- a/swh/loader/svn/replay.py +++ b/swh/loader/svn/replay.py @@ -735,7 +735,7 @@ peg_rev=self.editor.revnum, ignore_keywords=True, ) - if os.path.isfile(dest_path): + if os.path.isfile(dest_path) or os.path.islink(dest_path): self.directory[fullpath] = from_disk.Content.from_file(path=dest_path) else: self.directory[fullpath] = from_disk.Directory.from_disk(path=dest_path) diff --git a/swh/loader/svn/tests/test_loader.py b/swh/loader/svn/tests/test_loader.py --- a/swh/loader/svn/tests/test_loader.py +++ b/swh/loader/svn/tests/test_loader.py @@ -2618,21 +2618,34 @@ # first commit on external add_commit( external_repo_url, - "Create a file in an external repository", + "Create files in an external repository", [ CommitChange( change_type=CommitChangeType.AddOrUpdate, path="code/foo.sh", data=b"#!/bin/bash\necho foo", ), + CommitChange( + change_type=CommitChangeType.AddOrUpdate, + path="code/link", + data=b"#!/bin/bash\necho link", + ), ], ) # first commit add_commit( repo_url, - "Add trunk dir", - [CommitChange(change_type=CommitChangeType.AddOrUpdate, path="trunk/")], + "Add trunk dir and a link file", + [ + CommitChange(change_type=CommitChangeType.AddOrUpdate, path="trunk/"), + CommitChange( + change_type=CommitChangeType.AddOrUpdate, + path="trunk/link", + data=b"link ../test", + properties={"svn:special": "*"}, + ), + ], ) # second commit @@ -2645,7 +2658,8 @@ path="", # repo root dir properties={ "svn:externals": ( - f"{svn_urljoin(external_repo_url, 'code/foo.sh')} trunk/code/foo.sh" # noqa + f"{svn_urljoin(external_repo_url, 'code/foo.sh')} trunk/code/foo.sh\n" # noqa + f"{svn_urljoin(external_repo_url, 'code/link')} trunk/link" ) }, ),