@@ -748,6 +748,7 @@ func (e *Env) Exec(l *ui.UI, pkg *manifest.Package, binary string, args []string
748
748
return errors .WithStack (err )
749
749
}
750
750
ops := e .allEnvarOpsForPackages (runtimeDeps , pkg , installed ... )
751
+ ops = append (ops , e .systemEnvOverrideOps (ops )... )
751
752
packageHermitBin , err := e .getPackageRuntimeEnvops (pkg )
752
753
if err != nil {
753
754
return errors .WithStack (err )
@@ -777,6 +778,25 @@ func (e *Env) Exec(l *ui.UI, pkg *manifest.Package, binary string, args []string
777
778
return errors .Errorf ("%s: could not find binary %q" , pkg , binary )
778
779
}
779
780
781
+ // systemEnvOverrideOps returns environment variables overrode in an already activated system environment
782
+ func (e * Env ) systemEnvOverrideOps (ops envars.Ops ) envars.Ops {
783
+ if activeEnv , ok := os .LookupEnv ("HERMIT_ENV" ); ! ok || activeEnv != e .envDir {
784
+ return envars.Ops {}
785
+ }
786
+
787
+ system := envars .Parse (os .Environ ())
788
+ changed := system .Apply (e .Root (), ops ).Changed (false )
789
+
790
+ var overrides envars.Ops
791
+ for envar := range changed {
792
+ if v , ok := system [envar ]; ok {
793
+ overrides = append (overrides , & envars.Force {Name : envar , Value : v })
794
+ }
795
+ }
796
+
797
+ return overrides
798
+ }
799
+
780
800
func (e * Env ) getPackageRuntimeEnvops (pkg * manifest.Package ) (envars.Op , error ) {
781
801
// If the package contains a Hermit env, add that to the PATH for runtime dependencies
782
802
pkgEnv , err := OpenEnv (pkg .Root , e .state , e .packageSource , nil , e .httpClient , e .scriptSums )
0 commit comments