This repository was archived by the owner on May 15, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 256
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
61c40c0
commit 56d5214
Showing
23 changed files
with
5,266 additions
and
31 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,348 @@ | ||
<!DOCTYPE html> | ||
|
||
<html> | ||
<head> | ||
<title>command.coffee</title> | ||
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> | ||
<meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> | ||
<link rel="stylesheet" media="all" href="docco.css" /> | ||
</head> | ||
<body> | ||
<div id="container"> | ||
<div id="background"></div> | ||
|
||
<ul id="jump_to"> | ||
<li> | ||
<a class="large" href="javascript:void(0);">Jump To …</a> | ||
<a class="small" href="javascript:void(0);">+</a> | ||
<div id="jump_wrapper"> | ||
<div id="jump_page"> | ||
|
||
|
||
<a class="source" href="command.html"> | ||
command.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="configuration.html"> | ||
configuration.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="daemon.html"> | ||
daemon.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="dns_server.html"> | ||
dns_server.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="http_server.html"> | ||
http_server.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="index.html"> | ||
index.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="installer.html"> | ||
installer.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="logger.html"> | ||
logger.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="rack_application.html"> | ||
rack_application.coffee | ||
</a> | ||
|
||
|
||
<a class="source" href="util.html"> | ||
util.coffee | ||
</a> | ||
|
||
</div> | ||
</li> | ||
</ul> | ||
|
||
<ul class="sections"> | ||
|
||
<li id="title"> | ||
<div class="annotation"> | ||
<h1>command.coffee</h1> | ||
</div> | ||
</li> | ||
|
||
|
||
|
||
<li id="section-1"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-1">¶</a> | ||
</div> | ||
<p>The <code>command</code> module is loaded when the <code>pow</code> binary runs. It parses | ||
any command-line arguments and determines whether to install Pow’s | ||
configuration files or start the daemon itself.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> | ||
{Daemon, Configuration, Installer} = <span class="hljs-built_in">require</span> <span class="hljs-string">".."</span> | ||
util = <span class="hljs-built_in">require</span> <span class="hljs-string">"util"</span></pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-2"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-2">¶</a> | ||
</div> | ||
<p>Set the process’s title to <code>pow</code> so it’s easier to find in <code>ps</code>, | ||
<code>top</code>, Activity Monitor, and so on.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre>process.title = <span class="hljs-string">"pow"</span></pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-3"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-3">¶</a> | ||
</div> | ||
<p>Print valid command-line arguments and exit with a non-zero exit | ||
code if invalid arguments are passed to the <code>pow</code> binary.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre><span class="hljs-function"><span class="hljs-title">usage</span> = -></span> | ||
<span class="hljs-built_in">console</span>.error <span class="hljs-string">"usage: pow [--print-config | --install-local | --install-system [--dry-run]]"</span> | ||
process.exit <span class="hljs-number">-1</span></pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-4"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-4">¶</a> | ||
</div> | ||
<p>Start by loading the user configuration from <code>~/.powconfig</code>, if it | ||
exists. The user configuration affects both the installer and the | ||
daemon.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre>Configuration.getUserConfiguration (err, configuration) -> | ||
<span class="hljs-keyword">throw</span> err <span class="hljs-keyword">if</span> err | ||
|
||
printConfig = <span class="hljs-literal">false</span> | ||
createInstaller = <span class="hljs-literal">null</span> | ||
dryRun = <span class="hljs-literal">false</span> | ||
|
||
<span class="hljs-keyword">for</span> arg <span class="hljs-keyword">in</span> process.argv.slice(<span class="hljs-number">2</span>)</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-5"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-5">¶</a> | ||
</div> | ||
<p>Set a flag if –print-config is requested.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> arg <span class="hljs-keyword">is</span> <span class="hljs-string">"--print-config"</span> | ||
printConfig = <span class="hljs-literal">true</span></pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-6"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-6">¶</a> | ||
</div> | ||
<p>Cache the factory method for creating a local or system | ||
installer if necessary.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> arg <span class="hljs-keyword">is</span> <span class="hljs-string">"--install-local"</span> | ||
createInstaller = Installer.getLocalInstaller | ||
<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> arg <span class="hljs-keyword">is</span> <span class="hljs-string">"--install-system"</span> | ||
createInstaller = Installer.getSystemInstaller</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-7"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-7">¶</a> | ||
</div> | ||
<p>Set a flag if a dry run is requested.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> arg <span class="hljs-keyword">is</span> <span class="hljs-string">"--dry-run"</span> | ||
dryRun = <span class="hljs-literal">true</span></pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-8"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-8">¶</a> | ||
</div> | ||
<p>Abort if we encounter an unknown argument.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> | ||
usage()</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-9"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-9">¶</a> | ||
</div> | ||
<p>Abort if a dry run is requested without installing anything.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> dryRun <span class="hljs-keyword">and</span> <span class="hljs-keyword">not</span> createInstaller | ||
usage()</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-10"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-10">¶</a> | ||
</div> | ||
<p>Print out the current configuration in a format that can be | ||
evaluated by a shell script (<code>eval $(pow --print-config)</code>).</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> printConfig | ||
<span class="hljs-function"> <span class="hljs-title">underscore</span> = <span class="hljs-params">(string)</span> -></span> | ||
string.replace <span class="hljs-regexp">/(.)([A-Z])/g</span>, <span class="hljs-function"><span class="hljs-params">(match, left, right)</span> -></span> | ||
left + <span class="hljs-string">"_"</span> + right.toLowerCase() | ||
<span class="hljs-function"> | ||
<span class="hljs-title">shellEscape</span> = <span class="hljs-params">(string)</span> -></span> | ||
<span class="hljs-string">"'"</span> + string.toString().replace(<span class="hljs-regexp">/'/g</span>, <span class="hljs-string">"'\\''"</span>) + <span class="hljs-string">"'"</span> <span class="hljs-comment">#'</span> | ||
|
||
<span class="hljs-keyword">for</span> key, value <span class="hljs-keyword">of</span> configuration.toJSON() | ||
util.puts <span class="hljs-string">"POW_"</span> + underscore(key).toUpperCase() + | ||
<span class="hljs-string">"="</span> + shellEscape(value)</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-11"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-11">¶</a> | ||
</div> | ||
<p>Create the installer, passing in our loaded configuration.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> createInstaller | ||
installer = createInstaller configuration</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-12"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-12">¶</a> | ||
</div> | ||
<p>If a dry run was requested, check to see whether any files need | ||
to be installed with root privileges. If yes, exit with a status | ||
of 1. If no, exit with a status of 0.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">if</span> dryRun | ||
installer.needsRootPrivileges (needsRoot) -> | ||
exitCode = <span class="hljs-keyword">if</span> needsRoot <span class="hljs-keyword">then</span> <span class="hljs-number">1</span> <span class="hljs-keyword">else</span> <span class="hljs-number">0</span> | ||
installer.getStaleFiles (files) -> | ||
util.puts file.path <span class="hljs-keyword">for</span> file <span class="hljs-keyword">in</span> files | ||
process.exit exitCode</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-13"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-13">¶</a> | ||
</div> | ||
<p>Otherwise, install all the requested files, printing the full | ||
path of each installed file to stdout.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> | ||
installer.install (err) -> | ||
<span class="hljs-keyword">throw</span> err <span class="hljs-keyword">if</span> err</pre></div></div> | ||
|
||
</li> | ||
|
||
|
||
<li id="section-14"> | ||
<div class="annotation"> | ||
|
||
<div class="pilwrap "> | ||
<a class="pilcrow" href="#section-14">¶</a> | ||
</div> | ||
<p>Start up the Pow daemon if no arguments were passed. Terminate the | ||
process if the daemon requests a restart.</p> | ||
|
||
</div> | ||
|
||
<div class="content"><div class='highlight'><pre> <span class="hljs-keyword">else</span> | ||
daemon = <span class="hljs-keyword">new</span> Daemon configuration | ||
daemon.<span class="hljs-literal">on</span> <span class="hljs-string">"restart"</span>, <span class="hljs-function">-></span> process.exit() | ||
daemon.start()</pre></div></div> | ||
|
||
</li> | ||
|
||
</ul> | ||
</div> | ||
</body> | ||
</html> |
Oops, something went wrong.