Repository: denoland/deno
Pull request: BREAKING(unstable): drop support for Deno.run.{clearEnv,gid,uid}


Changed files:
filename: runtime/js/40_process.js
patch: @@ -133,10 +133,7 @@ class Process {
 function run({
   cmd,
   cwd = undefined,
-  clearEnv = false,
   env = { __proto__: null },
-  gid = undefined,
-  uid = undefined,
   stdout = "inherit",
   stderr = "inherit",
   stdin = "inherit",
@@ -155,10 +152,7 @@ function run({
   const res = opRun({
     cmd: ArrayPrototypeMap(cmd, String),
     cwd,
-    clearEnv,
     env: ObjectEntries(env),
-    gid,
-    uid,
     stdin,
     stdout,
     stderr,

filename: runtime/lib.rs
patch: @@ -99,10 +99,11 @@ pub static UNSTABLE_GRANULAR_FLAGS: &[UnstableGranularFlag] = &[
     show_in_help: true,
     id: 7,
   },
+  // TODO(bartlomieju): consider removing it
   UnstableGranularFlag {
     name: ops::process::UNSTABLE_FEATURE_NAME,
     help_text: "Enable unstable process APIs",
-    show_in_help: true,
+    show_in_help: false,
     id: 8,
   },
   UnstableGranularFlag {

filename: runtime/ops/process.rs
patch: @@ -1,6 +1,5 @@
 // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
 
-use super::check_unstable;
 use deno_core::anyhow::Context;
 use deno_core::error::type_error;
 use deno_core::error::AnyError;
@@ -642,12 +641,7 @@ mod deprecated {
   pub struct RunArgs {
     cmd: Vec<String>,
     cwd: Option<String>,
-    clear_env: bool,
     env: Vec<(String, String)>,
-    #[cfg(unix)]
-    gid: Option<u32>,
-    #[cfg(unix)]
-    uid: Option<u32>,
     stdin: StdioOrRid,
     stdout: StdioOrRid,
     stderr: StdioOrRid,
@@ -700,24 +694,10 @@ mod deprecated {
     });
     cwd.map(|d| c.current_dir(d));
 
-    if run_args.clear_env {
-      super::check_unstable(state, UNSTABLE_FEATURE_NAME, "Deno.run.clearEnv");
-      c.env_clear();
-    }
     for (key, value) in &env {
       c.env(key, value);
     }
 
-    #[cfg(unix)]
-    if let Some(gid) = run_args.gid {
-      super::check_unstable(state, UNSTABLE_FEATURE_NAME, "Deno.run.gid");
-      c.gid(gid);
-    }
-    #[cfg(unix)]
-    if let Some(uid) = run_args.uid {
-      super::check_unstable(state, UNSTABLE_FEATURE_NAME, "Deno.run.uid");
-      c.uid(uid);
-    }
     #[cfg(unix)]
     // TODO(bartlomieju):
     #[allow(clippy::undocumented_unsafe_blocks)]

filename: tests/unit/process_test.ts
patch: @@ -582,102 +582,6 @@ Deno.test({ permissions: { run: true, read: true } }, function killFailed() {
   p.close();
 });
 
-Deno.test(
-  { permissions: { run: true, read: true, env: true } },
-  async function clearEnv(): Promise<void> {
-    // deno-lint-ignore no-deprecated-deno-api
-    const p = Deno.run({
-      cmd: [
-        Deno.execPath(),
-        "eval",
-        "-p",
-        "JSON.stringify(Deno.env.toObject())",
-      ],
-      stdout: "piped",
-      clearEnv: true,
-      env: {
-        FOO: "23147",
-      },
-    });
-
-    const obj = JSON.parse(new TextDecoder().decode(await p.output()));
-
-    // can't check for object equality because the OS may set additional env
-    // vars for processes, so we check if PATH isn't present as that is a common
-    // env var across OS's and isn't set for processes.
-    assertEquals(obj.FOO, "23147");
-    assert(!("PATH" in obj));
-
-    p.close();
-  },
-);
-
-Deno.test(
-  {
-    permissions: { run: true, read: true },
-    ignore: Deno.build.os === "windows",
-  },
-  async function uid(): Promise<void> {
-    // deno-lint-ignore no-deprecated-deno-api
-    const p = Deno.run({
-      cmd: [
-        "id",
-        "-u",
-      ],
-      stdout: "piped",
-    });
-
-    const currentUid = new TextDecoder().decode(await p.output());
-    p.close();
-
-    if (currentUid !== "0") {
-      assertThrows(() => {
-        // deno-lint-ignore no-deprecated-deno-api
-        Deno.run({
-          cmd: [
-            "echo",
-            "fhqwhgads",
-          ],
-          uid: 0,
-        });
-      }, Deno.errors.PermissionDenied);
-    }
-  },
-);
-
-Deno.test(
-  {
-    permissions: { run: true, read: true },
-    ignore: Deno.build.os === "windows",
-  },
-  async function gid(): Promise<void> {
-    // deno-lint-ignore no-deprecated-deno-api
-    const p = Deno.run({
-      cmd: [
-        "id",
-        "-g",
-      ],
-      stdout: "piped",
-    });
-
-    const currentGid = new TextDecoder().decode(await p.output());
-    p.close();
-
-    if (currentGid !== "0") {
-      assertThrows(() => {
-        // deno-lint-ignore no-deprecated-deno-api
-        Deno.run({
-          cmd: [
-            "echo",
-            "fhqwhgads",
-          ],
-          gid: 0,
-        });
-      }, Deno.errors.PermissionDenied);
-    }
-  },
-);
-
 Deno.test(
   {
     permissions: { run: true, read: true, write: true },