Blame view
dist/bower_components/bootstrap/grunt/change-version.js
2.84 KB
ffc06a7f8
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
#!/usr/bin/env node 'use strict'; /* globals Set */ /*! * Script to update version number references in the project. * Copyright 2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ var fs = require('fs'); var path = require('path'); var sh = require('shelljs'); sh.config.fatal = true; var sed = sh.sed; // Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37 RegExp.quote = function (string) { return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); }; RegExp.quoteReplacement = function (string) { return string.replace(/[$]/g, '$$'); }; var DRY_RUN = false; function walkAsync(directory, excludedDirectories, fileCallback, errback) { if (excludedDirectories.has(path.parse(directory).base)) { return; } fs.readdir(directory, function (err, names) { if (err) { errback(err); return; } names.forEach(function (name) { var filepath = path.join(directory, name); fs.lstat(filepath, function (err, stats) { if (err) { process.nextTick(errback, err); return; } if (stats.isSymbolicLink()) { return; } else if (stats.isDirectory()) { process.nextTick(walkAsync, filepath, excludedDirectories, fileCallback, errback); } else if (stats.isFile()) { process.nextTick(fileCallback, filepath); } }); }); }); } function replaceRecursively(directory, excludedDirectories, allowedExtensions, original, replacement) { original = new RegExp(RegExp.quote(original), 'g'); replacement = RegExp.quoteReplacement(replacement); var updateFile = !DRY_RUN ? function (filepath) { if (allowedExtensions.has(path.parse(filepath).ext)) { sed('-i', original, replacement, filepath); } } : function (filepath) { if (allowedExtensions.has(path.parse(filepath).ext)) { console.log('FILE: ' + filepath); } else { console.log('EXCLUDED:' + filepath); } }; walkAsync(directory, excludedDirectories, updateFile, function (err) { console.error('ERROR while traversing directory!:'); console.error(err); process.exit(1); }); } function main(args) { if (args.length !== 2) { console.error('USAGE: change-version old_version new_version'); console.error('Got arguments:', args); process.exit(1); } var oldVersion = args[0]; var newVersion = args[1]; var EXCLUDED_DIRS = new Set([ '.git', 'node_modules', 'vendor' ]); var INCLUDED_EXTENSIONS = new Set([ // This extension whitelist is how we avoid modifying binary files '', '.css', '.html', '.js', '.json', '.less', '.md', '.nuspec', '.ps1', '.scss', '.txt', '.yml' ]); replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion); } main(process.argv.slice(2)); |