diff --git a/swh/graphql/resolvers/resolver_factory.py b/swh/graphql/resolvers/resolver_factory.py --- a/swh/graphql/resolvers/resolver_factory.py +++ b/swh/graphql/resolvers/resolver_factory.py @@ -54,6 +54,8 @@ "content-by-hash": HashContentNode, "dir-entry-dir": TargetDirectoryNode, "dir-entry-file": TargetContentNode, + "dir-entry-dir": TargetDirectoryNode, + "dir-entry-rev": TargetRevisionNode, "search-result-origin": TargetOriginNode, "search-result-snapshot": TargetSnapshotNode, "search-result-revision": TargetRevisionNode, diff --git a/swh/graphql/resolvers/revision.py b/swh/graphql/resolvers/revision.py --- a/swh/graphql/resolvers/revision.py +++ b/swh/graphql/resolvers/revision.py @@ -12,6 +12,7 @@ from .base_connection import BaseConnection from .base_node import BaseSWHNode +from .directory_entry import BaseDirectoryEntryNode from .release import BaseReleaseNode from .snapshot_branch import BaseSnapshotBranchNode @@ -59,7 +60,7 @@ Node resolver for a revision requested as a target """ - obj: Union[BaseSnapshotBranchNode, BaseReleaseNode] + obj: Union[BaseSnapshotBranchNode, BaseReleaseNode, BaseDirectoryEntryNode] def _get_node_data(self): # self.obj.target_hash is the requested revision id diff --git a/swh/graphql/schema/schema.graphql b/swh/graphql/schema/schema.graphql --- a/swh/graphql/schema/schema.graphql +++ b/swh/graphql/schema/schema.graphql @@ -698,7 +698,7 @@ """ Possible directory entry target objects """ -union DirectoryEntryTarget = Directory | Content +union DirectoryEntryTarget = Directory | Content | Revision """ Possible directory entry types diff --git a/swh/graphql/tests/functional/test_directory_entry.py b/swh/graphql/tests/functional/test_directory_entry.py --- a/swh/graphql/tests/functional/test_directory_entry.py +++ b/swh/graphql/tests/functional/test_directory_entry.py @@ -55,14 +55,14 @@ ...on Directory { swhid } + ...on Revision { + swhid + } } } } """ for entry in storage.directory_ls(directory.id, recursive=True): - if entry["type"] == "rev": - # FIXME, Revision is not supported as a directory entry target yet - continue query = query_str % ( directory.swhid(), entry["name"].decode(), @@ -80,6 +80,10 @@ swhid = CoreSWHID( object_type=ObjectType.DIRECTORY, object_id=entry["target"] ) + elif entry["type"] == "rev" and entry["target"] is not None: + swhid = CoreSWHID( + object_type=ObjectType.REVISION, object_id=entry["target"] + ) assert data["directoryEntry"] == { "name": {"text": entry["name"].decode()}, "target": {"swhid": str(swhid)} if swhid else None,