summaryrefslogtreecommitdiff
path: root/templates/assets/bootstrap/grunt/change-version.js
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-03-22 19:19:26 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2017-03-22 19:19:26 +0100
commitd42c8b528eb595101954f478e0024e3f079f6fbf (patch)
tree61a528cf94f1f6941f4683ae8736a4a0135c035e /templates/assets/bootstrap/grunt/change-version.js
downloadminionlivesmatter-d42c8b528eb595101954f478e0024e3f079f6fbf.tar.gz
minionlivesmatter-d42c8b528eb595101954f478e0024e3f079f6fbf.zip
first implementation of fun stats site
Diffstat (limited to 'templates/assets/bootstrap/grunt/change-version.js')
-rwxr-xr-xtemplates/assets/bootstrap/grunt/change-version.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/templates/assets/bootstrap/grunt/change-version.js b/templates/assets/bootstrap/grunt/change-version.js
new file mode 100755
index 0000000..5ea5918
--- /dev/null
+++ b/templates/assets/bootstrap/grunt/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))