diff --git a/cypress/support/index.js b/cypress/support/index.js --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -51,7 +51,11 @@ const lastVisit = originVisits[0]; const snapshotApiUrl = this.Urls.api_1_snapshot(lastVisit.snapshot); const lastOriginSnapshot = await httpGetJson(snapshotApiUrl); - const revisionApiUrl = this.Urls.api_1_revision(lastOriginSnapshot.branches.HEAD.target); + let revision = lastOriginSnapshot.branches.HEAD.target; + if (lastOriginSnapshot.branches.HEAD.target_type === 'alias') { + revision = lastOriginSnapshot.branches[revision].target; + } + const revisionApiUrl = this.Urls.api_1_revision(revision); const lastOriginHeadRevision = await httpGetJson(revisionApiUrl); return { 'directory': lastOriginHeadRevision.directory, diff --git a/swh/web/common/service.py b/swh/web/common/service.py --- a/swh/web/common/service.py +++ b/swh/web/common/service.py @@ -898,6 +898,20 @@ snapshot_size['revision'] = 0 if 'release' not in snapshot_size: snapshot_size['release'] = 0 + # adjust revision / release count for display if aliases are defined + if 'alias' in snapshot_size: + aliases = lookup_snapshot(snapshot_id, + branches_count=snapshot_size['alias'], + target_types=['alias']) + for alias in aliases['branches'].values(): + if lookup_snapshot(snapshot_id, + branches_from=alias['target'], + branches_count=1, + target_types=['revision']): + snapshot_size['revision'] += 1 + else: + snapshot_size['release'] += 1 + del snapshot_size['alias'] return snapshot_size diff --git a/swh/web/tests/browse/test_utils.py b/swh/web/tests/browse/test_utils.py --- a/swh/web/tests/browse/test_utils.py +++ b/swh/web/tests/browse/test_utils.py @@ -29,8 +29,7 @@ branches = [] releases = [] - for branch in sorted(snapshot['branches'].keys()): - branch_data = snapshot['branches'][branch] + def _process_branch_data(branch, branch_data): if branch_data['target_type'] == 'revision': rev_data = self.revision_get(branch_data['target']) branches.append({ @@ -54,6 +53,14 @@ 'directory': rev_data['directory'] }) + for branch in sorted(snapshot['branches'].keys()): + branch_data = snapshot['branches'][branch] + if branch_data['target_type'] == 'alias': + target_data = snapshot['branches'][branch_data['target']] + _process_branch_data(branch, target_data) + else: + _process_branch_data(branch, branch_data) + assert branches and releases, 'Incomplete test data.' origin_visit_branches = utils.get_origin_visit_snapshot( diff --git a/swh/web/tests/browse/views/test_origin.py b/swh/web/tests/browse/views/test_origin.py --- a/swh/web/tests/browse/views/test_origin.py +++ b/swh/web/tests/browse/views/test_origin.py @@ -194,7 +194,7 @@ def _get_test_data(visit_idx): snapshot = self.snapshot_get(origin_visits[visit_idx]['snapshot']) - head_rev_id = snapshot['branches']['HEAD']['target'] + head_rev_id = self.snapshot_get_head(snapshot) head_rev = self.revision_get(head_rev_id) dir_content = self.directory_ls(head_rev['directory']) dir_files = [e for e in dir_content if e['type'] == 'file'] @@ -398,7 +398,7 @@ visit = origin_visits[-1] snapshot = self.snapshot_get(visit['snapshot']) - head_rev_id = snapshot['branches']['HEAD']['target'] + head_rev_id = self.snapshot_get_head(snapshot) head_rev = self.revision_get(head_rev_id) root_dir_sha1 = head_rev['directory'] dir_content = self.directory_ls(root_dir_sha1) @@ -470,7 +470,7 @@ visit = origin_visits[-1] snapshot = self.snapshot_get(visit['snapshot']) - head_rev_id = snapshot['branches']['HEAD']['target'] + head_rev_id = self.snapshot_get_head(snapshot) head_rev = self.revision_get(head_rev_id) root_dir_sha1 = head_rev['directory'] subdirs = [e for e in self.directory_ls(root_dir_sha1) diff --git a/swh/web/tests/browse/views/test_revision.py b/swh/web/tests/browse/views/test_revision.py --- a/swh/web/tests/browse/views/test_revision.py +++ b/swh/web/tests/browse/views/test_revision.py @@ -65,7 +65,7 @@ def test_revision_origin_browse(self, origin): snapshot = self.snapshot_get_latest(origin['url']) - revision = snapshot['branches']['HEAD']['target'] + revision = self.snapshot_get_head(snapshot) revision_data = self.revision_get(revision) dir_id = revision_data['directory'] diff --git a/swh/web/tests/strategies.py b/swh/web/tests/strategies.py --- a/swh/web/tests/strategies.py +++ b/swh/web/tests/strategies.py @@ -401,7 +401,11 @@ storage = tests_data['storage'] origin = random.choice(tests_data['origins'][:-1]) snapshot = storage.snapshot_get_latest(origin['url']) - head = snapshot['branches'][b'HEAD']['target'] + if snapshot['branches'][b'HEAD']['target_type'] == 'alias': + target = snapshot['branches'][b'HEAD']['target'] + head = snapshot['branches'][target]['target'] + else: + head = snapshot['branches'][b'HEAD']['target'] return get_revisions_walker('dfs', storage, head) diff --git a/swh/web/tests/testcase.py b/swh/web/tests/testcase.py --- a/swh/web/tests/testcase.py +++ b/swh/web/tests/testcase.py @@ -147,3 +147,11 @@ hash_to_bytes(snapshot_id), branches_from.encode(), branches_count, target_types) return converters.from_snapshot(snp) + + def snapshot_get_head(self, snapshot): + if snapshot['branches']['HEAD']['target_type'] == 'alias': + target = snapshot['branches']['HEAD']['target'] + head = snapshot['branches'][target]['target'] + else: + head = snapshot['branches']['HEAD']['target'] + return head