@@ -11,7 +11,7 @@ use clap::ValueEnum;
11
11
use miette:: { NamedSource , SourceSpan } ;
12
12
use serde:: { Deserialize , Serialize } ;
13
13
use struct_iterable:: Iterable ;
14
- use turbopath:: AbsoluteSystemPath ;
14
+ use turbopath:: { AbsoluteSystemPath , AnchoredSystemPath , AnchoredSystemPathBuf } ;
15
15
use turborepo_errors:: Spanned ;
16
16
use turborepo_repository:: package_graph:: ROOT_PKG_NAME ;
17
17
use turborepo_unescape:: UnescapedString ;
@@ -33,6 +33,8 @@ pub use loader::TurboJsonLoader;
33
33
34
34
use crate :: { boundaries:: BoundariesConfig , config:: UnnecessaryPackageTaskSyntaxError } ;
35
35
36
+ const TURBO_ROOT : & str = "$TURBO_ROOT$" ;
37
+
36
38
#[ derive( Serialize , Deserialize , Debug , Default , PartialEq , Clone , Deserializable ) ]
37
39
#[ serde( rename_all = "camelCase" ) ]
38
40
pub struct SpacesJson {
@@ -537,10 +539,11 @@ impl RawTurboJson {
537
539
}
538
540
}
539
541
540
- impl TryFrom < RawTurboJson > for TurboJson {
541
- type Error = Error ;
542
-
543
- fn try_from ( raw_turbo : RawTurboJson ) -> Result < Self , Error > {
542
+ impl TurboJson {
543
+ fn from_raw (
544
+ raw_turbo : RawTurboJson ,
545
+ path_to_repo_root : & AnchoredSystemPath ,
546
+ ) -> Result < Self , Error > {
544
547
if let Some ( pipeline) = raw_turbo. pipeline {
545
548
let ( span, text) = pipeline. span_and_text ( "turbo.json" ) ;
546
549
return Err ( Error :: PipelineField { span, text } ) ;
@@ -608,6 +611,8 @@ impl TryFrom<RawTurboJson> for TurboJson {
608
611
// Remote Cache config is handled through layered config
609
612
} )
610
613
}
614
+
615
+ // fn task
611
616
}
612
617
613
618
impl TurboJson {
@@ -629,7 +634,12 @@ impl TurboJson {
629
634
path : & AbsoluteSystemPath ,
630
635
) -> Result < TurboJson , Error > {
631
636
let raw_turbo_json = RawTurboJson :: read ( repo_root, path) ?;
632
- raw_turbo_json. try_into ( )
637
+ // pass in repo_root
638
+ // This needs the relative path to root
639
+ let pkg_path = path. parent ( ) . expect ( "turbo.json is not root" ) ;
640
+ // relative pkg_path -> repo_root
641
+ let path_to_root = AnchoredSystemPathBuf :: relative_path_between ( pkg_path, repo_root) ;
642
+ TurboJson :: from_raw ( raw_turbo_json, & path_to_root)
633
643
}
634
644
635
645
pub fn task ( & self , task_id : & TaskId , task_name : & TaskName ) -> Option < RawTaskDefinition > {
@@ -789,6 +799,21 @@ fn gather_env_vars(
789
799
Ok ( ( ) )
790
800
}
791
801
802
+ // $TURBO_ROOT$/something
803
+ fn replace_turbo_root_token (
804
+ task_definition : & mut TaskDefinition ,
805
+ path_to_repo_root : & AnchoredSystemPath ,
806
+ ) {
807
+ for input in task_definition. inputs . iter_mut ( ) {
808
+ let swapped = input. replacen ( TURBO_ROOT , path_to_repo_root. as_str ( ) , 1 ) ;
809
+ }
810
+ /* need to go through incl & exclu individually
811
+ for output in task_definition.outputs.iter_mut() {
812
+ let swapped = output.replacen(TURBO_ROOT, path_to_repo_root.as_str(), 1);
813
+ }
814
+ */
815
+ }
816
+
792
817
#[ cfg( test) ]
793
818
mod tests {
794
819
use anyhow:: Result ;
0 commit comments