diff options
| author | Peter Bacon Darwin | 2014-03-11 06:34:09 +0000 | 
|---|---|---|
| committer | Peter Bacon Darwin | 2014-03-11 06:35:19 +0000 | 
| commit | d1214af13245b8570a335a6cbc1d81ae3c366eb0 (patch) | |
| tree | 9cc1f78db3ad4f37b117579fd899c90d806bed22 | |
| parent | 11c5bb7f3de13722a84c5503129097393056061e (diff) | |
| download | angular.js-d1214af13245b8570a335a6cbc1d81ae3c366eb0.tar.bz2 | |
chore(build): refactor build version information
| -rw-r--r-- | Gruntfile.js | 5 | ||||
| -rw-r--r-- | lib/grunt/utils.js | 177 | 
2 files changed, 7 insertions, 175 deletions
| diff --git a/Gruntfile.js b/Gruntfile.js index 01dbb952..5ec05f70 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,5 +1,6 @@  var files = require('./angularFiles').files;  var util = require('./lib/grunt/utils.js'); +var versionInfo = require('./lib/versions/version-info');  var path = require('path');  module.exports = function(grunt) { @@ -8,10 +9,10 @@ module.exports = function(grunt) {    grunt.loadTasks('lib/grunt'); -  var NG_VERSION = util.getVersion(); +  var NG_VERSION = versionInfo.currentVersion; +  NG_VERSION.cdn = versionInfo.currentPackage.cdnVersion;    var dist = 'angular-'+ NG_VERSION.full; -    //global beforeEach    util.init(); diff --git a/lib/grunt/utils.js b/lib/grunt/utils.js index a736033d..59b78381 100644 --- a/lib/grunt/utils.js +++ b/lib/grunt/utils.js @@ -4,8 +4,10 @@ var shell = require('shelljs');  var grunt = require('grunt');  var spawn = require('child_process').spawn;  var semver = require('semver'); +var versionInfo = require('../versions/version-info'); +  var _ = require('lodash'); -var version, pkg; +  var CSP_CSS_HEADER = '/* Include this file in your html if you are using the CSP mode. */\n\n';  var PORT_MIN = 8000; @@ -23,23 +25,6 @@ var getRandomPorts = function() {    ];  }; -var getPackage = function() { -  if ( !pkg ) { - -    // Search up the folder hierarchy for the first package.json -    var packageFolder = path.resolve('.'); -    while ( !fs.existsSync(path.join(packageFolder, 'package.json')) ) { -      var parent = path.dirname(packageFolder); -      if ( parent === packageFolder) { break; } -      packageFolder = parent; -    } -    pkg = JSON.parse(fs.readFileSync(path.join(packageFolder,'package.json'), 'UTF-8')); - -  } - -  return pkg; -}; -  module.exports = { @@ -50,160 +35,6 @@ module.exports = {    }, -  getGitRepoInfo: function() { -    var GITURL_REGEX = /^https:\/\/github.com\/([^\/]+)\/(.+).git$/; -    var match = GITURL_REGEX.exec(getPackage().repository.url); -    var git = { -      owner: match[1], -      repo: match[2] -    }; -    return git; -  }, - - -  getVersion: function(){ -    if (version) return version; - -    try { - -      var gitTag = getTagOfCurrentCommit(); -      var semVerVersion, codeName, fullVersion; -      if (gitTag) { -        // tagged release -        fullVersion = semVerVersion = semver.valid(gitTag); -        codeName = getTaggedReleaseCodeName(gitTag); -      } else { -        // snapshot release -        semVerVersion = getSnapshotVersion(); -        fullVersion = semVerVersion + '-' + getSnapshotSuffix(); -        codeName = 'snapshot'; -      } - -      var versionParts = semVerVersion.match(/(\d+)\.(\d+)\.(\d+)/); - -      version = { -        full: fullVersion, -        major: versionParts[1], -        minor: versionParts[2], -        dot: versionParts[3], -        codename: codeName, -        cdn: getPackage().cdnVersion -      }; - -      // Stable versions have an even minor version -      version.isStable = version.minor%2 === 0; - -      return version; - -    } catch (e) { -      grunt.fail.warn(e); -    } - -    function getTagOfCurrentCommit() { -      var gitTagResult = shell.exec('git describe --exact-match', {silent:true}); -      var gitTagOutput = gitTagResult.output.trim(); -      var branchVersionPattern = new RegExp(getPackage().branchVersion.replace('.', '\\.').replace('*', '\\d+')); -      if (gitTagResult.code === 0 && gitTagOutput.match(branchVersionPattern)) { -        return gitTagOutput; -      } else { -        return null; -      } -    } - -    function getTaggedReleaseCodeName(tagName) { -      var tagMessage = shell.exec('git cat-file -p '+ tagName +' | grep "codename"', {silent:true}).output; -      var codeName = tagMessage && tagMessage.match(/codename\((.*)\)/)[1]; -      if (!codeName) { -        throw new Error("Could not extract release code name. The message of tag "+tagName+ -          " must match '*codename(some release name)*'"); -      } -      return codeName; -    } - -    function getSnapshotVersion() { -      var oldTags = shell.exec('git tag -l v'+getPackage().branchVersion, {silent:true}).output.trim().split('\n'); -      // ignore non semver versions. -      oldTags = oldTags.filter(function(version) { -        return version && semver.valid(version); -      }); -      if (oldTags.length) { -        oldTags.sort(semver.compare); -        semVerVersion = oldTags[oldTags.length-1]; -        if (semVerVersion.indexOf('-') !== -1) { -          semVerVersion = semver.inc(semVerVersion, 'prerelease'); -        } else { -          semVerVersion = semver.inc(semVerVersion, 'patch'); -        } -      } else { -        semVerVersion = semver.valid(getPackage().branchVersion.replace(/\*/g, '0')); -      } -      return semVerVersion; -    } - -    function getSnapshotSuffix() { -      var jenkinsBuild = process.env.TRAVIS_BUILD_NUMBER || process.env.BUILD_NUMBER || 'local'; -      var hash = shell.exec('git rev-parse --short HEAD', {silent: true}).output.replace('\n', ''); -      return 'build.'+jenkinsBuild+'+sha.'+hash; -    } -  }, - -  getPreviousVersions: function() { -    var VERSION_REGEX = /([1-9]\d*)\.(\d+)\.(\d+)(?:-?rc\.?(\d+)|-(snapshot))?/; - -    // Pad out a number with zeros at the front to make it `digits` characters long -    function pad(num, digits) { -      var zeros = Array(digits+1).join('0'); -      return (zeros+num).slice(-digits); -    } - -    function padVersion(version) { -      // We pad out the version numbers with 0s so they sort nicely -      // - Non-Release Candidates get 9999 for their release candidate section to make them appear earlier -      // - Snapshots get 9 added to the front to move them to the top of the list -      var maxLength = 4; -      var padded = (version.snapshot ? '9' : '0') + pad(version.major, maxLength) + -                    pad(version.minor, maxLength) + pad(version.dot, maxLength) + -                    pad(version.rc || 9999, maxLength); -      return padded; -    } - -    function getVersionFromTag(tag) { -      var match = VERSION_REGEX.exec(tag); -      if ( match ) { -        var version = { -          tag: tag, -          major: match[1], minor: match[2], dot: match[3], rc: match[4], -          snapshot: !!match[5] && getSnapshotSuffix() -        }; - -        if(version.snapshot) { -          version.full = version.major + '.' + version.minor + '.x (edge)'; -        } else { -          version.full = version.major + '.' + version.minor + '.' + version.dot + -                        (version.rc ? '-rc.' + version.rc : ''); -        } - -        // Stable versions have an even minor version and are not a release candidate -        version.isStable = !(version.minor%2 || version.rc); - -        // Versions before 1.0.2 had a different docs folder name -        version.docsUrl = 'http://code.angularjs.org/' + version.full + '/docs'; -        if ( version.major < 1 || (version.major === 1 && version.minor === 0 && version.dot < 2 ) ) { -          version.docsUrl += '-' + version.full; -        } - -        return version; -      } -    } - -    var tags = shell.exec('git tag', {silent: true}).output.split(/\s*\n\s*/); -    return _(tags) -      .map(getVersionFromTag) -      .filter()  // getVersion can map to undefined - this clears those out -      .sortBy(padVersion) -      .value(); -  }, -    startKarma: function(config, singleRun, done){      var browsers = grunt.option('browsers');      var reporters = grunt.option('reporters'); @@ -374,7 +205,7 @@ module.exports = {      var mapFile = minFile + '.map';      var mapFileName = mapFile.match(/[^\/]+$/)[0];      var errorFileName = file.replace(/\.js$/, '-errors.json'); -    var versionNumber = this.getVersion().full; +    var versionNumber = grunt.config('NG_VERSION').full;      shell.exec(          'java ' +              this.java32flags() + ' ' + | 
