@@ -331,7 +331,7 @@ let private generateBuckConfig (sourceExplorer : ISourceExplorer) (parents : Pac
331331 return buckarooConfig |> BuckConfig.render
332332}
333333
334- let private generateBazelDefs ( targets : Set < TargetIdentifier >) =
334+ let private generateBazelDefs ( packages : Map < PackageIdentifier , PackageIdentifier list >) ( targets : Set < TargetIdentifier >) =
335335 seq {
336336 yield " def buckaroo_deps():"
337337
@@ -344,7 +344,19 @@ let private generateBazelDefs (targets : Set<TargetIdentifier>) =
344344 })
345345
346346 yield " ]"
347+ yield " "
348+
349+ yield " def buckaroo_workspace(package_name):"
350+ yield !
351+ packages
352+ |> Map.toSeq
353+ |> Seq.collect ( fun ( package , parents ) -> seq {
354+ yield " if package_name == \" " + ( PackageIdentifier.show package) + " \" :"
355+ yield " return \" @" + ( packageWorkspaceName parents package) + " \" "
356+ yield " "
357+ })
347358
359+ yield " fail(package_name + \" is not a recognized package\" )"
348360 yield " "
349361 }
350362 |> String.concat " \n "
@@ -407,13 +419,31 @@ let private generateTopLevelBazelDefs (sourceExplorer : ISourceExplorer) (lock :
407419
408420 yield " return None"
409421 yield " "
410- yield generateBazelDefs lock.Dependencies
422+
423+ let accessiblePackages =
424+ lock.Packages
425+ |> Map.map ( fun _ _ -> [])
426+
427+ yield generateBazelDefs accessiblePackages lock.Dependencies
411428 }
412429 |> String.concat " \n "
413430}
414431
415432let rec private installBazelPackages ( context : Tasks.TaskContext ) ( root : string ) ( parents : PackageIdentifier list ) ( packages : Map < PackageIdentifier , LockedPackage >) = async {
416- do ! Files.touch ( Paths.combine root " WORKSPACE" )
433+ let! workspaceFileExists = Files.exists ( Paths.combine root " WORKSPACE" )
434+
435+ if not workspaceFileExists
436+ then
437+ let content =
438+ seq {
439+ yield " load(\" //buckaroo:defs.bzl\" , \" buckaroo_setup\" )"
440+ yield " "
441+ yield " buckaroo_setup()"
442+ yield " "
443+ }
444+ |> String.concat " \n "
445+
446+ do ! Files.writeFile ( Paths.combine root " WORKSPACE" ) content
417447
418448 // Install packages
419449 for ( package, lockedPackage) in packages |> Map.toSeq do
@@ -436,6 +466,15 @@ let rec private installBazelPackages (context : Tasks.TaskContext) (root : strin
436466
437467 let! manifest = context.SourceExplorer.FetchManifest ( lockedPackage.Location, lockedPackage.Versions)
438468
469+ let accessiblePackages =
470+ manifest.Dependencies
471+ |> Seq.map ( fun d -> ( d.Package, parents))
472+ |> Seq.append (
473+ manifest.PrivateDependencies
474+ |> Seq.map ( fun d -> ( d.Package, parents @ [ package ]))
475+ )
476+ |> Map.ofSeq
477+
439478 let! targets =
440479 asyncSeq {
441480 let xs =
@@ -483,6 +522,7 @@ let rec private installBazelPackages (context : Tasks.TaskContext) (root : strin
483522
484523 let buckarooDefs =
485524 generateBazelDefs
525+ accessiblePackages
486526 targets
487527
488528 do ! Files.writeFile ( Path.Combine( installPath, Constants.PackagesDirectory, Constants.BuckarooDefsFileName)) buckarooDefs
0 commit comments