summaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/lib/install/action/finalize.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/lib/install/action/finalize.js')
-rw-r--r--deps/node/deps/npm/lib/install/action/finalize.js106
1 files changed, 0 insertions, 106 deletions
diff --git a/deps/node/deps/npm/lib/install/action/finalize.js b/deps/node/deps/npm/lib/install/action/finalize.js
deleted file mode 100644
index e46f1b9d..00000000
--- a/deps/node/deps/npm/lib/install/action/finalize.js
+++ /dev/null
@@ -1,106 +0,0 @@
-'use strict'
-const path = require('path')
-const fs = require('graceful-fs')
-const Bluebird = require('bluebird')
-const rimraf = Bluebird.promisify(require('rimraf'))
-const mkdirp = Bluebird.promisify(require('mkdirp'))
-const lstat = Bluebird.promisify(fs.lstat)
-const readdir = Bluebird.promisify(fs.readdir)
-const symlink = Bluebird.promisify(fs.symlink)
-const gentlyRm = Bluebird.promisify(require('../../utils/gently-rm'))
-const moduleStagingPath = require('../module-staging-path.js')
-const move = require('move-concurrently')
-const moveOpts = {fs: fs, Promise: Bluebird, maxConcurrency: 4}
-const getRequested = require('../get-requested.js')
-const log = require('npmlog')
-const packageId = require('../../utils/package-id.js')
-
-module.exports = function (staging, pkg, log) {
- log.silly('finalize', pkg.realpath)
-
- const extractedTo = moduleStagingPath(staging, pkg)
-
- const delpath = path.join(path.dirname(pkg.realpath), '.' + path.basename(pkg.realpath) + '.DELETE')
- let movedDestAway = false
-
- const requested = pkg.package._requested || getRequested(pkg)
- if (requested.type === 'directory') {
- const relative = path.relative(path.dirname(pkg.path), pkg.realpath)
- return makeParentPath(pkg.path)
- .then(() => symlink(relative, pkg.path, 'junction'))
- .catch((ex) => {
- return rimraf(pkg.path).then(() => symlink(relative, pkg.path, 'junction'))
- })
- } else {
- return makeParentPath(pkg.realpath)
- .then(moveStagingToDestination)
- .then(restoreOldNodeModules)
- .catch((err) => {
- if (movedDestAway) {
- return rimraf(pkg.realpath).then(moveOldDestinationBack).then(() => {
- throw err
- })
- } else {
- throw err
- }
- })
- .then(() => rimraf(delpath))
- }
-
- function makeParentPath (dir) {
- return mkdirp(path.dirname(dir))
- }
-
- function moveStagingToDestination () {
- return destinationIsClear()
- .then(actuallyMoveStaging)
- .catch(() => moveOldDestinationAway().then(actuallyMoveStaging))
- }
-
- function destinationIsClear () {
- return lstat(pkg.realpath).then(() => {
- throw new Error('destination exists')
- }, () => {})
- }
-
- function actuallyMoveStaging () {
- return move(extractedTo, pkg.realpath, moveOpts)
- }
-
- function moveOldDestinationAway () {
- return rimraf(delpath).then(() => {
- return move(pkg.realpath, delpath, moveOpts)
- }).then(() => { movedDestAway = true })
- }
-
- function moveOldDestinationBack () {
- return move(delpath, pkg.realpath, moveOpts).then(() => { movedDestAway = false })
- }
-
- function restoreOldNodeModules () {
- if (!movedDestAway) return
- return readdir(path.join(delpath, 'node_modules')).catch(() => []).then((modules) => {
- if (!modules.length) return
- return mkdirp(path.join(pkg.realpath, 'node_modules')).then(() => Bluebird.map(modules, (file) => {
- const from = path.join(delpath, 'node_modules', file)
- const to = path.join(pkg.realpath, 'node_modules', file)
- return move(from, to, moveOpts)
- }))
- })
- }
-}
-
-module.exports.rollback = function (top, staging, pkg) {
- return Bluebird.try(() => {
- const requested = pkg.package._requested || getRequested(pkg)
- if (requested && requested.type === 'directory') return Promise.resolve()
- // strictly speaking rolling back a finalize should ONLY remove module that
- // was being finalized, not any of the things under it. But currently
- // those modules are guaranteed to be useless so we may as well remove them too.
- // When/if we separate `commit` step and can rollback to previous versions
- // of upgraded modules then we'll need to revisit this…
- return gentlyRm(pkg.path, false, top).catch((err) => {
- log.warn('rollback', `Rolling back ${packageId(pkg)} failed (this is probably harmless): ${err.message ? err.message : err}`)
- })
- })
-}