Unverified Commit 4ce2e954 authored by adisbladis's avatar adisbladis Committed by GitHub
Browse files

linkNodeModulesHook: replace symlinks atomically (#499199)

parents 75a8cad7 a15d4a44
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -71,17 +71,22 @@ async function main() {
      // Don't unlink this file, we just wrote it.
      managed.delete(file);

      // Link file
      // No need to replace the symlink if it already points to the right target
      try {
        await fs.promises.symlink(sourcePath, targetPath);
        if (await fs.promises.readlink(targetPath) === sourcePath) {
          return
        }
      } catch (err) {
        // If the target file already exists remove it and try again
        if (err.code !== "EEXIST") {
        // If the symlink doesn't already exist, keep going. If we get a
        // different error trying to stat it, fail.
        if (err.code !== "ENOENT") {
          throw err;
        }
        await fs.promises.unlink(targetPath);
        await fs.promises.symlink(sourcePath, targetPath);
      }
      // Replace the link, if it exists, atomically.
      const tmpPath = `${targetPath}.tmp.${process.pid}`
      await fs.promises.symlink(sourcePath, tmpPath);
      await fs.promises.rename(tmpPath, targetPath);
    })
  );