mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
Unrevert "Add username parameter to AsyncBashSession" (#8771)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com> Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
parent
a933a81ef5
commit
80e496d134
@ -390,7 +390,9 @@ class ActionExecutor:
|
||||
try:
|
||||
if action.is_static:
|
||||
path = action.cwd or self._initial_cwd
|
||||
result = await AsyncBashSession.execute(action.command, path)
|
||||
result = await AsyncBashSession.execute(
|
||||
action.command, path, self.username
|
||||
)
|
||||
obs = CmdOutputObservation(
|
||||
content=result.content,
|
||||
exit_code=result.exit_code,
|
||||
|
||||
@ -400,7 +400,7 @@ class Runtime(FileEditRuntimeMixin):
|
||||
'No repository selected. Initializing a new git repository in the workspace.'
|
||||
)
|
||||
action = CmdRunAction(
|
||||
command='git init',
|
||||
command=f'git init && git config --global --add safe.directory {self.workspace_root}'
|
||||
)
|
||||
self.run_action(action)
|
||||
else:
|
||||
|
||||
@ -1,12 +1,17 @@
|
||||
import asyncio
|
||||
import os
|
||||
import pwd
|
||||
import sys
|
||||
from typing import Any, Optional
|
||||
|
||||
from openhands.runtime.base import CommandResult
|
||||
|
||||
|
||||
class AsyncBashSession:
|
||||
@staticmethod
|
||||
async def execute(command: str, work_dir: str) -> CommandResult:
|
||||
async def execute(
|
||||
command: str, work_dir: str, username: Optional[str] = None
|
||||
) -> CommandResult:
|
||||
"""Execute a command in the bash session asynchronously."""
|
||||
work_dir = os.path.abspath(work_dir)
|
||||
|
||||
@ -17,12 +22,31 @@ class AsyncBashSession:
|
||||
if not command:
|
||||
return CommandResult(content='', exit_code=0)
|
||||
|
||||
# Create subprocess arguments
|
||||
subprocess_kwargs: dict[str, Any] = {
|
||||
'stdout': asyncio.subprocess.PIPE,
|
||||
'stderr': asyncio.subprocess.PIPE,
|
||||
'cwd': work_dir,
|
||||
}
|
||||
|
||||
# Only apply user-specific settings on non-Windows platforms
|
||||
if username and sys.platform != 'win32':
|
||||
try:
|
||||
user_info = pwd.getpwnam(username)
|
||||
env: dict[str, str] = {
|
||||
'HOME': user_info.pw_dir,
|
||||
'USER': username,
|
||||
'LOGNAME': username,
|
||||
}
|
||||
subprocess_kwargs['env'] = env
|
||||
subprocess_kwargs['user'] = username
|
||||
except KeyError:
|
||||
raise ValueError(f'User {username} does not exist.')
|
||||
|
||||
# Prepare to run the command
|
||||
try:
|
||||
process = await asyncio.subprocess.create_subprocess_shell(
|
||||
command,
|
||||
stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.PIPE,
|
||||
cwd=work_dir,
|
||||
command, **subprocess_kwargs
|
||||
)
|
||||
|
||||
try:
|
||||
|
||||
@ -234,7 +234,10 @@ async def test_clone_or_init_repo_no_repo_with_user_id(temp_dir):
|
||||
# Verify that git init was called
|
||||
assert len(runtime.run_action_calls) == 1
|
||||
assert isinstance(runtime.run_action_calls[0], CmdRunAction)
|
||||
assert runtime.run_action_calls[0].command == 'git init'
|
||||
assert (
|
||||
runtime.run_action_calls[0].command
|
||||
== f'git init && git config --global --add safe.directory {runtime.workspace_root}'
|
||||
)
|
||||
assert result == ''
|
||||
|
||||
|
||||
@ -255,7 +258,10 @@ async def test_clone_or_init_repo_no_repo_no_user_id_no_workspace_base(temp_dir)
|
||||
# Verify that git init was called
|
||||
assert len(runtime.run_action_calls) == 1
|
||||
assert isinstance(runtime.run_action_calls[0], CmdRunAction)
|
||||
assert runtime.run_action_calls[0].command == 'git init'
|
||||
assert (
|
||||
runtime.run_action_calls[0].command
|
||||
== f'git init && git config --global --add safe.directory {runtime.workspace_root}'
|
||||
)
|
||||
assert result == ''
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user