Fix mkdir to set $! errno correctly (EEXIST)#323
Merged
Conversation
- Use Files.createDirectory() instead of Files.createDirectories() so it throws FileAlreadyExistsException when directory already exists - Use handleIOException() which properly maps exceptions to errno values (e.g., FileAlreadyExistsException -> EEXIST=17) This fixes jcpan failing on re-run when build directories exist. The CPAN::Distribution module relies on mkdir returning false with $! set to EEXIST to increment the suffix number for build directories. Before: $!+0 returned 0 regardless of error type After: $!+0 returns 17 (EEXIST) when mkdir fails on existing directory Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <noreply@cognition.ai>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Files.createDirectory()instead ofFiles.createDirectories()so it throwsFileAlreadyExistsExceptionwhen directory already existshandleIOException()which properly maps exceptions to errno values (e.g.,FileAlreadyExistsException-> EEXIST=17)This fixes jcpan failing on re-run when build directories exist. The CPAN::Distribution module relies on mkdir returning false with
$!set to EEXIST to increment the suffix number for build directories.Before:
$!+0returned 0 regardless of error typeAfter:
$!+0returns 17 (EEXIST) when mkdir fails on existing directoryTest plan
makepasses./jperl -e 'use Errno; mkdir("/tmp", 0777); print ($!+0), " == ", Errno::EEXIST()'now prints17 == 17./jcpan -t Moworks on first run./jcpan -t Moworks on second run (was failing before this fix)Generated with Devin