diff --git a/scripts/install/install.sh b/scripts/install/install.sh index b79970f9c1..222155d9bc 100755 --- a/scripts/install/install.sh +++ b/scripts/install/install.sh @@ -743,7 +743,7 @@ release_install_lock() { if [ "$lock_kind" = "mkdir" ]; then rm -rf "$LOCK_DIR" 2>/dev/null || true elif [ "$lock_kind" = "flock" ] || [ "$lock_kind" = "lockf" ]; then - exec 9>&- 2>/dev/null || true + exec 9>&- fi lock_kind="" } diff --git a/scripts/install/test_install_sh.py b/scripts/install/test_install_sh.py index bac85ed277..9776739367 100644 --- a/scripts/install/test_install_sh.py +++ b/scripts/install/test_install_sh.py @@ -135,6 +135,27 @@ class InstallShTest(unittest.TestCase): ) self.assertTrue(os.access(host_path, os.X_OK)) + def test_noninteractive_install_warns_about_existing_npm_codex(self) -> None: + with tempfile.TemporaryDirectory() as temp_dir: + root = Path(temp_dir) + archive, checksum, metadata = create_package_release(root) + (root / "bin").mkdir() + write_executable(root / "bin" / "codex", "#!/usr/bin/env node\n") + + result, _ = run_installer_in( + root, + VERSION, + metadata_json=metadata, + archive_path=archive, + checksum_path=checksum, + force_macos=True, + ) + + self.assertEqual(result.returncode, 0, result.stderr) + self.assertIn( + "Leaving the existing npm-managed Codex installed", result.stderr + ) + def test_releases_latest_installs_verified_package_by_default(self) -> None: with tempfile.TemporaryDirectory() as temp_dir: root = Path(temp_dir)