mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-08-12 04:58:01 +00:00
Apparently, npm has changed its request accept header, so that cache lookup misses. This causes an ENOTCACHED error when doing the offline install in do_compile() from npm.bbclass. Fix it by updating the fake cache entry to match the newest behaviour from npm. Note that npm doesn't agree with itself, as it still uses the previous header value when doing `npm cache add <pkg>`, but the new value when doing `npm install <pkg>`. Bug submitted upstream: https://github.com/npm/cli/issues/7465 Signed-off-by: Martin Hundebøll <martin@geanix.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
78 lines
1.6 KiB
JavaScript
Executable File
78 lines
1.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/// Usage: oe-npm-cache <cache-dir> <type> <key> <file-name>
|
|
/// <type> ... meta - metainformation about package
|
|
/// tgz - tarball
|
|
|
|
const process = require("node:process");
|
|
|
|
module.paths.unshift("@@libdir@@/node_modules/npm/node_modules");
|
|
|
|
const cacache = require('cacache')
|
|
const fs = require('fs')
|
|
|
|
// argv[0] is 'node', argv[1] is this script
|
|
const cache_dir = process.argv[2]
|
|
const type = process.argv[3]
|
|
const key = process.argv[4]
|
|
const file = process.argv[5]
|
|
|
|
const data = fs.readFileSync(file)
|
|
|
|
// metadata content is highly nodejs dependent; when cache entries are not
|
|
// found, place debug statements in 'make-fetch-happen/lib/cache/policy.js'
|
|
// (CachePolicy::satisfies())
|
|
const xlate = {
|
|
'meta': {
|
|
'key_prefix': 'make-fetch-happen:request-cache:',
|
|
'metadata': function() {
|
|
return {
|
|
time: Date.now(),
|
|
url: key,
|
|
reqHeaders: {
|
|
'accept': 'application/json',
|
|
},
|
|
resHeaders: {
|
|
"content-type": "application/json",
|
|
"status": 200,
|
|
},
|
|
options: {
|
|
compress: true,
|
|
}
|
|
};
|
|
},
|
|
},
|
|
|
|
'tgz': {
|
|
'key_prefix': 'make-fetch-happen:request-cache:',
|
|
'metadata': function() {
|
|
return {
|
|
time: Date.now(),
|
|
url: key,
|
|
reqHeaders: {
|
|
'accept': '*/*',
|
|
},
|
|
resHeaders: {
|
|
"content-type": "application/octet-stream",
|
|
"status": 200,
|
|
},
|
|
options: {
|
|
compress: true,
|
|
},
|
|
};
|
|
},
|
|
},
|
|
};
|
|
|
|
const info = xlate[type];
|
|
let opts = {}
|
|
|
|
if (info.metadata) {
|
|
opts['metadata'] = info.metadata();
|
|
}
|
|
|
|
cacache.put(cache_dir, info.key_prefix + key, data, opts)
|
|
.then(integrity => {
|
|
console.log(`Saved content of ${key} (${file}).`);
|
|
})
|