@@ -10,12 +10,7 @@ import (
1010 "github.com/microsoft/azldev/internal/app/azldev"
1111 "github.com/microsoft/azldev/internal/app/azldev/core/components"
1212 "github.com/microsoft/azldev/internal/app/azldev/core/sources"
13- "github.com/microsoft/azldev/internal/projectconfig"
14- "github.com/microsoft/azldev/internal/providers/rpmprovider"
1513 "github.com/microsoft/azldev/internal/providers/sourceproviders"
16- "github.com/microsoft/azldev/internal/rpm"
17- "github.com/microsoft/azldev/internal/utils/downloader"
18- "github.com/samber/lo"
1914 "github.com/spf13/cobra"
2015)
2116
@@ -78,93 +73,23 @@ func PrepareComponentSources(env *azldev.Env, options *PrepareSourcesOptions) er
7873 event := env .StartEvent ("Preparing sources" , "component" , component .GetName ())
7974 defer event .End ()
8075
81- var rpmContentsProvider sourceproviders.RPMContentsProvider
76+ var sourceManager sourceproviders.SourceManager
8277
83- // If the component has external sources, then we build an RPM contents provider;
84- // otherwise, we pass nil to the preparer.
85- if component .GetConfig ().Spec .SourceType == projectconfig .SpecSourceTypeUpstream {
86- rpmContentsProvider , err = buildRPMContentsProvider (env , component )
87- if err != nil {
88- return fmt .Errorf ("failed to create RPM contents provider:\n %w" , err )
89- }
90- }
91-
92- preparer := sources .NewPreparer (env , env , env .FS (), rpmContentsProvider )
93-
94- err = preparer .PrepareSources (env , component , options .OutputDir )
95- if err != nil {
96- return fmt .Errorf ("failed to prepare sources for component %q:\n %w" , component .GetName (), err )
97- }
98-
99- return nil
100- }
101-
102- func buildRPMContentsProvider (
103- env * azldev.Env , component components.Component ,
104- ) (* sourceproviders.RPMContentsProviderImpl , error ) {
105- repoQuerierOptions , err := composeRepoQuerierOptionsForComponent (env , component )
106- if err != nil {
107- return nil , fmt .Errorf ("failed to compose repo querying options:\n %w" , err )
108- }
109-
110- rpmExtractor , err := rpm .NewRPMExtractorImpl (env .FS ())
78+ // Create source manager to handle all source fetching, both local and upstream.
79+ sourceManager , err = sourceproviders .NewSourceManager (env )
11180 if err != nil {
112- return nil , fmt .Errorf ("failed to create RPM extractor :\n %w" , err )
81+ return fmt .Errorf ("failed to create source manager :\n %w" , err )
11382 }
11483
115- httpDownloader , err := downloader . NewHTTPDownloader (env , env , env . FS () )
84+ preparer , err := sources . NewPreparer (env , sourceManager )
11685 if err != nil {
117- return nil , fmt .Errorf ("failed to create HTTP downloader :\n %w" , err )
86+ return fmt .Errorf ("failed to create source preparer :\n %w" , err )
11887 }
11988
120- repoQuerier , err := rpm .NewRQRepoQuerier (env , repoQuerierOptions ... )
121- if err != nil {
122- return nil , fmt .Errorf ("failed to create RPM repo querier:\n %w" , err )
123- }
124-
125- rpmProvider , err := rpmprovider .NewRPMProviderImpl (env , httpDownloader , repoQuerier )
126- if err != nil {
127- return nil , fmt .Errorf ("failed to create RPM provider:\n %w" , err )
128- }
129-
130- rpmContentsProvider , err := sourceproviders .NewRPMContentsProviderImpl (rpmExtractor , rpmProvider )
89+ err = preparer .PrepareSources (env , component , options .OutputDir )
13190 if err != nil {
132- return nil , fmt .Errorf ("failed to create RPM contents provider:\n %w" , err )
133- }
134-
135- return rpmContentsProvider , nil
136- }
137-
138- func composeRepoQuerierOptionsForComponent (
139- env * azldev.Env , component components.Component ,
140- ) ([]rpm.RepoQuerierOption , error ) {
141- specSource := component .GetConfig ().Spec
142-
143- options := []rpm.RepoQuerierOption {}
144-
145- switch specSource .SourceType {
146- case projectconfig .SpecSourceTypeUnspecified :
147- break
148- case projectconfig .SpecSourceTypeLocal :
149- break
150- case projectconfig .SpecSourceTypeUpstream :
151- distro , distroVer , err := env .ResolveDistroRef (specSource .UpstreamDistro )
152- if err != nil {
153- return nil , fmt .Errorf ("failed to resolve upstream distro for component %q:\n %w" , component .GetName (), err )
154- }
155-
156- repoURLs := lo .Map (distro .PackageRepositories , func (repo projectconfig.PackageRepository , _ int ) string {
157- return repo .BaseURI
158- })
159-
160- options = append (options , rpm .WithBaseURLs (repoURLs ... ))
161-
162- if distroVer .ReleaseVer != "" {
163- options = append (options , rpm .WithReleaseVer (distroVer .ReleaseVer ))
164- }
165- default :
166- break
91+ return fmt .Errorf ("failed to prepare sources for component %q:\n %w" , component .GetName (), err )
16792 }
16893
169- return options , nil
94+ return nil
17095}
0 commit comments