Spaces:
Running
Running
const u = require('universalify').fromPromise | |
const path = require('path') | |
const fs = require('../fs') | |
const mkdir = require('../mkdirs') | |
const { pathExists } = require('../path-exists') | |
const { areIdentical } = require('../util/stat') | |
async function createLink (srcpath, dstpath) { | |
let dstStat | |
try { | |
dstStat = await fs.lstat(dstpath) | |
} catch { | |
// ignore error | |
} | |
let srcStat | |
try { | |
srcStat = await fs.lstat(srcpath) | |
} catch (err) { | |
err.message = err.message.replace('lstat', 'ensureLink') | |
throw err | |
} | |
if (dstStat && areIdentical(srcStat, dstStat)) return | |
const dir = path.dirname(dstpath) | |
const dirExists = await pathExists(dir) | |
if (!dirExists) { | |
await mkdir.mkdirs(dir) | |
} | |
await fs.link(srcpath, dstpath) | |
} | |
function createLinkSync (srcpath, dstpath) { | |
let dstStat | |
try { | |
dstStat = fs.lstatSync(dstpath) | |
} catch {} | |
try { | |
const srcStat = fs.lstatSync(srcpath) | |
if (dstStat && areIdentical(srcStat, dstStat)) return | |
} catch (err) { | |
err.message = err.message.replace('lstat', 'ensureLink') | |
throw err | |
} | |
const dir = path.dirname(dstpath) | |
const dirExists = fs.existsSync(dir) | |
if (dirExists) return fs.linkSync(srcpath, dstpath) | |
mkdir.mkdirsSync(dir) | |
return fs.linkSync(srcpath, dstpath) | |
} | |
module.exports = { | |
createLink: u(createLink), | |
createLinkSync | |
} | |