From 5bec993b7b583414ab10941a957f8d3fd8392a09 Mon Sep 17 00:00:00 2001 From: Michael Tsulaya <31821568+immitsu@users.noreply.github.com> Date: Mon, 22 Feb 2021 21:21:52 +0300 Subject: [PATCH] [babel-cli] Don't fail when `chmod` throws an error (#12846) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolò Ribaudo Co-authored-by: Federico Ciardi --- packages/babel-cli/src/babel/util.js | 6 +++++- packages/babel-cli/test/index.js | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/babel-cli/src/babel/util.js b/packages/babel-cli/src/babel/util.js index fc1bf2b58924..5dfa6217bca5 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 7cedb49e334c..b605f3b623e7 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(); + }); + }); +});