Created
October 11, 2014 19:45
-
-
Save uupaa/685ab7175be416f959d8 to your computer and use it in GitHub Desktop.
webmodule misc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env node | |
| (function(global) { | |
| var _USAGE = _multiline(function() {/* | |
| Usage: | |
| misc [--help] | |
| [--verbose] | |
| [--travis] | |
| [--jshint] | |
| [--gitignore] | |
| [--npmignore] | |
| [--patch] | |
| [--dsstore] | |
| [--patchver] | |
| [--all] | |
| See: | |
| https://github.com/uupaa/WebModule/wiki/WebModule | |
| */}); | |
| var _CONSOLE_COLOR = { | |
| RED: "\u001b[31m", | |
| YELLOW: "\u001b[33m", | |
| GREEN: "\u001b[32m", | |
| CLEAR: "\u001b[0m" | |
| }; | |
| var fs = require("fs"); | |
| var argv = process.argv.slice(2); | |
| var path = require("path"); | |
| var options = _parseCommandLineOptions({ | |
| help: false, // Boolean: true is show help. | |
| verbose: false, // Boolean: true is verbose mode. | |
| travis: false, // Boolean: true is overwrite .travise.yml file | |
| jshint: false, // Boolean: true is overwrite .jshintrc file | |
| gitignore: false, // Boolean: true is overwrite .gitignore file | |
| npmignore: false, // Boolean: true is overwrite .npmignore file | |
| dsstore: false, // Boolean: true is remove .DS_Store file | |
| patchver: false, // Boolean: patch version +1 for package.json | |
| }); | |
| var baseDir = path.resolve(__dirname, ".."); | |
| var dirs = fs.readdirSync(baseDir); | |
| var dirList = filterDirectoryList(dirs, ".travis.yml"); | |
| if (options.help) { | |
| console.log(_CONSOLE_COLOR.YELLOW + _USAGE + _CONSOLE_COLOR.CLEAR); | |
| return; | |
| } | |
| if (options.verbose) { | |
| console.log(dirList); | |
| } | |
| if (options.travis) { | |
| overwriteFile(dirList, "./.travis.yml", ".travis.yml"); | |
| } | |
| if (options.jshint) { | |
| overwriteFile(dirList, "./.jshintrc", ".jshintrc"); | |
| } | |
| if (options.gitignore) { | |
| overwriteFile(dirList, "./.gitignore", ".gitignore"); | |
| } | |
| if (options.npmignore) { | |
| overwriteFile(dirList, "./.npmignore", ".npmignore"); | |
| } | |
| if (options.dsstore) { | |
| remove(dirList, ".DS_Store"); | |
| } | |
| if (options.patchver) { | |
| incrementalPatchVersion(dirList); | |
| } | |
| function overwriteFile(dirs, // @arg DirectoryNameArray: ["Proxy.js", "NodeProxy.js", ...] | |
| sourceFile, // @arg PathString: | |
| targetFileName) { // @arg String: "file.ext" | |
| var sourceText = fs.readFileSync(sourceFile, "UTF-8"); | |
| dirs.forEach(function(repositoryName) { | |
| if (isDir(baseDir + "/" + repositoryName)) { | |
| if (isFile(baseDir + "/" + repositoryName + "/" + targetFileName)) { | |
| console.log("overwirte: " + baseDir + "/" + repositoryName + "/" + targetFileName); | |
| fs.writeFileSync(baseDir + "/" + repositoryName + "/" + targetFileName, | |
| sourceText); | |
| } | |
| } | |
| }); | |
| } | |
| function remove(dirs, // @arg DirectoryNameArray: ["Proxy.js", "NodeProxy.js", ...] | |
| targetFileName) { // @arg String: "file.ext" | |
| dirs.forEach(function(repositoryName) { | |
| if (isDir(baseDir + "/" + repositoryName)) { | |
| if (isFile(baseDir + "/" + repositoryName + "/" + targetFileName)) { | |
| console.log("rm: " + baseDir + "/" + repositoryName + "/" + targetFileName); | |
| fs.unlinkSync(baseDir + "/" + repositoryName + "/" + targetFileName); | |
| } | |
| } | |
| }); | |
| } | |
| function filterDirectoryList(dirs, findFileName) { | |
| return dirs.reduce(function(result, dir) { | |
| if (options.verbose) { | |
| console.log("DIR = " + baseDir + "/" + dir); | |
| } | |
| if (dir === "WebModule") { | |
| ; | |
| } else { | |
| if (isDir(baseDir + "/" + dir)) { | |
| if (isFile(baseDir + "/" + dir + "/" + findFileName)) { | |
| result.push(dir); | |
| } | |
| } | |
| } | |
| return result; | |
| }, []); | |
| } | |
| function isDir(path) { | |
| if (!fs.existsSync(path)) { | |
| return false; | |
| } | |
| var stat = fs.statSync(path); | |
| return stat && stat.isDirectory(); | |
| } | |
| function isFile(path) { | |
| if (!fs.existsSync(path)) { | |
| return false; | |
| } | |
| var stat = fs.statSync(path); | |
| return stat && stat.isFile(); | |
| } | |
| function incrementalPatchVersion(dirList) { | |
| var targetFileName = "package.json"; | |
| dirs.forEach(function(repositoryName) { | |
| if (isDir(baseDir + "/" + repositoryName)) { | |
| if (isFile(baseDir + "/" + repositoryName + "/" + targetFileName)) { | |
| var file = baseDir + "/" + repositoryName + "/" + targetFileName; | |
| console.log("patch +1: " + file); | |
| var packagejson = fs.readFileSync(file, "UTF-8"); | |
| packagejson = packagejson.replace(/"version":(\s+)"(\d+)\.(\d+)\.(\d+)"/, function(_, space, major, minor, patch) { | |
| return '"version":' + space + '"' + major + "." + minor + "." + (parseInt(patch, 10) + 1) + '"'; | |
| }); | |
| fs.writeFileSync(file, packagejson); | |
| } | |
| } | |
| }); | |
| } | |
| function _parseCommandLineOptions(options) { // @arg Object: | |
| // @ret Object: | |
| for (var i = 0, iz = argv.length; i < iz; ++i) { | |
| switch (argv[i]) { | |
| case "-h": | |
| case "--help": options.help = true; break; | |
| case "-v": | |
| case "--verbose": options.verbose = true; break; | |
| case "--travis": options.travis = true; break; | |
| case "--jshint": options.jshint = true; break; | |
| case "--gitignore": options.gitignore = true; break; | |
| case "--npmignore": options.npmignore = true; break; | |
| case "--dsstore": options.dsstore = true; break; | |
| case "--patchver": options.patchver = true; break; | |
| case "--all": options.travis = true; | |
| options.jshint = true; | |
| options.gitignore = true; | |
| options.npmignore = true; | |
| options.dsstore = true; | |
| options.patchver = true; | |
| break; | |
| default: | |
| throw new Error("Unknown argument: " + argv[i]); | |
| } | |
| } | |
| return options; | |
| } | |
| function _multiline(fn) { // @arg Function: | |
| // @ret String: | |
| return (fn + "").split("\n").slice(1, -1).join("\n"); | |
| } | |
| })((this || 0).self || global); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment