@@ -79,74 +79,44 @@ struct MainCommand: AsyncParsableCommand {
7979 ) async throws -> XCodeInstall {
8080
8181 var logger = Logger ( label: " xcodeinstall " )
82- if verbose {
83- logger. logLevel = . debug
84- } else {
85- logger. logLevel = . error
86- }
82+ logger. logLevel = verbose ? . debug : . error
8783
8884 if let deps {
8985 return await XCodeInstall ( log: logger, deps: deps)
9086 }
9187
92- // Load saved config
88+ // Resolve config: merge CLI args with saved settings, display info, persist
9389 let baseDirectory = FileManager . default. homeDirectoryForCurrentUser
9490 . appendingPathComponent ( " .xcodeinstall " )
9591 let configHandler = await ConfigHandler ( log: logger, baseDirectory: baseDirectory)
96- let savedConfig = await configHandler. loadConfig ( )
97-
98- // Merge CLI args with saved config (CLI takes precedence)
99- let effectiveRegion = region ?? savedConfig? . secretManagerRegion
100- let effectiveProfile = profileName ?? savedConfig? . profileName
101-
102- // Display info message for loaded (non-overridden) settings
10392 let display = NooraDisplay ( )
104- if effectiveRegion != nil || effectiveProfile != nil {
105- var savedParts : [ String ] = [ ]
106- if let r = effectiveRegion, region == nil {
107- savedParts. append ( " -s \( r) " )
108- }
109- if let p = effectiveProfile, profileName == nil {
110- savedParts. append ( " -p \( p) " )
111- }
112- if !savedParts. isEmpty {
113- await display. display (
114- " Using saved settings: \( savedParts. joined ( separator: " " ) ) " ,
115- style: . info
116- )
117- }
118- }
119-
120- // Save config if CLI args provided (merge with existing)
121- if region != nil || profileName != nil {
122- let newConfig = PersistentConfig (
123- secretManagerRegion: region ?? savedConfig? . secretManagerRegion,
124- profileName: profileName ?? savedConfig? . profileName
125- )
126- try ? await configHandler. saveConfig ( newConfig)
127- logger. debug ( " Saved config " )
128- }
93+ let resolved = try await configHandler. resolvedConfig (
94+ cliRegion: region,
95+ cliProfile: profileName,
96+ display: display
97+ )
12998
99+ // Wire dependencies using resolved values
130100 let fileHandler = await FileHandler ( log: logger)
131101 let urlSession = URLSession . shared
132102
133- var secrets : SecretsHandlerProtocol
134- var authenticator : AppleAuthenticatorProtocol
135- var downloader : AppleDownloaderProtocol
136-
137- if let effectiveRegion {
138- let awsSecrets = try await SecretsStorageAWS (
103+ let secrets : SecretsHandlerProtocol
104+ if let effectiveRegion = resolved. secretManagerRegion {
105+ secrets = try await SecretsStorageAWS (
139106 region: effectiveRegion,
140- profileName: effectiveProfile ,
107+ profileName: resolved . profileName ,
141108 log: logger
142109 )
143- secrets = awsSecrets
144110 } else {
145111 secrets = await SecretsStorageFile ( log: logger)
146112 }
147113
148- authenticator = await AppleAuthenticator ( secrets: secrets, urlSession: urlSession, log: logger)
149- downloader = await AppleDownloader (
114+ let authenticator : AppleAuthenticatorProtocol = await AppleAuthenticator (
115+ secrets: secrets,
116+ urlSession: urlSession,
117+ log: logger
118+ )
119+ let downloader : AppleDownloaderProtocol = await AppleDownloader (
150120 secrets: secrets,
151121 urlSession: urlSession,
152122 fileHandler: fileHandler,
0 commit comments