diff --git a/swh/storage/algos/snapshot.py b/swh/storage/algos/snapshot.py --- a/swh/storage/algos/snapshot.py +++ b/swh/storage/algos/snapshot.py @@ -3,7 +3,7 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information -from typing import Iterator, List, Optional, Tuple, cast +from typing import Iterator, List, Optional, Tuple from swh.model.hashutil import hash_to_hex from swh.model.model import ( @@ -196,25 +196,23 @@ if alias_name not in snapshot["branches"]: return ([], None) - branch_info = snapshot["branches"][alias_name] - branches = [branch_info] + last_branch = snapshot["branches"][alias_name] + branches = [] seen_aliases = {alias_name} while ( - branch_info is not None - and branch_info.target_type == TargetType.ALIAS - and branch_info.target not in seen_aliases + last_branch is not None + and last_branch.target_type == TargetType.ALIAS + and last_branch.target not in seen_aliases ): - alias_target = branch_info.target + branches.append(last_branch) + alias_target = last_branch.target snapshot = storage.snapshot_get_branches( snapshot_id, branches_from=alias_target, branches_count=1 ) assert snapshot is not None - if alias_target not in snapshot["branches"]: - break + last_branch = snapshot["branches"].get(alias_target) seen_aliases.add(alias_target) - branch_info = snapshot["branches"][alias_target] - branches.append(branch_info) - return (cast(List[SnapshotBranch], branches[:-1]), branches[-1]) + return (branches, last_branch)