diff options
| author | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-01 21:54:41 +0100 | 
|---|---|---|
| committer | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-01 21:54:41 +0100 | 
| commit | 6c8128f9fd5a5d0be115806c35a21b3d683df8d6 (patch) | |
| tree | f46c2f6b3b9b294ff32bd75c08ccdc9e7a8cc4ef /sandbox/testAppNevena/Front/node_modules/cacache/lib/util/move-file.js | |
| parent | 2400b84e95913665da6279114168148444b8f9ab (diff) | |
| parent | 7d3640f824f46490b47bd95f1c5a16644f712068 (diff) | |
Merge branch 'dev' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into logo
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/cacache/lib/util/move-file.js')
| -rw-r--r-- | sandbox/testAppNevena/Front/node_modules/cacache/lib/util/move-file.js | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/sandbox/testAppNevena/Front/node_modules/cacache/lib/util/move-file.js b/sandbox/testAppNevena/Front/node_modules/cacache/lib/util/move-file.js new file mode 100644 index 00000000..c3f9e35e --- /dev/null +++ b/sandbox/testAppNevena/Front/node_modules/cacache/lib/util/move-file.js @@ -0,0 +1,67 @@ +'use strict' + +const fs = require('fs') +const util = require('util') +const chmod = util.promisify(fs.chmod) +const unlink = util.promisify(fs.unlink) +const stat = util.promisify(fs.stat) +const move = require('@npmcli/move-file') +const pinflight = require('promise-inflight') + +module.exports = moveFile + +function moveFile (src, dest) { +  const isWindows = global.__CACACHE_TEST_FAKE_WINDOWS__ || +    process.platform === 'win32' + +  // This isn't quite an fs.rename -- the assumption is that +  // if `dest` already exists, and we get certain errors while +  // trying to move it, we should just not bother. +  // +  // In the case of cache corruption, users will receive an +  // EINTEGRITY error elsewhere, and can remove the offending +  // content their own way. +  // +  // Note that, as the name suggests, this strictly only supports file moves. +  return new Promise((resolve, reject) => { +    fs.link(src, dest, (err) => { +      if (err) { +        if (isWindows && err.code === 'EPERM') { +          // XXX This is a really weird way to handle this situation, as it +          // results in the src file being deleted even though the dest +          // might not exist.  Since we pretty much always write files to +          // deterministic locations based on content hash, this is likely +          // ok (or at worst, just ends in a future cache miss).  But it would +          // be worth investigating at some time in the future if this is +          // really what we want to do here. +          return resolve() +        } else if (err.code === 'EEXIST' || err.code === 'EBUSY') { +          // file already exists, so whatever +          return resolve() +        } else +          return reject(err) +      } else +        return resolve() +    }) +  }) +    .then(() => { +      // content should never change for any reason, so make it read-only +      return Promise.all([ +        unlink(src), +        !isWindows && chmod(dest, '0444'), +      ]) +    }) +    .catch(() => { +      return pinflight('cacache-move-file:' + dest, () => { +        return stat(dest).catch((err) => { +          if (err.code !== 'ENOENT') { +            // Something else is wrong here. Bail bail bail +            throw err +          } +          // file doesn't already exist! let's try a rename -> copy fallback +          // only delete if it successfully copies +          return move(src, dest) +        }) +      }) +    }) +} | 
