Skip to content

Commit

Permalink
Fix error handling when looking for configuration files (#6676)
Browse files Browse the repository at this point in the history
## 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]>
  • Loading branch information
yannayl and arcanis authored Feb 14, 2025
1 parent df5fabe commit 0208e4e
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 3 deletions.
34 changes: 34 additions & 0 deletions .yarn/versions/a0ea31c2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
releases:
"@yarnpkg/cli": patch
"@yarnpkg/core": patch

declined:
- "@yarnpkg/plugin-compat"
- "@yarnpkg/plugin-constraints"
- "@yarnpkg/plugin-dlx"
- "@yarnpkg/plugin-essentials"
- "@yarnpkg/plugin-exec"
- "@yarnpkg/plugin-file"
- "@yarnpkg/plugin-git"
- "@yarnpkg/plugin-github"
- "@yarnpkg/plugin-http"
- "@yarnpkg/plugin-init"
- "@yarnpkg/plugin-interactive-tools"
- "@yarnpkg/plugin-link"
- "@yarnpkg/plugin-nm"
- "@yarnpkg/plugin-npm"
- "@yarnpkg/plugin-npm-cli"
- "@yarnpkg/plugin-pack"
- "@yarnpkg/plugin-patch"
- "@yarnpkg/plugin-pnp"
- "@yarnpkg/plugin-pnpm"
- "@yarnpkg/plugin-stage"
- "@yarnpkg/plugin-typescript"
- "@yarnpkg/plugin-version"
- "@yarnpkg/plugin-workspace-tools"
- "@yarnpkg/builder"
- "@yarnpkg/doctor"
- "@yarnpkg/extensions"
- "@yarnpkg/nm"
- "@yarnpkg/pnpify"
- "@yarnpkg/sdks"
6 changes: 3 additions & 3 deletions packages/yarnpkg-core/sources/Configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1406,15 +1406,15 @@ export class Configuration {
const rcPath = ppath.join(currentCwd, rcFilename as PortablePath);

if (xfs.existsSync(rcPath)) {
const content = await xfs.readFilePromise(rcPath, `utf8`);

let data;
let content;
try {
content = await xfs.readFilePromise(rcPath, `utf8`);
data = parseSyml(content) as any;
} catch (error) {
let tip = ``;

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

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

0 comments on commit 0208e4e

Please sign in to comment.