aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/twbs/bootstrap/build/change-version.js
diff options
context:
space:
mode:
authorMax Kostikov <max@kostikov.co>2018-09-28 15:46:14 +0200
committerMax Kostikov <max@kostikov.co>2018-09-28 15:46:14 +0200
commit4a904fa3a8af1c101ede76657249fb7eb47faf60 (patch)
tree544509813fb68579ef2b556ce879a971d183269a /vendor/twbs/bootstrap/build/change-version.js
parentf5f6ec3d71acb3e0488386819d5060e59331ec23 (diff)
parentc13d7e29ef9676b0f0e4ae23aa52e203f4ad8895 (diff)
downloadvolse-hubzilla-4a904fa3a8af1c101ede76657249fb7eb47faf60.tar.gz
volse-hubzilla-4a904fa3a8af1c101ede76657249fb7eb47faf60.tar.bz2
volse-hubzilla-4a904fa3a8af1c101ede76657249fb7eb47faf60.zip
Merge branch 'patch-29' into 'dev'
Patch 29 See merge request Kostikov/core!3
Diffstat (limited to 'vendor/twbs/bootstrap/build/change-version.js')
-rw-r--r--vendor/twbs/bootstrap/build/change-version.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/vendor/twbs/bootstrap/build/change-version.js b/vendor/twbs/bootstrap/build/change-version.js
new file mode 100644
index 000000000..7102dc083
--- /dev/null
+++ b/vendor/twbs/bootstrap/build/change-version.js
@@ -0,0 +1,104 @@
+#!/usr/bin/env node
+
+/*!
+ * Script to update version number references in the project.
+ * Copyright 2017-2018 The Bootstrap Authors
+ * Copyright 2017-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+'use strict'
+
+const fs = require('fs')
+const path = require('path')
+const sh = require('shelljs')
+
+sh.config.fatal = true
+
+// Blame TC39... https://github.com/benjamingr/RegExp.escape/issues/37
+function regExpQuote(string) {
+ return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&')
+}
+
+function regExpQuoteReplacement(string) {
+ return string.replace(/[$]/g, '$$')
+}
+
+const DRY_RUN = false
+
+function walkAsync(directory, excludedDirectories, fileCallback, errback) {
+ if (excludedDirectories.has(path.parse(directory).base)) {
+ return
+ }
+ fs.readdir(directory, (err, names) => {
+ if (err) {
+ errback(err)
+ return
+ }
+ names.forEach((name) => {
+ const filepath = path.join(directory, name)
+ fs.lstat(filepath, (err, stats) => {
+ if (err) {
+ process.nextTick(errback, err)
+ return
+ }
+ 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(regExpQuote(original), 'g')
+ replacement = regExpQuoteReplacement(replacement)
+ const updateFile = DRY_RUN ? (filepath) => {
+ if (allowedExtensions.has(path.parse(filepath).ext)) {
+ console.log(`FILE: ${filepath}`)
+ } else {
+ console.log(`EXCLUDED:${filepath}`)
+ }
+ } : (filepath) => {
+ if (allowedExtensions.has(path.parse(filepath).ext)) {
+ sh.sed('-i', original, replacement, filepath)
+ }
+ }
+ walkAsync(directory, excludedDirectories, updateFile, (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)
+ }
+ const oldVersion = args[0]
+ const newVersion = args[1]
+ const EXCLUDED_DIRS = new Set([
+ '.git',
+ 'node_modules',
+ 'vendor'
+ ])
+ const 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))