Skip to content

Commit 0ab0930

Browse files
committed
Use /root for root user in SSH srcBaseDir
When parsing SSH runtime strings with user 'root', use /root as the home directory instead of /home/root.
1 parent 42b7932 commit 0ab0930

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/utils/chatCommands.test.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,32 @@ describe("parseRuntimeString", () => {
4949
const result = parseRuntimeString("ssh hostname", workspaceName);
5050
// When no user is specified, uses current user (process.env.USER)
5151
const expectedUser = process.env.USER ?? "user";
52+
const expectedHomeDir = expectedUser === "root" ? "/root" : `/home/${expectedUser}`;
5253
expect(result).toEqual({
5354
type: "ssh",
5455
host: "hostname",
55-
srcBaseDir: `/home/${expectedUser}/cmux`,
56+
srcBaseDir: `${expectedHomeDir}/cmux`,
5657
});
5758
});
5859

5960
test("accepts SSH with hostname.domain only", () => {
6061
const result = parseRuntimeString("ssh dev.example.com", workspaceName);
6162
// When no user is specified, uses current user (process.env.USER)
6263
const expectedUser = process.env.USER ?? "user";
64+
const expectedHomeDir = expectedUser === "root" ? "/root" : `/home/${expectedUser}`;
6365
expect(result).toEqual({
6466
type: "ssh",
6567
host: "dev.example.com",
66-
srcBaseDir: `/home/${expectedUser}/cmux`,
68+
srcBaseDir: `${expectedHomeDir}/cmux`,
69+
});
70+
});
71+
72+
test("uses /root for root user", () => {
73+
const result = parseRuntimeString("ssh root@hostname", workspaceName);
74+
expect(result).toEqual({
75+
type: "ssh",
76+
host: "root@hostname",
77+
srcBaseDir: "/root/cmux",
6778
});
6879
});
6980

src/utils/chatCommands.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,16 @@ export function parseRuntimeString(
5555
const atIndex = hostPart.indexOf("@");
5656
const user = atIndex > 0 ? hostPart.substring(0, atIndex) : process.env.USER ?? "user";
5757

58+
// Determine home directory path based on user
59+
// root user's home is /root, all others are /home/<user>
60+
const homeDir = user === "root" ? "/root" : `/home/${user}`;
61+
5862
// Accept both "hostname" and "user@hostname" formats
5963
// SSH will use current user or ~/.ssh/config if user not specified
6064
return {
6165
type: RUNTIME_MODE.SSH,
6266
host: hostPart,
63-
srcBaseDir: `/home/${user}/cmux`, // Default remote base directory (NOT including workspace name)
67+
srcBaseDir: `${homeDir}/cmux`, // Default remote base directory (NOT including workspace name)
6468
};
6569
}
6670

0 commit comments

Comments
 (0)