Lines Matching refs:dest

58 async function cpFn(src, dest, opts) {
65 const stats = await checkPaths(src, dest, opts);
68 await checkParentPaths(src, srcStat, dest);
69 return checkParentDir(destStat, src, dest, opts);
72 async function checkPaths(src, dest, opts) {
73 if (opts.filter && !(await opts.filter(src, dest))) {
76 const { 0: srcStat, 1: destStat } = await getStats(src, dest, opts);
80 message: 'src and dest cannot be the same',
81 path: dest,
90 `with non-directory ${dest}`,
91 path: dest,
100 `with directory ${dest}`,
101 path: dest,
109 if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
111 message: `cannot copy ${src} to a subdirectory of self ${dest}`,
112 path: dest,
126 function getStats(src, dest, opts) {
132 PromisePrototypeThen(statFunc(dest), undefined, (err) => {
139 async function checkParentDir(destStat, src, dest, opts) {
140 const destParent = dirname(dest);
142 if (dirExists) return getStatsForCopy(destStat, src, dest, opts);
144 return getStatsForCopy(destStat, src, dest, opts);
147 function pathExists(dest) {
149 stat(dest),
154 // Recursively check if dest parent is a subdirectory of src.
156 // checks the src and dest inodes. It starts from the deepest
158 async function checkParentPaths(src, srcStat, dest) {
160 const destParent = resolve(dirname(dest));
173 message: `cannot copy ${src} to a subdirectory of self ${dest}`,
174 path: dest,
186 // Return true if dest is a subdir of src, otherwise false.
188 function isSrcSubdir(src, dest) {
190 const destArr = normalizePathToArray(dest);
194 async function getStatsForCopy(destStat, src, dest, opts) {
198 return onDir(srcStat, destStat, src, dest, opts);
210 return onFile(srcStat, destStat, src, dest, opts);
212 return onLink(destStat, src, dest, opts);
215 message: `cannot copy a socket file: ${dest}`,
216 path: dest,
223 message: `cannot copy a FIFO pipe: ${dest}`,
224 path: dest,
231 message: `cannot copy an unknown file type: ${dest}`,
232 path: dest,
239 function onFile(srcStat, destStat, src, dest, opts) {
240 if (!destStat) return _copyFile(srcStat, src, dest, opts);
241 return mayCopyFile(srcStat, src, dest, opts);
244 async function mayCopyFile(srcStat, src, dest, opts) {
246 await unlink(dest);
247 return _copyFile(srcStat, src, dest, opts);
250 message: `${dest} already exists`,
251 path: dest,
259 async function _copyFile(srcStat, src, dest, opts) {
260 await copyFile(src, dest, opts.mode);
262 return handleTimestampsAndMode(srcStat.mode, src, dest);
264 return setDestMode(dest, srcStat.mode);
267 async function handleTimestampsAndMode(srcMode, src, dest) {
272 await makeFileWritable(dest, srcMode);
273 return setDestTimestampsAndMode(srcMode, src, dest);
275 return setDestTimestampsAndMode(srcMode, src, dest);
282 function makeFileWritable(dest, srcMode) {
283 return setDestMode(dest, srcMode | 0o200);
286 async function setDestTimestampsAndMode(srcMode, src, dest) {
287 await setDestTimestamps(src, dest);
288 return setDestMode(dest, srcMode);
291 function setDestMode(dest, srcMode) {
292 return chmod(dest, srcMode);
295 async function setDestTimestamps(src, dest) {
300 return utimes(dest, updatedSrcStat.atime, updatedSrcStat.mtime);
303 function onDir(srcStat, destStat, src, dest, opts) {
304 if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts);
305 return copyDir(src, dest, opts);
308 async function mkDirAndCopy(srcMode, src, dest, opts) {
309 await mkdir(dest);
310 await copyDir(src, dest, opts);
311 return setDestMode(dest, srcMode);
314 async function copyDir(src, dest, opts) {
319 const destItem = join(dest, name);
325 async function onLink(destStat, src, dest, opts) {
331 return symlink(resolvedSrc, dest);
335 resolvedDest = await readlink(dest);
338 // Windows may throw UNKNOWN error. If dest already exists,
341 return symlink(resolvedSrc, dest);
346 resolvedDest = resolve(dirname(dest), resolvedDest);
352 path: dest,
358 // Do not copy if src is a subdir of dest since unlinking
359 // dest in this case would result in removing src contents
365 path: dest,
371 return copyLink(resolvedSrc, dest);
374 async function copyLink(resolvedSrc, dest) {
375 await unlink(dest);
376 return symlink(resolvedSrc, dest);