Skip to content

Commit c7be545

Browse files
committed
Move log level defaults into setDefaults
This will allow cliArgs to be only the actual arguments the user passed which will be used for some logic around opening in existing instances.
1 parent 0778337 commit c7be545

File tree

2 files changed

+61
-38
lines changed

2 files changed

+61
-38
lines changed

src/node/cli.ts

+15-15
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,21 @@ export const parse = (
327327

328328
logger.debug("parsed command line", field("args", args))
329329

330+
return args
331+
}
332+
333+
export async function setDefaults(args: Args): Promise<Args> {
334+
args = { ...args }
335+
336+
if (!args["user-data-dir"]) {
337+
await copyOldMacOSDataDir()
338+
args["user-data-dir"] = paths.data
339+
}
340+
341+
if (!args["extensions-dir"]) {
342+
args["extensions-dir"] = path.join(args["user-data-dir"], "extensions")
343+
}
344+
330345
// --verbose takes priority over --log and --log takes priority over the
331346
// environment variable.
332347
if (args.verbose) {
@@ -369,21 +384,6 @@ export const parse = (
369384
return args
370385
}
371386

372-
export async function setDefaults(args: Args): Promise<Args> {
373-
args = { ...args }
374-
375-
if (!args["user-data-dir"]) {
376-
await copyOldMacOSDataDir()
377-
args["user-data-dir"] = paths.data
378-
}
379-
380-
if (!args["extensions-dir"]) {
381-
args["extensions-dir"] = path.join(args["user-data-dir"], "extensions")
382-
}
383-
384-
return args
385-
}
386-
387387
async function defaultConfigFile(): Promise<string> {
388388
return `bind-addr: 127.0.0.1:8080
389389
auth: password

test/cli.test.ts

+46-23
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
1-
import { logger, Level } from "@coder/logger"
1+
import { Level, logger } from "@coder/logger"
22
import * as assert from "assert"
33
import * as path from "path"
4-
import { parse } from "../src/node/cli"
4+
import { parse, setDefaults } from "../src/node/cli"
5+
import { paths } from "../src/node/util"
56

67
describe("cli", () => {
78
beforeEach(() => {
89
delete process.env.LOG_LEVEL
910
})
1011

11-
// The parser will always fill these out.
12+
// The parser should not set any defaults so the caller can determine what
13+
// values the user actually set. These are set after calling `setDefaults`.
1214
const defaults = {
13-
_: [],
15+
"extensions-dir": path.join(paths.data, "extensions"),
16+
"user-data-dir": paths.data,
1417
}
1518

1619
it("should set defaults", () => {
17-
assert.deepEqual(parse([]), defaults)
20+
assert.deepEqual(parse([]), { _: [] })
1821
})
1922

2023
it("should parse all available options", () => {
@@ -69,7 +72,7 @@ describe("cli", () => {
6972
help: true,
7073
host: "0.0.0.0",
7174
json: true,
72-
log: "trace",
75+
log: "error",
7376
open: true,
7477
port: 8081,
7578
socket: path.resolve("mumble"),
@@ -83,28 +86,30 @@ describe("cli", () => {
8386

8487
it("should work with short options", () => {
8588
assert.deepEqual(parse(["-vvv", "-v"]), {
86-
...defaults,
87-
log: "trace",
89+
_: [],
8890
verbose: true,
8991
version: true,
9092
})
91-
assert.equal(process.env.LOG_LEVEL, "trace")
92-
assert.equal(logger.level, Level.Trace)
9393
})
9494

95-
it("should use log level env var", () => {
95+
it("should use log level env var", async () => {
96+
const args = parse([])
97+
assert.deepEqual(args, { _: [] })
98+
9699
process.env.LOG_LEVEL = "debug"
97-
assert.deepEqual(parse([]), {
100+
assert.deepEqual(await setDefaults(args), {
98101
...defaults,
102+
_: [],
99103
log: "debug",
100104
verbose: false,
101105
})
102106
assert.equal(process.env.LOG_LEVEL, "debug")
103107
assert.equal(logger.level, Level.Debug)
104108

105109
process.env.LOG_LEVEL = "trace"
106-
assert.deepEqual(parse([]), {
110+
assert.deepEqual(await setDefaults(args), {
107111
...defaults,
112+
_: [],
108113
log: "trace",
109114
verbose: true,
110115
})
@@ -113,37 +118,56 @@ describe("cli", () => {
113118
})
114119

115120
it("should prefer --log to env var and --verbose to --log", async () => {
121+
let args = parse(["--log", "info"])
122+
assert.deepEqual(args, {
123+
_: [],
124+
log: "info",
125+
})
126+
116127
process.env.LOG_LEVEL = "debug"
117-
assert.deepEqual(parse(["--log", "info"]), {
128+
assert.deepEqual(await setDefaults(args), {
118129
...defaults,
130+
_: [],
119131
log: "info",
120132
verbose: false,
121133
})
122134
assert.equal(process.env.LOG_LEVEL, "info")
123135
assert.equal(logger.level, Level.Info)
124136

125137
process.env.LOG_LEVEL = "trace"
126-
assert.deepEqual(parse(["--log", "info"]), {
138+
assert.deepEqual(await setDefaults(args), {
127139
...defaults,
140+
_: [],
128141
log: "info",
129142
verbose: false,
130143
})
131144
assert.equal(process.env.LOG_LEVEL, "info")
132145
assert.equal(logger.level, Level.Info)
133146

147+
args = parse(["--log", "info", "--verbose"])
148+
assert.deepEqual(args, {
149+
_: [],
150+
log: "info",
151+
verbose: true,
152+
})
153+
134154
process.env.LOG_LEVEL = "warn"
135-
assert.deepEqual(parse(["--log", "info", "--verbose"]), {
155+
assert.deepEqual(await setDefaults(args), {
136156
...defaults,
157+
_: [],
137158
log: "trace",
138159
verbose: true,
139160
})
140161
assert.equal(process.env.LOG_LEVEL, "trace")
141162
assert.equal(logger.level, Level.Trace)
142163
})
143164

144-
it("should ignore invalid log level env var", () => {
165+
it("should ignore invalid log level env var", async () => {
145166
process.env.LOG_LEVEL = "bogus"
146-
assert.deepEqual(parse([]), defaults)
167+
assert.deepEqual(await setDefaults(parse([])), {
168+
_: [],
169+
...defaults,
170+
})
147171
})
148172

149173
it("should error if value isn't provided", () => {
@@ -166,7 +190,7 @@ describe("cli", () => {
166190

167191
it("should not error if the value is optional", () => {
168192
assert.deepEqual(parse(["--cert"]), {
169-
...defaults,
193+
_: [],
170194
cert: {
171195
value: undefined,
172196
},
@@ -177,27 +201,26 @@ describe("cli", () => {
177201
assert.throws(() => parse(["--socket", "--socket-path-value"]), /--socket requires a value/)
178202
// If you actually had a path like this you would do this instead:
179203
assert.deepEqual(parse(["--socket", "./--socket-path-value"]), {
180-
...defaults,
204+
_: [],
181205
socket: path.resolve("--socket-path-value"),
182206
})
183207
assert.throws(() => parse(["--cert", "--socket-path-value"]), /Unknown option --socket-path-value/)
184208
})
185209

186210
it("should allow positional arguments before options", () => {
187211
assert.deepEqual(parse(["foo", "test", "--auth", "none"]), {
188-
...defaults,
189212
_: ["foo", "test"],
190213
auth: "none",
191214
})
192215
})
193216

194217
it("should support repeatable flags", () => {
195218
assert.deepEqual(parse(["--proxy-domain", "*.coder.com"]), {
196-
...defaults,
219+
_: [],
197220
"proxy-domain": ["*.coder.com"],
198221
})
199222
assert.deepEqual(parse(["--proxy-domain", "*.coder.com", "--proxy-domain", "test.com"]), {
200-
...defaults,
223+
_: [],
201224
"proxy-domain": ["*.coder.com", "test.com"],
202225
})
203226
})

0 commit comments

Comments
 (0)