Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardi Harborow <bardi@bardiharborow.com>2017-04-19 14:59:12 +0300
committerBardi Harborow <bardi@bardiharborow.com>2017-04-20 07:31:22 +0300
commitb4ac48fdec7637c0c7c69f9d3ff9fc5d21d23676 (patch)
tree78cbec7b0790da3038c657e2943baada99819497 /build/change-version.js
parent9af6bf8f7a3e3af5a001aeeeda7dc38794df3a71 (diff)
Build system overhaul.
Diffstat (limited to 'build/change-version.js')
-rwxr-xr-xbuild/change-version.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/build/change-version.js b/build/change-version.js
new file mode 100755
index 0000000000..5ea59185a0
--- /dev/null
+++ b/build/change-version.js
@@ -0,0 +1,110 @@
+#!/usr/bin/env node
+
+'use strict'
+
+/*!
+ * Script to update version number references in the project.
+ * Copyright 2017 The Bootstrap Authors
+ * Copyright 2017 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/* global Set */
+
+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',
+ '.md',
+ '.scss',
+ '.txt',
+ '.yml'
+ ])
+ replaceRecursively('.', EXCLUDED_DIRS, INCLUDED_EXTENSIONS, oldVersion, newVersion)
+}
+
+main(process.argv.slice(2))