diff --git a/swh/web/api/views/snapshot.py b/swh/web/api/views/snapshot.py --- a/swh/web/api/views/snapshot.py +++ b/swh/web/api/views/snapshot.py @@ -68,6 +68,20 @@ :swh_web_api:`snapshot/6a3a2cf0b2b90ce7ae1cf0a221ed68035b686f5a/` """ + def _resolve_alias(snapshot, branch): + while branch and branch['target_type'] == 'alias': + if branch['target'] in snapshot['branches']: + branch = snapshot['branches'][branch['target']] + else: + snp = service.lookup_snapshot( + snapshot['id'], branches_from=branch['target'], + branches_count=1) + if snp and branch['target'] in snp['branches']: + branch = snp['branches'][branch['target']] + else: + branch = None + return branch + def _enrich_snapshot(snapshot): s = snapshot.copy() if 'branches' in s: @@ -77,19 +91,10 @@ } for k, v in s['branches'].items(): if v and v['target_type'] == 'alias': - if v['target'] in s['branches']: - branch_alias = s['branches'][v['target']] - if branch_alias: - v['target_url'] = branch_alias['target_url'] - else: - snp = \ - service.lookup_snapshot(s['id'], - branches_from=v['target'], - branches_count=1) - if snp and v['target'] in snp['branches']: - branch = snp['branches'][v['target']] - branch = utils.enrich_object(branch) - v['target_url'] = branch['target_url'] + branch = _resolve_alias(snapshot, v) + if branch: + branch = utils.enrich_object(branch) + v['target_url'] = branch['target_url'] return s snapshot_content_max_size = get_config()['snapshot_content_max_size']