diff --git a/swh/loader/pypi/loader.py b/swh/loader/pypi/loader.py --- a/swh/loader/pypi/loader.py +++ b/swh/loader/pypi/loader.py @@ -236,10 +236,19 @@ def generate_and_load_snapshot(self): branches = {} for release, artifacts in self.project.all_release_artifacts().items(): - for filename, sha256 in artifacts: - branch_name = filename + if len(artifacts) == 1: + # Only one artifact for this release, generate a single branch + branch_name = 'refs/tags/%s' % release + filename, sha256 = artifacts[0] target = self.target_from_artifact(filename, sha256) branches[branch_name.encode('utf-8')] = target + else: + # Several artifacts for this release, generate a separate + # pointer for each of them + for filename, sha256 in artifacts: + branch_name = 'refs/tags/%s/%s' % (release, filename) + target = self.target_from_artifact(filename, sha256) + branches[branch_name.encode('utf-8')] = target snapshot = { 'branches': branches, diff --git a/swh/loader/pypi/tests/test_loader.py b/swh/loader/pypi/tests/test_loader.py --- a/swh/loader/pypi/tests/test_loader.py +++ b/swh/loader/pypi/tests/test_loader.py @@ -189,17 +189,17 @@ self.assertRevisionsOk(expected_revisions) expected_branches = { - '0805nexter-1.1.0.zip': { + 'refs/tags/1.1.0': { 'target': '4c99891f93b81450385777235a37b5e966dd1571', 'target_type': 'revision', }, - '0805nexter-1.2.0.zip': { + 'refs/tags/1.2.0': { 'target': 'e445da4da22b31bfebb6ffc4383dbf839a074d21', 'target_type': 'revision', }, } - self.assertSnapshotOk('f456b03e8bf1920d64b00df234b1efedc25b6c93', + self.assertSnapshotOk('c111b9a5f46e68e5017b04383281cfd932ab3fb8', expected_branches) @@ -211,14 +211,14 @@ def _last_snapshot(self): """Return last visited snapshot""" return { - 'id': b'\xf4V\xb0>\x8b\xf1\x92\rd\xb0\r\xf24\xb1\xef\xed\xc2[l\x93', # noqa + 'id': b'\xc1\x11\xb9\xa5\xf4nh\xe5\x01{\x0482\x81\xcf\xd92\xab?\xb8', # noqa 'branches': { - b'0805nexter-1.1.0.zip': { + b'refs/tags/1.1.0': { 'target': b'L\x99\x89\x1f\x93\xb8\x14P' b'8Ww#Z7\xb5\xe9f\xdd\x15q', 'target_type': 'revision' }, - b'0805nexter-1.2.0.zip': { + b'refs/tags/1.2.0': { 'target': b'\xe4E\xdaM\xa2+1\xbf' b'\xeb\xb6\xff\xc48=\xbf\x83' b'\x9a\x07M!', @@ -273,13 +273,13 @@ self.assertDirectoriesOk([]) self.assertRevisionsOk(expected_revisions={}) - expected_snapshot_id = 'f456b03e8bf1920d64b00df234b1efedc25b6c93' + expected_snapshot_id = 'c111b9a5f46e68e5017b04383281cfd932ab3fb8' expected_branches = { - '0805nexter-1.1.0.zip': { + 'refs/tags/1.1.0': { 'target': '4c99891f93b81450385777235a37b5e966dd1571', 'target_type': 'revision', }, - '0805nexter-1.2.0.zip': { + 'refs/tags/1.2.0': { 'target': 'e445da4da22b31bfebb6ffc4383dbf839a074d21', 'target_type': 'revision', }, @@ -358,17 +358,17 @@ for rev, dir_id in old_revisions.items(): expected_revisions[rev] = dir_id - expected_snapshot_id = 'e5beda90e9ddbc8672734ed172246b06fcbc6827' + expected_snapshot_id = '78fe3367ba98ed8b679b91ca70d3f68130fa0694' expected_branches = { - '0805nexter-1.1.0.zip': { + 'refs/tags/1.1.0': { 'target': '4c99891f93b81450385777235a37b5e966dd1571', 'target_type': 'revision', }, - '0805nexter-1.2.0.zip': { + 'refs/tags/1.2.0': { 'target': 'e445da4da22b31bfebb6ffc4383dbf839a074d21', 'target_type': 'revision', }, - '0805nexter-1.3.0.zip': { + 'refs/tags/1.3.0': { 'target': 'fb46e49605b0bbe69f8c53d315e89370e7c6cb5d', 'target_type': 'revision', }, @@ -388,17 +388,17 @@ def _last_snapshot(self): """Return last visited snapshot""" return { - 'id': b"\xe5\xbe\xda\x90\xe9\xdd\xbc\x86rsN\xd1r$k\x06\xfc\xbch'", + 'id': b'x\xfe3g\xba\x98\xed\x8bg\x9b\x91\xcap\xd3\xf6\x810\xfa\x06\x94', # noqa 'branches': { - b'0805nexter-1.1.0.zip': { + b'refs/tags/1.1.0': { 'target': b'L\x99\x89\x1f\x93\xb8\x14P8Ww#Z7\xb5\xe9f\xdd\x15q', # noqa 'target_type': 'revision' }, - b'0805nexter-1.2.0.zip': { + b'refs/tags/1.2.0': { 'target': b'\xe4E\xdaM\xa2+1\xbf\xeb\xb6\xff\xc48=\xbf\x83\x9a\x07M!', # noqa 'target_type': 'revision' }, - b'0805nexter-1.3.0.zip': { + b'refs/tags/1.3.0': { 'target': b'\xfbF\xe4\x96\x05\xb0\xbb\xe6\x9f\x8cS\xd3\x15\xe8\x93p\xe7\xc6\xcb]', # noqa 'target_type': 'revision' } @@ -487,17 +487,17 @@ } self.assertRevisionsOk(expected_revisions) - expected_snapshot_id = 'fb192f35397812776377fa758e0ba4cf20a4cf5d' + expected_snapshot_id = '388083a9bb675812c6cc7124e1f8af8128df6917' expected_branches = { - '0805nexter-1.2.0.zip': { + 'refs/tags/1.2.0': { 'target': 'e445da4da22b31bfebb6ffc4383dbf839a074d21', 'target_type': 'revision', }, - '0805nexter-1.3.0.zip': { + 'refs/tags/1.3.0': { 'target': 'fb46e49605b0bbe69f8c53d315e89370e7c6cb5d', 'target_type': 'revision', }, - '0805nexter-1.4.0.zip': { + 'refs/tags/1.4.0': { 'target': '5e91875f096ac48c98d74acf307439a3490f2827', 'target_type': 'revision', },