MCPcopy Create free account
hub / github.com/emwalker/digraph / fetch_matches

Method fetch_matches

backend/src/git/search.rs:344–403  ·  view source on GitHub ↗
(&self, client: &Client, fetch: &F)

Source from the content-addressed store, hash-verified

342 }
343
344 fn fetch_matches<F>(&self, client: &Client, fetch: &F) -> Result<BTreeSet<SearchMatch>>
345 where
346 F: Downset,
347 {
348 log::info!("fetching matches");
349 let paths = self.intersection(client, fetch)?;
350
351 let filter = Filter {
352 urls: self.url_paths()?,
353 paths,
354 };
355
356 let mut entries = BTreeSet::new();
357
358 for path in &filter.urls.ids {
359 let entry = SearchEntry {
360 id: path.to_owned(),
361 kind: Kind::Link,
362 };
363 entries.insert(entry);
364 }
365
366 let mut objects = ObjectBuilders::new();
367 let mut count: usize = 0;
368
369 for &repo_id in self.viewer.read_repo_ids.iter() {
370 let mut iter = self.search.tokens.iter();
371
372 if let Some(token) = iter.next() {
373 let mut prefix_matches = client.search_token_prefix_matches(repo_id, token)?;
374
375 for token in iter {
376 let other = client.search_token_prefix_matches(repo_id, token)?;
377 prefix_matches.retain(|e| other.contains(e));
378 }
379
380 entries.extend(prefix_matches);
381 }
382
383 for entry in entries.iter() {
384 if let Some(repo_object) = client.fetch(repo_id, &entry.id) {
385 if !filter.test(&repo_object) {
386 continue;
387 }
388
389 let key = Okey(entry.id.to_owned(), self.context_repo_id);
390 objects.add(key, repo_id, repo_object);
391 count += 1;
392
393 if count >= self.limit {
394 break;
395 }
396 }
397 }
398 }
399
400 objects
401 .finalize()?

Callers 1

callMethod · 0.80

Calls 13

OkeyClass · 0.85
url_pathsMethod · 0.80
insertMethod · 0.80
nextMethod · 0.80
containsMethod · 0.80
testMethod · 0.80
into_matchesMethod · 0.80
finalizeMethod · 0.80
intersectionMethod · 0.45
iterMethod · 0.45
fetchMethod · 0.45

Tested by

no test coverage detected