diff --git a/packages/babel-cli/src/babel/util.js b/packages/babel-cli/src/babel/util.js index fc1bf2b589..5dfa6217bc 100644 --- a/packages/babel-cli/src/babel/util.js +++ b/packages/babel-cli/src/babel/util.js @@ -6,7 +6,11 @@ import path from "path"; import fs from "fs"; export function chmod(src: string, dest: string): void { - fs.chmodSync(dest, fs.statSync(src).mode); + try { + fs.chmodSync(dest, fs.statSync(src).mode); + } catch (err) { + console.warn(`Cannot change permissions of ${dest}`); + } } type ReaddirFilter = (filename: string) => boolean; diff --git a/packages/babel-cli/test/index.js b/packages/babel-cli/test/index.js index 7cedb49e33..b605f3b623 100644 --- a/packages/babel-cli/test/index.js +++ b/packages/babel-cli/test/index.js @@ -7,6 +7,7 @@ const escapeRegExp = require("lodash/escapeRegExp"); const merge = require("lodash/merge"); const path = require("path"); const fs = require("fs"); +const { chmod } = require("../lib/babel/util"); const fixtureLoc = path.join(__dirname, "fixtures"); const tmpLoc = path.join(__dirname, "tmp"); @@ -269,3 +270,15 @@ fs.readdirSync(fixtureLoc).forEach(function (binName) { }); }); }); + +describe("util.js", () => { + describe("chmod", () => { + it("should warn the user if chmod fails", () => { + const spyConsoleWarn = jest.spyOn(console, "warn"); + // should expect a string as first argument + chmod(100, "file.js"); + expect(spyConsoleWarn).toHaveBeenCalledTimes(1); + spyConsoleWarn.mockRestore(); + }); + }); +});