Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2010-10-31 06:30:59 +0300
committerisaacs <i@izs.me>2010-10-31 06:30:59 +0300
commite54204c472f98bf7447e7696460fc6db00fc6fb2 (patch)
treee3f18d946e023e8dc9a226f7e1a07450446ec433
parent6646c4eac9f07f9a048e5a78ede8377bedaea9dd (diff)
npm deprecate function
-rw-r--r--lib/cache.js16
-rw-r--r--lib/deprecate.js33
-rw-r--r--npm.js1
3 files changed, 49 insertions, 1 deletions
diff --git a/lib/cache.js b/lib/cache.js
index 13e25adb2..008397eea 100644
--- a/lib/cache.js
+++ b/lib/cache.js
@@ -45,6 +45,7 @@ function read (name, ver, cb) {
var jsonFile = path.join(npm.cache, name, ver, "package.json")
function c (er, data) {
if (!er) cacheSeen[data._id] = data
+ deprCheck(data)
return cb(er, data)
}
if (name+"@"+ver in cacheSeen) {
@@ -52,6 +53,7 @@ function read (name, ver, cb) {
}
readJson(jsonFile, function (er, data) {
if (er) return addNameVersion(name, ver, c)
+ deprCheck(data)
c(er, data)
})
}
@@ -100,7 +102,6 @@ function clean (args, cb) {
rm(clean, cb)
}
-
// npm cache add <tarball-url>
// npm cache add <pkg> <ver>
// npm cache add <tarball>
@@ -137,6 +138,7 @@ function addRemoteTarball (url, cb) {
function addNameVersion (name, ver, cb) {
registry.get(name, ver, function (er, data, json) {
if (er) return cb(er)
+ deprCheck(data)
var folder = path.join(npm.cache, data.name, data.version)
, tgz = path.join(folder, "package.tgz")
mkdir(folder, function (er) {
@@ -192,6 +194,7 @@ function addPlacedTarball (p, cb) {
if (er) return cb(er)
readJson(path.join(folder, "package.json"), function (er, data) {
if (er) return cb(er)
+ deprCheck(data)
fs.writeFile(json, JSON.stringify(data), function (er) {
if (er) return log.er(cb, "Could not write to "+json)(er)
cb(null, data)
@@ -207,6 +210,7 @@ function addLocalDirectory (p, cb) {
"Adding a cache directory to the cache will make the world implode."))
readJson(path.join(p, "package.json"), function (er, data) {
if (er) return cb(er)
+ deprCheck(data)
var tgz = path.join(npm.cache, data.name, data.version, "package.tgz")
packTar(tgz, p, function (er) {
if (er) return cb(er)
@@ -284,3 +288,13 @@ function packTar (targetTarball, folder, cb) {
})
})
}
+var deprecated = {}
+ , deprWarned = {}
+function deprCheck (data) {
+ if (deprecated[data._id]) data.deprecated = deprecated[data._id]
+ if (data.deprecated) deprecated[data._id] = data.deprecated
+ if (!deprWarned[data._id]) {
+ deprWarned[data._id] = true
+ log.warn(data._id+": "+data.deprecated, "deprecated")
+ }
+}
diff --git a/lib/deprecate.js b/lib/deprecate.js
new file mode 100644
index 000000000..b42d2c012
--- /dev/null
+++ b/lib/deprecate.js
@@ -0,0 +1,33 @@
+
+module.exports = deprecate
+
+deprecate.usage = "npm deprecate <pkg>[@<version>] <message>"
+
+var registry = require("./utils/registry")
+ , semver = require("./utils/semver")
+ , log = require("./utils/log")
+ , asyncMap = require("./utils/async-map")
+
+function deprecate (args, cb) {
+ var pkg = args[0]
+ , msg = args[1]
+ if (msg === undefined) return cb(new Error(deprecate.usage))
+ // fetch the data and make sure it exists.
+ pkg = pkg.split(/@/)
+ var name = pkg.shift()
+ , ver = pkg.join("@")
+ if (semver.validRange(ver) === null) {
+ return cb(new Error("invalid version range: "+ver))
+ }
+ registry.get(name, function (er, data) {
+ if (er) return cb(er)
+ // filter all the versions that match
+ Object.keys(data.versions).filter(function (v) {
+ return semver.satisfies(v, ver)
+ }).forEach(function (v) {
+ data.versions[v].deprecated = msg
+ })
+ // now update the doc on the registry
+ registry.request.PUT(data._id, data, cb)
+ })
+}
diff --git a/npm.js b/npm.js
index d1353f95e..9392ee504 100644
--- a/npm.js
+++ b/npm.js
@@ -78,6 +78,7 @@ var commandCache = {}
, "outdated"
, "init"
, "completion"
+ , "deprecate"
]
, fullList = npm.fullList = cmdList.concat(aliasNames)
, abbrevs = abbrev(fullList)