diff options
Diffstat (limited to 'deps/npm/node_modules/read-package-json/read-json.js')
-rw-r--r-- | deps/npm/node_modules/read-package-json/read-json.js | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/deps/npm/node_modules/read-package-json/read-json.js b/deps/npm/node_modules/read-package-json/read-json.js index 969bcc030b..243af8e271 100644 --- a/deps/npm/node_modules/read-package-json/read-json.js +++ b/deps/npm/node_modules/read-package-json/read-json.js @@ -339,10 +339,26 @@ function githead_ (file, data, dir, head, cb) { data.gitHead = head.trim() return cb(null, data) } - var headFile = head.replace(/^ref: /, '').trim() - headFile = path.resolve(dir, '.git', headFile) + var headRef = head.replace(/^ref: /, '').trim() + var headFile = path.resolve(dir, '.git', headRef) fs.readFile(headFile, 'utf8', function (er, head) { - if (er || !head) return cb(null, data) + if (er || !head) { + var packFile = path.resolve(dir, '.git/packed-refs') + return fs.readFile(packFile, 'utf8', function (er, refs) { + if (er || !refs) { + return cb(null, data) + } + refs = refs.split('\n') + for (var i = 0; i < refs.length; i++) { + var match = refs[i].match(/^([0-9a-f]{40}) (.+)$/) + if (match && match[2].trim() === headRef) { + data.gitHead = match[1] + break + } + } + return cb(null, data) + }) + } head = head.replace(/^ref: /, '').trim() data.gitHead = head return cb(null, data) @@ -371,7 +387,7 @@ function checkBinReferences_ (file, data, warn, cb) { var relName = data.bin[key] try { var binPath = path.resolve(dirName, relName) - fs.exists(binPath, handleExists.bind(null, relName)) + fs.stat(binPath, (err) => handleExists(relName, !err)) } catch (error) { if (error.message === 'Arguments to path.resolve must be strings' || error.message.indexOf('Path must be a string') === 0) { warn('Bin filename for ' + key + ' is not a string: ' + util.inspect(relName)) |