Skip to content

Instantly share code, notes, and snippets.

@uupaa
Created October 11, 2014 19:45
Show Gist options
  • Select an option

  • Save uupaa/685ab7175be416f959d8 to your computer and use it in GitHub Desktop.

Select an option

Save uupaa/685ab7175be416f959d8 to your computer and use it in GitHub Desktop.
webmodule misc
#!/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