Lines Matching refs:src

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',
89 message: `cannot overwrite directory ${src} ` +
99 message: `cannot overwrite non-directory ${src} ` +
109 if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
111 message: `cannot copy ${src} to a subdirectory of self ${dest}`,
126 function getStats(src, dest, opts) {
131 statFunc(src),
139 async function checkParentDir(destStat, src, dest, opts) {
142 if (dirExists) return getStatsForCopy(destStat, src, dest, opts);
144 return getStatsForCopy(destStat, src, dest, opts);
154 // Recursively check if dest parent is a subdirectory of src.
156 // checks the src and dest inodes. It starts from the deepest
157 // parent and stops once it reaches the src parent or the root path.
158 async function checkParentPaths(src, srcStat, dest) {
159 const srcParent = resolve(dirname(src));
173 message: `cannot copy ${src} to a subdirectory of self ${dest}`,
180 return checkParentPaths(src, srcStat, destParent);
186 // Return true if dest is a subdir of src, otherwise false.
188 function isSrcSubdir(src, dest) {
189 const srcArr = normalizePathToArray(src);
194 async function getStatsForCopy(destStat, src, dest, opts) {
196 const srcStat = await statFn(src);
198 return onDir(srcStat, destStat, src, dest, opts);
201 message: `${src} is a directory (not copied)`,
202 path: src,
210 return onFile(srcStat, destStat, src, dest, opts);
212 return onLink(destStat, src, dest, opts);
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) {
247 return _copyFile(srcStat, src, dest, opts);
259 async function _copyFile(srcStat, src, dest, opts) {
260 await copyFile(src, dest, opts.mode);
262 return handleTimestampsAndMode(srcStat.mode, src, dest);
267 async function handleTimestampsAndMode(srcMode, src, dest) {
273 return setDestTimestampsAndMode(srcMode, src, dest);
275 return setDestTimestampsAndMode(srcMode, src, dest);
286 async function setDestTimestampsAndMode(srcMode, src, dest) {
287 await setDestTimestamps(src, dest);
295 async function setDestTimestamps(src, dest) {
299 const updatedSrcStat = await stat(src);
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) {
310 await copyDir(src, dest, opts);
314 async function copyDir(src, dest, opts) {
315 const dir = await opendir(src);
318 const srcItem = join(src, name);
325 async function onLink(destStat, src, dest, opts) {
326 let resolvedSrc = await readlink(src);
328 resolvedSrc = resolve(dirname(src), resolvedSrc);
358 // Do not copy if src is a subdir of dest since unlinking
359 // dest in this case would result in removing src contents
361 const srcStat = await stat(src);