From 6e3cf0268646596a31f5f6b39d93ad1bd304e7fc Mon Sep 17 00:00:00 2001 From: Abdulfattah Dabbas Date: Wed, 19 Oct 2016 21:49:38 +0300 Subject: [PATCH 1/3] - Replaced the old way of setting dependency version value to git URL and the release number with setting only the release number as it's enough to be able to install a packages. - Added a check for `commit` variable as it may not exists for some packages. - Added a check that if release number (extracted from .bower.json of the package) is not valid version number (using semver npm library to check) then set the original value from the old bower.json file we read. - If package exists in both `dependencies` and `devDependencies` then fix the release number for both (the old way was to delete `devDependencies` now we don't). --- bower-locker-common.js | 5 +++- bower-locker-lock.js | 59 ++++++++++++++++++++++++++++++++---------- package.json | 3 ++- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/bower-locker-common.js b/bower-locker-common.js index 01477de..c1a2caf 100644 --- a/bower-locker-common.js +++ b/bower-locker-common.js @@ -11,9 +11,12 @@ var cwd = process.cwd(); * @returns {{name: String, commit: String, release: String, src: String, originalSrc: String}} */ function mapDependencyData(bowerInfo) { + var commitValue = bowerInfo._resolution + ? bowerInfo._resolution.commit + : ''; return { name: bowerInfo.name, - commit: bowerInfo._resolution.commit, + commit: commitValue, release: bowerInfo._release, src: bowerInfo._source, originalSrc: bowerInfo._originalSource diff --git a/bower-locker-lock.js b/bower-locker-lock.js index b42736a..6c9eda7 100644 --- a/bower-locker-lock.js +++ b/bower-locker-lock.js @@ -4,6 +4,7 @@ var fs = require('fs'); var bowerInfo = require('./bower-locker-common.js'); var jsonFormat = require('json-format'); +var semver = require('semver'); /* using indent with spaces */ var formatConfig = { type: 'space', @@ -34,25 +35,34 @@ function lock(isVerbose) { process.exit(1); } + // Load all dependencies from the bower_components folder var dependencies = bowerInfo.getAllDependencies(); - // Create new bower config from existing - bowerConfig.bowerLocker = {lastUpdated: (new Date()).toISOString(), lockedVersions: {}}; - bowerConfig.resolutions = {}; - bowerConfig.dependencies = {}; - // Remove devDependency section to prevent version collision - delete bowerConfig.devDependencies; - + bowerConfig.bowerLocker = { + lastUpdated: (new Date()).toISOString(), + //For future improvements + originalVersions: { + dependencies: {}, + devDependencies: {} + } + }; + + //Iterate over dependecies found and set the version number as it found or as it was if not found. dependencies.forEach(function(dep) { // NOTE: Use dirName as the dependency name as it is more accurate than .bower.json properties - var name = dep.dirName; - bowerConfig.dependencies[name] = dep.src + '#' + dep.commit; // _source - bowerConfig.resolutions[name] = dep.commit; - bowerConfig.bowerLocker.lockedVersions[name] = dep.release; - if (isVerbose) { - console.log(' %s (%s): %s', name, dep.release, dep.commit); - } + var name = dep.dirName; + var validVersionNumber = semver.valid(dep.release); + + if(isVerbose) + { + if(!validVersionNumber) + console.log('err: %s with release number as (%s) not locked !', name, dep.release, dep.commit); + else + console.log(' %s (%s): %s locked', name, dep.release, dep.commit); + } + + setReleaseValue(bowerConfig, dep, validVersionNumber); }); // Create copy of original bower.json fs.writeFileSync('bower-locker.bower.json', bowerConfigStr, {encoding: 'utf8'}); @@ -62,4 +72,25 @@ function lock(isVerbose) { console.log('Locking completed.'); } +function setReleaseValue(bowerConfig,dep, validVersionNumber) { + var name = dep.dirName; + if(bowerConfig.dependencies[name]) + { + bowerConfig.bowerLocker.originalVersions.dependencies[name] = bowerConfig.dependencies[name]; + + bowerConfig.dependencies[name] = validVersionNumber + ? dep.release + : bowerConfig.dependencies[name]; + } + + if(bowerConfig.devDependencies[name]) + { + bowerConfig.bowerLocker.originalVersions.devDependencies[name] = bowerConfig.devDependencies[name]; + + bowerConfig.devDependencies[name] = validVersionNumber + ? dep.release + : bowerConfig.devDependencies[name]; + } +} + module.exports = lock; diff --git a/package.json b/package.json index 3816917..9aca7e6 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "commander": "~2.9.0", - "json-format": "~0.1.2" + "json-format": "~0.1.2", + "semver": "~1.0.0" } } From 2081a5834ab1248cf6893d127a572dd35d376e8a Mon Sep 17 00:00:00 2001 From: Abdulfattah Dabbas Date: Wed, 19 Oct 2016 22:24:44 +0300 Subject: [PATCH 2/3] Added check if devDependencies of dependencies exists of not before setting the release number. --- bower-locker-lock.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower-locker-lock.js b/bower-locker-lock.js index 6c9eda7..cbdf373 100644 --- a/bower-locker-lock.js +++ b/bower-locker-lock.js @@ -74,7 +74,7 @@ function lock(isVerbose) { function setReleaseValue(bowerConfig,dep, validVersionNumber) { var name = dep.dirName; - if(bowerConfig.dependencies[name]) + if(bowerConfig.dependencies && bowerConfig.dependencies[name]) { bowerConfig.bowerLocker.originalVersions.dependencies[name] = bowerConfig.dependencies[name]; @@ -83,7 +83,7 @@ function setReleaseValue(bowerConfig,dep, validVersionNumber) { : bowerConfig.dependencies[name]; } - if(bowerConfig.devDependencies[name]) + if(bowerConfig.devDependencies && bowerConfig.devDependencies[name]) { bowerConfig.bowerLocker.originalVersions.devDependencies[name] = bowerConfig.devDependencies[name]; From 15aee1501f291be8e93a36c32dc869dace8feedf Mon Sep 17 00:00:00 2001 From: Abdulfattah Dabbas Date: Mon, 24 Oct 2016 23:04:17 +0300 Subject: [PATCH 3/3] - Adding resolutions for all existing packages. --- bower-locker-lock.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bower-locker-lock.js b/bower-locker-lock.js index cbdf373..4eb7437 100644 --- a/bower-locker-lock.js +++ b/bower-locker-lock.js @@ -48,6 +48,10 @@ function lock(isVerbose) { } }; + bowerConfig.resolutions = bowerConfig.resolutions + ? bowerConfig.resolutions + : {}; + //Iterate over dependecies found and set the version number as it found or as it was if not found. dependencies.forEach(function(dep) { // NOTE: Use dirName as the dependency name as it is more accurate than .bower.json properties @@ -80,7 +84,7 @@ function setReleaseValue(bowerConfig,dep, validVersionNumber) { bowerConfig.dependencies[name] = validVersionNumber ? dep.release - : bowerConfig.dependencies[name]; + : bowerConfig.dependencies[name]; } if(bowerConfig.devDependencies && bowerConfig.devDependencies[name]) @@ -91,6 +95,13 @@ function setReleaseValue(bowerConfig,dep, validVersionNumber) { ? dep.release : bowerConfig.devDependencies[name]; } + + if(validVersionNumber) + { + bowerConfig.resolutions[name] = bowerConfig.resolutions[name] + ? bowerConfig.resolutions[name] + : dep.release; + } } module.exports = lock;