@@ -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,23 @@ 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 defined in the system environment that were previously overriden by Hermit
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
+ var overrides envars.Ops
788
+ for _ , op := range ops {
789
+ envar := op .Envar ()
790
+ if v , ok := os .LookupEnv (envar ); ok {
791
+ overrides = append (overrides , & envars.Force {Name : envar , Value : v })
792
+ }
793
+ }
794
+
795
+ return overrides
796
+ }
797
+
780
798
func (e * Env ) getPackageRuntimeEnvops (pkg * manifest.Package ) (envars.Op , error ) {
781
799
// If the package contains a Hermit env, add that to the PATH for runtime dependencies
782
800
pkgEnv , err := OpenEnv (pkg .Root , e .state , e .packageSource , nil , e .httpClient , e .scriptSums )
0 commit comments