relay_knowledge/application/code_repository/indexing/
preview.rs1use crate::{
4 api::{
5 ApiError, ApiMetadata, CodeRepositoryScopeMetadata, CodeRepositoryScopePreviewResponse,
6 RequestContext,
7 },
8 application::service::RelayKnowledgeService,
9 code::preview_repository_scope,
10 domain::CodeIndexRequest,
11};
12
13use super::super::{
14 blocking::run_blocking_code,
15 errors::storage_api_error,
16 repository::{registration_from_status, required_code_repository},
17 scope::merged_filters,
18};
19
20impl RelayKnowledgeService {
21 pub async fn preview_code_repository_scope(
23 &self,
24 request: CodeIndexRequest,
25 context: RequestContext,
26 ) -> Result<CodeRepositoryScopePreviewResponse, ApiError> {
27 let store = self.store().await.map_err(storage_api_error)?;
28 let status =
29 required_code_repository(store.as_ref(), &request.repository.repository).await?;
30 let registration = registration_from_status(&status);
31 let selector = request.repository.clone();
32 let preview =
33 run_blocking_code(move || preview_repository_scope(®istration, &selector)).await?;
34 let path_filters = merged_filters(&status.path_filters, &request.repository.path_filters);
35 let language_filters = merged_filters(
36 &status.language_filters,
37 &request.repository.language_filters,
38 );
39 let scope_id = crate::domain::code_snapshot_scope_id_with_workspace_detection(
40 &preview.repository_id,
41 &preview.tree_hash,
42 &path_filters,
43 &language_filters,
44 &request.workspace_detection,
45 );
46 let graph_version = store
47 .current_graph_version()
48 .await
49 .map_err(storage_api_error)?;
50 Ok(CodeRepositoryScopePreviewResponse {
51 metadata: ApiMetadata::graph_only(&context, graph_version),
52 scope: CodeRepositoryScopeMetadata {
53 scope_id: scope_id.clone(),
54 repository_id: preview.repository_id.clone(),
55 alias: preview.alias.clone(),
56 requested_ref: request.repository.ref_selector,
57 resolved_commit_sha: preview.resolved_commit_sha.clone(),
58 tree_hash: preview.tree_hash.clone(),
59 path_filters,
60 language_filters,
61 indexed_file_count: preview.selected_file_count,
62 index_versions: vec![format!("code:{scope_id}:{}", preview.tree_hash)],
63 stale: true,
64 },
65 preview,
66 })
67 }
68}