@@ -125,22 +125,46 @@ export class PackageVersionCreate {
125125 const branchString = ! branch ? 'null' : `'${ branch } '` ;
126126
127127 // resolve a build number keyword to an actual number, if needed
128- const resolvedBuildNumber = await this . resolveBuildNumber ( versionNumber , dependency . packageId , branch ) ;
128+ let resolvedBuildNumber : string ;
129+ let effectiveBranchString = branchString ;
130+ try {
131+ resolvedBuildNumber = await this . resolveBuildNumber ( versionNumber , dependency . packageId , branch ) ;
132+ } catch ( e ) {
133+ // when --branch was inherited (not set on the dependency itself) and LATEST resolution fails
134+ // specifically because no version exists on that branch, fall back to null branch
135+ if (
136+ e instanceof Error &&
137+ e . name === 'NoReleaseVersionFoundForBranchError' &&
138+ dependency . branch === undefined &&
139+ this . options . branch &&
140+ buildNumber === BuildNumberToken . LATEST_BUILD_NUMBER_TOKEN
141+ ) {
142+ this . logger . info (
143+ `Dependency ${ dependency . package ?? dependency . packageId } has no versions on branch '${ String (
144+ branch
145+ ) } '. Falling back to unscoped (no branch) resolution.`
146+ ) ;
147+ effectiveBranchString = 'null' ;
148+ resolvedBuildNumber = await this . resolveBuildNumber ( versionNumber , dependency . packageId , undefined ) ;
149+ } else {
150+ throw e ;
151+ }
152+ }
129153
130154 // now that we have a full build number, query for the associated 04t.
131155 // because the build number may not be unique across versions, add in conditionals for
132156 // the branch or the RELEASED token (if used)
133157 const branchOrReleasedCondition =
134158 buildNumber === BuildNumberToken . RELEASED_BUILD_NUMBER_TOKEN
135159 ? 'AND IsReleased = true'
136- : `AND Branch = ${ branchString } ` ;
160+ : `AND Branch = ${ effectiveBranchString } ` ;
137161 const query = `SELECT SubscriberPackageVersionId FROM Package2Version WHERE Package2Id = '${ dependency . packageId } ' AND MajorVersion = ${ versionNumber . major } AND MinorVersion = ${ versionNumber . minor } AND PatchVersion = ${ versionNumber . patch } AND BuildNumber = ${ resolvedBuildNumber } ${ branchOrReleasedCondition } ` ;
138162 const pkgVerQueryResult = await this . connection . tooling . query < PackagingSObjects . Package2Version > ( query ) ;
139163 const subRecords = pkgVerQueryResult . records ;
140164 if ( ! subRecords || subRecords . length !== 1 ) {
141165 throw messages . createError ( 'versionNumberNotFoundInDevHub' , [
142166 dependency . packageId ,
143- branchString ,
167+ effectiveBranchString ,
144168 versionNumber . toString ( ) ,
145169 resolvedBuildNumber ,
146170 ] ) ;
@@ -155,7 +179,7 @@ export class PackageVersionCreate {
155179 messages . getMessage ( 'buildNumberResolvedForLatest' , [
156180 dependency . package ,
157181 versionNumber . toString ( ) ,
158- branchString ,
182+ effectiveBranchString ,
159183 dependency . subscriberPackageVersionId ,
160184 ] )
161185 ) ;
0 commit comments