| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- async = require 'async'
- fs = require 'fs'
- path = require 'path'
- npm = require 'npm'
- {ncp} = require 'ncp'
- {NpmAdapter, getStorageDir} = require './common'
- {fileExists, fileExistsSync} = require './../core/utils'
- {logger} = require './../core/logger'
- templates = {}
- loadTemplates = (directory) ->
- return unless fileExistsSync directory
- fs.readdirSync(directory)
- .map((filename) -> path.join(directory, filename))
- .filter((filename) -> fs.statSync(filename).isDirectory())
- .forEach((filename) -> templates[path.basename(filename)] = filename)
- loadTemplates path.join __dirname, '../../examples/'
- loadTemplates path.join getStorageDir(), 'templates/'
- usage = """
- usage: wintersmith new [options] <path>
- creates a skeleton site in <path>
- options:
- -f, --force overwrite existing files
- -T, --template <name> template to create new site from (defaults to 'blog')
- available templates are: #{ Object.keys(templates).join(', ') }
- example:
- create a new site in your home directory
- $ wintersmith new ~/my-blog
- """
- options =
- string: ['template']
- boolean: ['force']
- alias:
- force: 'f'
- template: 'T'
- default:
- template: 'blog'
- createSite = (argv) ->
- ### copy example directory to *location* ###
- location = argv._[3]
- if !location? or !location.length
- logger.error 'you must specify a location'
- return
- if not templates[argv.template]?
- 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 = (callback) ->
- logger.verbose "checking validity of #{ to }"
- fileExists to, (exists) ->
- if exists and !argv.force
- callback new Error "#{ to } already exists. Add --force to overwrite"
- else
- callback()
- copyTemplate = (callback) ->
- logger.verbose "recursive copy #{ from } -> #{ to }"
- ncp from, to, {}, callback
- installDeps = (callback) ->
- packagePath = path.join to, 'package.json'
- fileExists packagePath, (exists) ->
- if exists
- logger.verbose "installing template dependencies"
- process.chdir to
- conf = {logstream: new NpmAdapter(logger)}
- npm.load conf, (error) ->
- return callback error if error?
- npm.install callback
- else
- callback()
- async.series [validateDestination, copyTemplate, installDeps], (error) ->
- if error
- logger.error error.message, error
- process.exit 1
- else
- logger.info 'done!'
- module.exports = createSite
- module.exports.usage = usage
- module.exports.options = options
|