| 1539 | } |
| 1540 | |
| 1541 | func (collection *PublishedRepoCollection) listReferencedFilesByComponent(prefix string, components []string, |
| 1542 | collectionFactory *CollectionFactory, progress aptly.Progress) (map[string][]string, error) { |
| 1543 | referencedFiles := map[string][]string{} |
| 1544 | processedComponentRefs := map[string]*PackageRefList{} |
| 1545 | |
| 1546 | for _, r := range collection.list { |
| 1547 | if r.Prefix == prefix && !r.MultiDist { |
| 1548 | matches := false |
| 1549 | |
| 1550 | repoComponents := r.Components() |
| 1551 | |
| 1552 | for _, component := range components { |
| 1553 | if utils.StrSliceHasItem(repoComponents, component) { |
| 1554 | matches = true |
| 1555 | break |
| 1556 | } |
| 1557 | } |
| 1558 | |
| 1559 | if !matches { |
| 1560 | continue |
| 1561 | } |
| 1562 | |
| 1563 | if err := collection.LoadComplete(r, collectionFactory); err != nil { |
| 1564 | return nil, err |
| 1565 | } |
| 1566 | |
| 1567 | for _, component := range components { |
| 1568 | if utils.StrSliceHasItem(repoComponents, component) { |
| 1569 | unseenRefs := r.RefList(component) |
| 1570 | processedRefs := processedComponentRefs[component] |
| 1571 | if processedRefs != nil { |
| 1572 | unseenRefs = unseenRefs.Subtract(processedRefs) |
| 1573 | } else { |
| 1574 | processedRefs = NewPackageRefList() |
| 1575 | } |
| 1576 | |
| 1577 | if unseenRefs.Len() == 0 { |
| 1578 | continue |
| 1579 | } |
| 1580 | processedComponentRefs[component] = processedRefs.Merge(unseenRefs, false, true) |
| 1581 | |
| 1582 | packageList, err := NewPackageListFromRefList(unseenRefs, collectionFactory.PackageCollection(), progress) |
| 1583 | if err != nil { |
| 1584 | return nil, err |
| 1585 | } |
| 1586 | |
| 1587 | _ = packageList.ForEach(func(p *Package) error { |
| 1588 | poolDir, err := p.PoolDirectory() |
| 1589 | if err != nil { |
| 1590 | return err |
| 1591 | } |
| 1592 | |
| 1593 | for _, f := range p.Files() { |
| 1594 | referencedFiles[component] = append(referencedFiles[component], filepath.Join(poolDir, f.Filename)) |
| 1595 | } |
| 1596 | |
| 1597 | return nil |
| 1598 | }) |