Skip to content

Commit 0208e4e

Browse files
yannaylarcanis
andauthored
Fix error handling when looking for configuration files (#6676)
## What's the problem this PR addresses? <!-- Describe the rationale of your PR. --> <!-- Link all issues that it closes. (Closes/Resolves #xxxx.) --> When looking for configuration files if reading a candidate throws an exception the exception is not caught and the user gets a cryptic and non-informative message. e.g. if you happen to have a directory named `.yarnrc.yml` in the root of your project every yarn command will result with this message: ``` Internal Error: EISDIR: illegal operation on a directory, read Error: EISDIR: illegal operation on a directory, read ``` which doesn't include the file. ## How did you fix it? <!-- A detailed description of your implementation. --> This change moves the reading operation into the try clause and handles read errors in the same way parsing errors are handled. ## Checklist I did it from GH online editor so I can't run stuff. Sorry. Hopefully someone can pick it up it would save the next poor soul a few hours. <!--- Don't worry if you miss something, chores are automatically tested. --> <!--- This checklist exists to help you remember doing the chores when you submit a PR. --> <!--- Put an `x` in all the boxes that apply. --> - [x] I have read the [Contributing Guide](https://yarnpkg.com/advanced/contributing). <!-- See https://yarnpkg.com/advanced/contributing#preparing-your-pr-to-be-released for more details. --> <!-- Check with `yarn version check` and fix with `yarn version check -i` --> - [ ] I have set the packages that need to be released for my changes to be effective. <!-- The "Testing chores" workflow validates that your PR follows our guidelines. --> <!-- If it doesn't pass, click on it to see details as to what your PR might be missing. --> - [ ] I will check that all automated PR checks pass before the PR gets reviewed. --------- Co-authored-by: Maël Nison <[email protected]>
1 parent df5fabe commit 0208e4e

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

.yarn/versions/a0ea31c2.yml

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
releases:
2+
"@yarnpkg/cli": patch
3+
"@yarnpkg/core": patch
4+
5+
declined:
6+
- "@yarnpkg/plugin-compat"
7+
- "@yarnpkg/plugin-constraints"
8+
- "@yarnpkg/plugin-dlx"
9+
- "@yarnpkg/plugin-essentials"
10+
- "@yarnpkg/plugin-exec"
11+
- "@yarnpkg/plugin-file"
12+
- "@yarnpkg/plugin-git"
13+
- "@yarnpkg/plugin-github"
14+
- "@yarnpkg/plugin-http"
15+
- "@yarnpkg/plugin-init"
16+
- "@yarnpkg/plugin-interactive-tools"
17+
- "@yarnpkg/plugin-link"
18+
- "@yarnpkg/plugin-nm"
19+
- "@yarnpkg/plugin-npm"
20+
- "@yarnpkg/plugin-npm-cli"
21+
- "@yarnpkg/plugin-pack"
22+
- "@yarnpkg/plugin-patch"
23+
- "@yarnpkg/plugin-pnp"
24+
- "@yarnpkg/plugin-pnpm"
25+
- "@yarnpkg/plugin-stage"
26+
- "@yarnpkg/plugin-typescript"
27+
- "@yarnpkg/plugin-version"
28+
- "@yarnpkg/plugin-workspace-tools"
29+
- "@yarnpkg/builder"
30+
- "@yarnpkg/doctor"
31+
- "@yarnpkg/extensions"
32+
- "@yarnpkg/nm"
33+
- "@yarnpkg/pnpify"
34+
- "@yarnpkg/sdks"

packages/yarnpkg-core/sources/Configuration.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1406,15 +1406,15 @@ export class Configuration {
14061406
const rcPath = ppath.join(currentCwd, rcFilename as PortablePath);
14071407

14081408
if (xfs.existsSync(rcPath)) {
1409-
const content = await xfs.readFilePromise(rcPath, `utf8`);
1410-
14111409
let data;
1410+
let content;
14121411
try {
1412+
content = await xfs.readFilePromise(rcPath, `utf8`);
14131413
data = parseSyml(content) as any;
14141414
} catch (error) {
14151415
let tip = ``;
14161416

1417-
if (content.match(/^\s+(?!-)[^:]+\s+\S+/m))
1417+
if (content?.match(/^\s+(?!-)[^:]+\s+\S+/m))
14181418
tip = ` (in particular, make sure you list the colons after each key name)`;
14191419

14201420
throw new UsageError(`Parse error when loading ${rcPath}; please check it's proper Yaml${tip}`);

0 commit comments

Comments
 (0)