protected EnvironmentPatchableMap patchRunnerEnvironment()

in rake-runner-agent/src/jetbrains/buildServer/agent/feature/RubyEnvConfiguratorService.java [99:147]


  protected EnvironmentPatchableMap patchRunnerEnvironment(@NotNull final BuildRunnerContext context,
                                                           @NotNull final RubySdk sdk,
                                                           @NotNull final RubyEnvConfiguratorConfiguration configuration,
                                                           @NotNull final SharedParams sharedParams) throws RunBuildException {

    // editable env variables
    final ModifiableRunnerContext mc = new ModifiableRunnerContext(context);
    final EnvironmentPatchableMap env = mc.getEnvParameters();

    try {

      // Inspect env, warn about any problems
      RVMSupportUtil.inspectCurrentEnvironment(env, sdk, context.getBuild().getBuildLogger());

      // Save patched env variables to runnerEnvParams
      if (SdkUtil.isRvmSdk(sdk) && !sdk.isSystem()) {
        // true rvm sdk
        RVMSupportUtil.patchEnvForRVMIfNecessary(sdk, env);
      } else {
        // fake or non-rvm sdk
        if (SdkUtil.isRvmSdk(sdk)) {
          RVMSupportUtil.patchEnvForRVMIfNecessary(sdk, env);
        }

        if (SdkUtil.isRbEnvSdk(sdk)) {
          ((RbEnvRubySdk)sdk).patchEnvironment(env);
        }

        // see RakeRunnerConstants.CUSTOM_BUNDLE_FOLDER_PATH.
        RubySDKUtil.patchPathEnvForNonRvmOrSystemRvmSdk(sdk, mc);
      }

      context.addRunnerParameter(ENVS_TO_UNSET_PARAM, StringUtil.join(env.getRemovedKeys(), ","));

      // apply updated env variables to context:
      for (Map.Entry<String, String> keyAndValue : env.entrySet()) {
        context.addEnvironmentVariable(keyAndValue.getKey(), keyAndValue.getValue());
      }

      // success, mark that shared params were successfully applied
      sharedParams.setApplied(true);
      return env;
    } catch (RakeTasksBuildService.MyBuildFailureException e) {
      // only show error msg, it is user-friendly
      throw new RunBuildException(e.getMessage());
    } catch (Exception e) {
      throw new RunBuildException(e);
    }
  }