mirror of
https://github.com/massgravel/Microsoft-Activation-Scripts.git
synced 2025-04-13 19:08:23 +00:00
Create cake
This commit is contained in:
parent
05aeb834da
commit
fe5bc756dc
98
cake
Normal file
98
cake
Normal file
@ -0,0 +1,98 @@
|
||||
CAKE.COFFEE
|
||||
¶
|
||||
cake is a simplified version of Make (Rake, Jake) for CoffeeScript. You define tasks with names and descriptions in a Cakefile, and can call them from the command line, or invoke them from other tasks.
|
||||
|
||||
Running cake with no arguments will print out a list of all the tasks in the current directory's Cakefile.
|
||||
|
||||
External dependencies.
|
||||
|
||||
|
||||
fs = require 'fs'
|
||||
path = require 'path'
|
||||
helpers = require './helpers'
|
||||
optparse = require './optparse'
|
||||
CoffeeScript = require './coffee-script'
|
||||
|
||||
existsSync = fs.existsSync or path.existsSync
|
||||
¶
|
||||
Keep track of the list of defined tasks, the accepted options, and so on.
|
||||
|
||||
|
||||
tasks = {}
|
||||
options = {}
|
||||
switches = []
|
||||
oparse = null
|
||||
¶
|
||||
Mixin the top-level Cake functions for Cakefiles to use directly.
|
||||
|
||||
|
||||
helpers.extend global,
|
||||
¶
|
||||
Define a Cake task with a short name, an optional sentence description, and the function to run as the action itself.
|
||||
|
||||
|
||||
task: (name, description, action) ->
|
||||
[action, description] = [description, action] unless action
|
||||
tasks[name] = {name, description, action}
|
||||
¶
|
||||
Define an option that the Cakefile accepts. The parsed options hash, containing all of the command-line options passed, will be made available as the first argument to the action.
|
||||
|
||||
|
||||
option: (letter, flag, description) ->
|
||||
switches.push [letter, flag, description]
|
||||
¶
|
||||
Invoke another task in the current Cakefile.
|
||||
|
||||
|
||||
invoke: (name, cb) ->
|
||||
missingTask name unless tasks[name]
|
||||
tasks[name].action options
|
||||
¶
|
||||
Run cake. Executes all of the tasks you pass, in order. Note that Node's asynchrony may cause tasks to execute in a different order than you'd expect. If no tasks are passed, print the help screen. Keep a reference to the original directory name, when running Cake tasks from subdirectories.
|
||||
|
||||
|
||||
exports.run = (cb) ->
|
||||
global.__originalDirname = fs.realpathSync '.'
|
||||
process.chdir cakefileDirectory __originalDirname
|
||||
args = process.argv[2..]
|
||||
CoffeeScript.run fs.readFileSync('Cakefile').toString(), filename: 'Cakefile'
|
||||
oparse = new optparse.OptionParser switches
|
||||
return printTasks() unless args.length
|
||||
try
|
||||
options = oparse.parse(args)
|
||||
catch e
|
||||
return fatalError "#{e}"
|
||||
invoke arg for arg in options.arguments
|
||||
¶
|
||||
Display the list of Cake tasks in a format similar to rake -T
|
||||
|
||||
|
||||
printTasks = ->
|
||||
relative = path.relative or path.resolve
|
||||
cakefilePath = path.join relative(__originalDirname, process.cwd()), 'Cakefile'
|
||||
console.log "#{cakefilePath} defines the following tasks:\n"
|
||||
for name, task of tasks
|
||||
spaces = 20 - name.length
|
||||
spaces = if spaces > 0 then Array(spaces + 1).join(' ') else ''
|
||||
desc = if task.description then "# #{task.description}" else ''
|
||||
console.log "cake #{name}#{spaces} #{desc}"
|
||||
console.log oparse.help() if switches.length
|
||||
¶
|
||||
Print an error and exit when attempting to use an invalid task/option.
|
||||
|
||||
|
||||
fatalError = (message) ->
|
||||
console.error message + '\n'
|
||||
console.log 'To see a list of all tasks/options, run "cake"'
|
||||
process.exit 1
|
||||
|
||||
missingTask = (task) -> fatalError "No such task: #{task}"
|
||||
¶
|
||||
When cake is invoked, search in the current and all parent directories to find the relevant Cakefile.
|
||||
|
||||
|
||||
cakefileDirectory = (dir) ->
|
||||
return dir if existsSync path.join dir, 'Cakefile'
|
||||
parent = path.normalize path.join dir, '..'
|
||||
return cakefileDirectory parent unless parent is dir
|
||||
throw new Error "Cakefile not found in #{process.cwd()}"
|
Loading…
Reference in New Issue
Block a user