refactor: replace unmaintained shelljs dependency by execa (#10358)

Co-authored-by: sebastien <lorber.sebastien@gmail.com>
This commit is contained in:
ozaki 2025-02-28 14:31:01 +01:00 committed by GitHub
parent a6ef3897e0
commit 7f4a37949e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 139 additions and 85 deletions

View file

@ -8,9 +8,15 @@
import path from 'path';
import fs from 'fs-extra';
import _ from 'lodash';
import shell from 'shelljs'; // TODO replace with async-first version
import execa from 'execa';
const realHasGitFn = () => !!shell.which('git');
const realHasGitFn = () => {
try {
return execa.sync('git', ['--version']).exitCode === 0;
} catch (error) {
return false;
}
};
// The hasGit call is synchronous IO so we memoize it
// The user won't install Git in the middle of a build anyway...
@ -123,27 +129,13 @@ export async function getFileCommitDate(
file,
)}"`;
const result = await new Promise<{
code: number;
stdout: string;
stderr: string;
}>((resolve) => {
shell.exec(
command,
{
// Setting cwd is important, see: https://github.com/facebook/docusaurus/pull/5048
cwd: path.dirname(file),
silent: true,
},
(code, stdout, stderr) => {
resolve({code, stdout, stderr});
},
);
const result = await execa(command, {
cwd: path.dirname(file),
shell: true,
});
if (result.code !== 0) {
if (result.exitCode !== 0) {
throw new Error(
`Failed to retrieve the git history for file "${file}" with exit code ${result.code}: ${result.stderr}`,
`Failed to retrieve the git history for file "${file}" with exit code ${result.exitCode}: ${result.stderr}`,
);
}