mirror of https://github.com/actions/toolkit
mkdirP: don't throw errors if windows drive exists
parent
457303960f
commit
ca990561d4
|
@ -864,6 +864,25 @@ describe('mkdirP', () => {
|
|||
(await fs.lstat(path.join(realDirPath, 'sub_dir'))).isDirectory()
|
||||
).toBe(true)
|
||||
})
|
||||
|
||||
if (ioUtil.IS_WINDOWS) {
|
||||
it('show error only if Windows drive does not exist', async () => {
|
||||
let errMsg: string
|
||||
const driveRoot = path.parse(getTestTemp()).root
|
||||
// Assuming 'A:\' is not a common Windows drive lets us test for a non-existing drive
|
||||
for (const testPath of [driveRoot, 'A:\\']) {
|
||||
if (await ioUtil.exists(testPath)) {
|
||||
await io.mkdirP(testPath)
|
||||
} else {
|
||||
errMsg = `Drive '${testPath}' does not exist.`
|
||||
await expect(io.mkdirP(testPath)).rejects.toHaveProperty(
|
||||
'message',
|
||||
errMsg
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
describe('which', () => {
|
||||
|
|
|
@ -141,7 +141,17 @@ export async function rmRF(inputPath: string): Promise<void> {
|
|||
*/
|
||||
export async function mkdirP(fsPath: string): Promise<void> {
|
||||
ok(fsPath, 'a path argument must be provided')
|
||||
await ioUtil.mkdir(fsPath, {recursive: true})
|
||||
// mkdirP would throw EPERM error if `fsPath` is a Windows drive root dir, e.g. 'C:\'
|
||||
// even when it exists. This aligns with node's fs.mkdir impl. However, mkdirP shouldn't
|
||||
// throw errors if `fsPath` exists regardless of the underlying platform.
|
||||
// In this case, we will only check if drive exists and throw an error if it doesn't.
|
||||
if (ioUtil.IS_WINDOWS && path.parse(fsPath).root === fsPath) {
|
||||
if (!(await ioUtil.exists(fsPath))) {
|
||||
throw new Error(`Drive '${fsPath}' does not exist.`)
|
||||
}
|
||||
} else {
|
||||
await ioUtil.mkdir(fsPath, {recursive: true})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue