1 var path = require('path')
2 var fs = require('graceful-fs')
3 var mkdir = require('../mkdirs')
5 function createLink (srcpath, dstpath, callback) {
6 function makeLink (srcpath, dstpath) {
7 fs.link(srcpath, dstpath, function (err) {
8 if (err) return callback(err)
13 fs.exists(dstpath, function (destinationExists) {
14 if (destinationExists) return callback(null)
15 fs.lstat(srcpath, function (err, stat) {
17 err.message = err.message.replace('lstat', 'ensureLink')
21 var dir = path.dirname(dstpath)
22 fs.exists(dir, function (dirExists) {
23 if (dirExists) return makeLink(srcpath, dstpath)
24 mkdir.mkdirs(dir, function (err) {
25 if (err) return callback(err)
26 makeLink(srcpath, dstpath)
33 function createLinkSync (srcpath, dstpath, callback) {
34 var destinationExists = fs.existsSync(dstpath)
35 if (destinationExists) return undefined
40 err.message = err.message.replace('lstat', 'ensureLink')
44 var dir = path.dirname(dstpath)
45 var dirExists = fs.existsSync(dir)
46 if (dirExists) return fs.linkSync(srcpath, dstpath)
49 return fs.linkSync(srcpath, dstpath)
53 createLink: createLink,
54 createLinkSync: createLinkSync,
56 ensureLink: createLink,
57 ensureLinkSync: createLinkSync