| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | (function() {  var NpmAdapter, async, createSite, fileExists, fileExistsSync, fs, getStorageDir, loadTemplates, logger, ncp, npm, options, path, ref, ref1, templates, usage;  async = require('async');  fs = require('fs');  path = require('path');  npm = require('npm');  ncp = require('ncp').ncp;  ref = require('./common'), NpmAdapter = ref.NpmAdapter, getStorageDir = ref.getStorageDir;  ref1 = require('./../core/utils'), fileExists = ref1.fileExists, fileExistsSync = ref1.fileExistsSync;  logger = require('./../core/logger').logger;  templates = {};  loadTemplates = function(directory) {    if (!fileExistsSync(directory)) {      return;    }    return fs.readdirSync(directory).map(function(filename) {      return path.join(directory, filename);    }).filter(function(filename) {      return fs.statSync(filename).isDirectory();    }).forEach(function(filename) {      return templates[path.basename(filename)] = filename;    });  };  loadTemplates(path.join(__dirname, '../../examples/'));  loadTemplates(path.join(getStorageDir(), 'templates/'));  usage = "\nusage: wintersmith new [options] <path>\n\ncreates a skeleton site in <path>\n\noptions:\n\n  -f, --force             overwrite existing files\n  -T, --template <name>   template to create new site from (defaults to 'blog')\n\n  available templates are: " + (Object.keys(templates).join(', ')) + "\n\nexample:\n\n  create a new site in your home directory\n  $ wintersmith new ~/my-blog\n";  options = {    string: ['template'],    boolean: ['force'],    alias: {      force: 'f',      template: 'T'    },    "default": {      template: 'blog'    }  };  createSite = function(argv) {    /* copy example directory to *location* */    var copyTemplate, from, installDeps, location, to, validateDestination;    location = argv._[3];    if ((location == null) || !location.length) {      logger.error('you must specify a location');      return;    }    if (templates[argv.template] == null) {      logger.error("unknown template '" + argv.template + "'");      return;    }    from = templates[argv.template];    to = path.resolve(location);    logger.info("initializing new wintersmith site in " + to + " using template " + argv.template);    validateDestination = function(callback) {      logger.verbose("checking validity of " + to);      return fileExists(to, function(exists) {        if (exists && !argv.force) {          return callback(new Error(to + " already exists. Add --force to overwrite"));        } else {          return callback();        }      });    };    copyTemplate = function(callback) {      logger.verbose("recursive copy " + from + " -> " + to);      return ncp(from, to, {}, callback);    };    installDeps = function(callback) {      var packagePath;      packagePath = path.join(to, 'package.json');      return fileExists(packagePath, function(exists) {        var conf;        if (exists) {          logger.verbose("installing template dependencies");          process.chdir(to);          conf = {            logstream: new NpmAdapter(logger)          };          return npm.load(conf, function(error) {            if (error != null) {              return callback(error);            }            return npm.install(callback);          });        } else {          return callback();        }      });    };    return async.series([validateDestination, copyTemplate, installDeps], function(error) {      if (error) {        logger.error(error.message, error);        return process.exit(1);      } else {        return logger.info('done!');      }    });  };  module.exports = createSite;  module.exports.usage = usage;  module.exports.options = options;}).call(this);
 |