mirror of
https://github.com/knex/knex.git
synced 2025-08-01 13:22:04 +00:00
113 lines
20 KiB
HTML
113 lines
20 KiB
HTML
<!DOCTYPE html><html lang="en"><head><title>lib/cli/migrate</title></head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="groc-relative-root" content="../../"><meta name="groc-document-path" content="lib/cli/migrate"><meta name="groc-project-path" content="lib/cli/migrate.js"><link rel="stylesheet" type="text/css" media="all" href="../../assets/style.css"><script type="text/javascript" src="../../assets/behavior.js"></script><body><div id="meta"><div class="file-path">lib/cli/migrate.js</div></div><div id="document"><div class="segment"><div class="code"><div class="wrapper"><span class="kd">var</span> <span class="nx">Promise</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../promise'</span><span class="p">).</span><span class="nx">Promise</span><span class="p">;</span>
|
|
<span class="kd">var</span> <span class="nx">colors</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'colors'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'path'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">_</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'lodash'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">fs</span> <span class="o">=</span> <span class="nx">Promise</span><span class="p">.</span><span class="nx">promisifyAll</span><span class="p">(</span><span class="nx">require</span><span class="p">(</span><span class="s1">'fs'</span><span class="p">));</span>
|
|
<span class="kd">var</span> <span class="nx">Knex</span><span class="p">,</span> <span class="nx">knex</span><span class="p">;</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>The CLI options for running migrations</p></div></div><div class="code"><div class="wrapper"><span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">commands</span><span class="p">)</span> <span class="p">{</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate'</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Did you mean migrate:latest?'</span><span class="p">.</span><span class="nx">cyan</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:latest'</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">latest</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="nx">spread</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">batchNo</span><span class="p">,</span> <span class="nx">log</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Already up to date'</span><span class="p">.</span><span class="nx">cyan</span><span class="p">);</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">((</span><span class="s1">'Batch '</span> <span class="o">+</span> <span class="nx">batchNo</span> <span class="o">+</span> <span class="s1">' run: '</span> <span class="o">+</span> <span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="s1">' migrations \n'</span><span class="p">).</span><span class="nx">green</span> <span class="o">+</span>
|
|
<span class="nx">log</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">'\n'</span><span class="p">).</span><span class="nx">cyan</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:latest'</span><span class="p">].</span><span class="nx">help</span> <span class="o">=</span> <span class="s1">'runs migrations that have not run yet'</span><span class="p">;</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:make'</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">name</span> <span class="o">=</span> <span class="nx">argv</span><span class="p">.</span><span class="nx">_</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">name</span> <span class="o">==</span> <span class="kc">null</span><span class="p">)</span> <span class="k">return</span> <span class="nx">err</span><span class="p">(</span><span class="s1">'The name must be defined'</span><span class="p">);</span>
|
|
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">make</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">config</span><span class="p">);</span>
|
|
<span class="p">}).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">filename</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">((</span><span class="s1">'Migration '</span> <span class="o">+</span> <span class="nx">filename</span> <span class="o">+</span> <span class="s1">' created!'</span><span class="p">).</span><span class="nx">green</span><span class="p">);</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:make'</span><span class="p">].</span><span class="nx">help</span> <span class="o">=</span> <span class="s1">'generates a new migration'</span><span class="p">;</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:rollback'</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">rollback</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="nx">spread</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">batchNo</span><span class="p">,</span> <span class="nx">log</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Already at the base migration'</span><span class="p">.</span><span class="nx">cyan</span><span class="p">);</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">((</span><span class="s1">'Batch '</span> <span class="o">+</span> <span class="nx">batchNo</span> <span class="o">+</span> <span class="s1">' rolled back: '</span> <span class="o">+</span> <span class="nx">log</span><span class="p">.</span><span class="nx">length</span> <span class="o">+</span> <span class="s1">' migrations \n'</span><span class="p">).</span><span class="nx">green</span> <span class="o">+</span>
|
|
<span class="nx">log</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">'\n'</span><span class="p">).</span><span class="nx">cyan</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:rollback'</span><span class="p">].</span><span class="nx">help</span> <span class="o">=</span> <span class="s1">'rolls back the latest migration group'</span><span class="p">;</span>
|
|
|
|
<span class="nx">commands</span><span class="p">[</span><span class="s1">'migrate:currentVersion'</span><span class="p">]</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">checkConfig</span><span class="p">(</span><span class="nx">argv</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">migrate</span><span class="p">.</span><span class="nx">currentVersion</span><span class="p">(</span><span class="nx">config</span><span class="p">);</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">version</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Current Version: '</span><span class="p">.</span><span class="nx">green</span> <span class="o">+</span> <span class="nx">version</span><span class="p">.</span><span class="nx">blue</span><span class="p">);</span>
|
|
<span class="p">})</span>
|
|
<span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">logError</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="k">finally</span><span class="p">(</span><span class="nx">exit</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="p">};</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">checkConfig</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">argv</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="kd">var</span> <span class="nx">configFile</span> <span class="o">=</span> <span class="nx">argv</span><span class="p">.</span><span class="nx">c</span> <span class="o">||</span> <span class="nx">argv</span><span class="p">.</span><span class="nx">config</span><span class="p">;</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">configFile</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">configFile</span> <span class="o">=</span> <span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="nx">process</span><span class="p">.</span><span class="nx">cwd</span><span class="p">(),</span> <span class="s1">'config.js'</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">statAsync</span><span class="p">(</span><span class="nx">configFile</span><span class="p">).</span><span class="nx">then</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="k">return</span> <span class="nx">require</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">configFile</span><span class="p">));</span>
|
|
<span class="p">}).</span><span class="nx">tap</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">config</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">config</span><span class="p">.</span><span class="nx">projectRoot</span> <span class="o">=</span> <span class="nx">config</span><span class="p">.</span><span class="nx">projectRoot</span> <span class="o">||</span> <span class="nx">process</span><span class="p">.</span><span class="nx">cwd</span><span class="p">();</span></div></div></div><div class="segment"><div class="comments"><div class="wrapper"><p>Try to use the Knex install local to the current project, so that we're
|
|
resolving to the locally installed database driver.</p></div></div><div class="code"><div class="wrapper"> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">Knex</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="k">try</span> <span class="p">{</span>
|
|
<span class="nx">Knex</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="nx">path</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">projectRoot</span><span class="p">,</span> <span class="s1">'node_modules/knex'</span><span class="p">));</span>
|
|
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">Knex</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'../../knex'</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">.</span><span class="nx">client</span> <span class="o">&&</span> <span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">.</span><span class="nx">client</span> <span class="k">instanceof</span> <span class="nx">Knex</span><span class="p">.</span><span class="nx">ClientBase</span><span class="p">))</span> <span class="p">{</span>
|
|
<span class="nx">knex</span> <span class="o">=</span> <span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">;</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">knex</span> <span class="o">=</span> <span class="nx">Knex</span><span class="p">(</span><span class="nx">config</span><span class="p">.</span><span class="nx">database</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">});</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">logError</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">err</span><span class="p">.</span><span class="nx">stack</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">err</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">msg</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">msg</span><span class="p">.</span><span class="nx">red</span><span class="p">);</span>
|
|
<span class="p">};</span>
|
|
|
|
<span class="kd">var</span> <span class="nx">exit</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">knex</span> <span class="o">&&</span> <span class="nx">knex</span><span class="p">.</span><span class="nx">client</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">knex</span><span class="p">.</span><span class="nx">client</span><span class="p">.</span><span class="nx">pool</span><span class="p">.</span><span class="nx">destroy</span><span class="p">();</span>
|
|
<span class="p">}</span>
|
|
<span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">();</span>
|
|
<span class="p">};</span></div></div></div></div></body></html> |