<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> Module: P4Util — Documentation by YARD 0.8.7.6 </title> <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" /> <script type="text/javascript" charset="utf-8"> hasFrames = window.top.frames.main ? true : false; relpath = ''; framesUrl = "frames.html#!P4Util.html"; </script> <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script> <script type="text/javascript" charset="utf-8" src="js/app.js"></script> </head> <body> <div id="header"> <div id="menu"> <a href="_index.html">Index (P)</a> » <span class="title">P4Util</span> <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div> </div> <div id="search"> <a class="full_list_link" id="class_list_link" href="class_list.html"> Class List </a> <a class="full_list_link" id="method_list_link" href="method_list.html"> Method List </a> <a class="full_list_link" id="file_list_link" href="file_list.html"> File List </a> </div> <div class="clear"></div> </div> <iframe id="search_frame"></iframe> <div id="content"><h1>Module: P4Util </h1> <dl class="box"> <dt class="r1 last">Defined in:</dt> <dd class="r1 last">lib/p4_util.rb</dd> </dl> <div class="clear"></div> <h2>Constant Summary</h2> <dl class="constants"> <dt id="PROPERTIES-constant" class="">PROPERTIES = </dt> <dd><pre class="code"><span class='lbracket'>[</span> <span class='symbol'>:password</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:user</span><span class='comma'>,</span> <span class='symbol'>:api_level</span><span class='comma'>,</span> <span class='symbol'>:charset</span><span class='comma'>,</span> <span class='symbol'>:client</span><span class='comma'>,</span> <span class='symbol'>:host</span><span class='comma'>,</span> <span class='symbol'>:handler</span><span class='comma'>,</span> <span class='symbol'>:maxlocktime</span><span class='comma'>,</span> <span class='symbol'>:maxresults</span><span class='comma'>,</span> <span class='symbol'>:maxscanrows</span><span class='comma'>,</span> <span class='symbol'>:prog</span><span class='comma'>,</span> <span class='symbol'>:ticketfile</span> <span class='rbracket'>]</span></pre></dd> </dl> <h2> Class Method Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small> </h2> <ul class="summary"> <li class="public "> <span class="summary_signature"> <a href="#create_p4-class_method" title="create_p4 (class method)">+ (Object) <strong>create_p4</strong>(options) </a> </span> <span class="summary_desc"><div class='inline'></div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#create_temp_client-class_method" title="create_temp_client (class method)">+ (Object) <strong>create_temp_client</strong>(p4) </a> </span> <span class="summary_desc"><div class='inline'></div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#create_temp_stream_client_duplicate-class_method" title="create_temp_stream_client_duplicate (class method)">+ (Object) <strong>create_temp_stream_client_duplicate</strong>(p4, src_client) </a> </span> <span class="summary_desc"><div class='inline'> <p>Generates a stream client based on an existing stream.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#init_p4-class_method" title="init_p4 (class method)">+ (Object) <strong>init_p4</strong>(p4) </a> </span> <span class="summary_desc"><div class='inline'> <p>Before we do anything, clear out any environment variables that may have leaked in from your environment.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#make_p4_error-class_method" title="make_p4_error (class method)">+ (Object) <strong>make_p4_error</strong>(p4) </a> </span> <span class="summary_desc"><div class='inline'></div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#open-class_method" title="open (class method)">+ (Object) <strong>open</strong>(options = {}) </a> </span> <span class="summary_desc"><div class='inline'> <p>Creates your p4 connection using some common forms.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#open_from_env-class_method" title="open_from_env (class method)">+ (Object) <strong>open_from_env</strong>(env) </a> </span> <span class="summary_desc"><div class='inline'> <p>Create a p4 connection using our Rack environment setup.</p> </div></span> </li> </ul> <div id="class_method_details" class="method_details_list"> <h2>Class Method Details</h2> <div class="method_details first"> <h3 class="signature first" id="create_p4-class_method"> + (<tt>Object</tt>) <strong>create_p4</strong>(options) </h3><table class="source_code"> <tr> <td> <pre class="lines"> 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 104</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_create_p4'>create_p4</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='id identifier rubyid_p4'>p4</span> <span class='op'>=</span> <span class='const'>P4</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='id identifier rubyid_init_p4'>init_p4</span><span class='lparen'>(</span><span class='id identifier rubyid_p4'>p4</span><span class='rparen'>)</span> <span class='const'>PROPERTIES</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span><span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='op'>|</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>=</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='kw'>end</span> <span class='comment'># From the WTF department, if you think you don't want a charset set, </span> <span class='comment'># make damn sure P4Ruby isn't going to get confused. </span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_charset'>charset</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_charset'>charset</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>none</span><span class='tstring_end'>'</span></span> <span class='comment'># Make P4Ruby only raise exceptions if there are errors. Warnings </span> <span class='comment'># (such as 'no such file(s)' don't get the same treatment. </span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_exception_level'>exception_level</span> <span class='op'>=</span> <span class='const'>P4</span><span class='op'>::</span><span class='const'>RAISE_ERRORS</span> <span class='id identifier rubyid_p4'>p4</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="create_temp_client-class_method"> + (<tt>Object</tt>) <strong>create_temp_client</strong>(p4) </h3><table class="source_code"> <tr> <td> <pre class="lines"> 165 166 167 168 169 170 171 172</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 165</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_create_temp_client'>create_temp_client</span><span class='lparen'>(</span><span class='id identifier rubyid_p4'>p4</span><span class='rparen'>)</span> <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='int'>0</span><span class='op'>...</span><span class='int'>8</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='lparen'>(</span><span class='int'>65</span> <span class='op'>+</span> <span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>26</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_chr'>chr</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span> <span class='id identifier rubyid_p4_root'>p4_root</span> <span class='op'>=</span> <span class='id identifier rubyid_init_temp_workspace_dir'>init_temp_workspace_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='id identifier rubyid_init_temp_client'>init_temp_client</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_p4'>p4</span><span class='comma'>,</span> <span class='id identifier rubyid_p4_root'>p4_root</span><span class='rparen'>)</span> <span class='id identifier rubyid_p4_root'>p4_root</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="create_temp_stream_client_duplicate-class_method"> + (<tt>Object</tt>) <strong>create_temp_stream_client_duplicate</strong>(p4, src_client) </h3><div class="docstring"> <div class="discussion"> <p>Generates a stream client based on an existing stream</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 175</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_create_temp_stream_client_duplicate'>create_temp_stream_client_duplicate</span><span class='lparen'>(</span><span class='id identifier rubyid_p4'>p4</span><span class='comma'>,</span> <span class='id identifier rubyid_src_client'>src_client</span><span class='rparen'>)</span> <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='int'>0</span><span class='op'>...</span><span class='int'>8</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='lparen'>(</span><span class='int'>65</span> <span class='op'>+</span> <span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>26</span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_chr'>chr</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span> <span class='id identifier rubyid_p4_root'>p4_root</span> <span class='op'>=</span> <span class='id identifier rubyid_init_temp_workspace_dir'>init_temp_workspace_dir</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span> <span class='id identifier rubyid_spec'>spec</span> <span class='op'>=</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_fetch_client'>fetch_client</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__root'>_root</span> <span class='op'>=</span> <span class='id identifier rubyid_p4_root'>p4_root</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__client'>_client</span> <span class='op'>=</span> <span class='id identifier rubyid_name'>name</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__stream'>_stream</span> <span class='op'>=</span> <span class='id identifier rubyid_src_client'>src_client</span><span class='period'>.</span><span class='id identifier rubyid__stream'>_stream</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__view'>_view</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_save_client'>save_client</span><span class='lparen'>(</span><span class='id identifier rubyid_spec'>spec</span><span class='rparen'>)</span> <span class='id identifier rubyid_p4_root'>p4_root</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="init_p4-class_method"> + (<tt>Object</tt>) <strong>init_p4</strong>(p4) </h3><div class="docstring"> <div class="discussion"> <p>Before we do anything, clear out any environment variables that may have leaked in from your environment</p> <p>Some of our HTTP APIs (e.g, Git Fusion) <em>do</em> utilize environment setups for a system user, that may be installed alongside this API. We want this system to always explicitly state which configuration to use. (So, it's not just a concern of our development environments.)</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 131</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_init_p4'>init_p4</span><span class='lparen'>(</span><span class='id identifier rubyid_p4'>p4</span><span class='rparen'>)</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>invalid</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_host'>host</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_password'>password</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_end'>'</span></span> <span class='comment'># Disable the use of ticket files. </span> <span class='comment'># It might happen that an admin may decide to use the p4 command line </span> <span class='comment'># client to log in using the same system user we're running web services </span> <span class='comment'># as. If we happen to point to that file (say, via defaults) this will </span> <span class='comment'># use the valid ticket in the file instead of what has been specified </span> <span class='comment'># via headers. </span> <span class='kw'>if</span> <span class='const'>RbConfig</span><span class='op'>::</span><span class='const'>CONFIG</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>host_os</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>mswin|mingw|cygwin</span><span class='regexp_end'>/</span></span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_ticket_file'>ticket_file</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>nul</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_enviro_file'>enviro_file</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>nul</span><span class='tstring_end'>'</span></span> <span class='kw'>else</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_ticket_file'>ticket_file</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>/dev/null</span><span class='tstring_end'>'</span></span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_enviro_file'>enviro_file</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>/dev/null</span><span class='tstring_end'>'</span></span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>P4TRUST</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>P4TRUST</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'>HWSSettings</span><span class='period'>.</span><span class='id identifier rubyid_system'>system</span><span class='period'>.</span><span class='const'>P4TRUST</span> <span class='kw'>end</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="make_p4_error-class_method"> + (<tt>Object</tt>) <strong>make_p4_error</strong>(p4) </h3><table class="source_code"> <tr> <td> <pre class="lines"> 156 157 158 159 160 161 162 163</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 156</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_make_p4_error'>make_p4_error</span><span class='lparen'>(</span><span class='id identifier rubyid_p4'>p4</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_messages'>messages</span> <span class='op'>&&</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_messages'>messages</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='id identifier rubyid_m'>m</span> <span class='op'>=</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_messages'>messages</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='const'>P4Error</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_msgid'>msgid</span><span class='comma'>,</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_severity'>severity</span><span class='comma'>,</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span> <span class='kw'>else</span> <span class='const'>P4Error</span><span class='period'>.</span><span class='id identifier rubyid_default_error'>default_error</span><span class='lparen'>(</span><span class='gvar'>$ERROR_INFO</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="open-class_method"> + (<tt>Object</tt>) <strong>open</strong>(options = {}) </h3><div class="docstring"> <div class="discussion"> <p>Creates your p4 connection using some common forms.</p> <p>If you call open with a block, this will call connect before your block executes, and disconnect afterwards.</p> <p>If you do not call open with a block, it is up to the caller to connect and disconnect. (It's assumed you are calling w/o a block because you want to manage when the connection actually needs to happen.)</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 77</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span> <span class='id identifier rubyid_p4'>p4</span> <span class='op'>=</span> <span class='id identifier rubyid_create_p4'>create_p4</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='comment'># Again, if we're calling using the block, we'll connect and disconnect. </span> <span class='comment'># Otherwise, just return the created p4 object. </span> <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span> <span class='kw'>begin</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_connect'>connect</span> <span class='kw'>yield</span> <span class='id identifier rubyid_p4'>p4</span> <span class='kw'>rescue</span> <span class='const'>P4Exception</span> <span class='op'>=></span> <span class='id identifier rubyid_ex'>ex</span> <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>trace:</span><span class='tstring_end'>"</span></span> <span class='id identifier rubyid_ex'>ex</span><span class='period'>.</span><span class='id identifier rubyid_backtrace'>backtrace</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_l'>l</span><span class='op'>|</span> <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>\t</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_l'>l</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='rbrace'>}</span> <span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_make_p4_error'>make_p4_error</span><span class='lparen'>(</span><span class='id identifier rubyid_p4'>p4</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>else</span> <span class='kw'>return</span> <span class='id identifier rubyid_p4'>p4</span> <span class='kw'>end</span> <span class='kw'>ensure</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_disconnect'>disconnect</span> <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span> <span class='op'>&&</span> <span class='id identifier rubyid_p4'>p4</span> <span class='op'>&&</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_connected?'>connected?</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> <div class="method_details "> <h3 class="signature " id="open_from_env-class_method"> + (<tt>Object</tt>) <strong>open_from_env</strong>(env) </h3><div class="docstring"> <div class="discussion"> <p>Create a p4 connection using our Rack environment setup.</p> <p>This will seed options to a call to open() via attributes set on env:</p> <ul><li> <p><code>hws_settings</code>, which contains things like P4PORT</p> </li><li> <p><code>AUTH_CREDENTIALS</code>, which might be used if this is called after our Auth middleware (or we've stored these credentials in a session, etc)</p> </li></ul> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/p4_util.rb', line 14</span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_open_from_env'>open_from_env</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span> <span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span> <span class='kw'>if</span> <span class='id identifier rubyid_env'>env</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>hws_settings</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span> <span class='op'>=</span> <span class='id identifier rubyid_env'>env</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>hws_settings</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4URL</span> <span class='id identifier rubyid_p4_url'>p4_url</span> <span class='op'>=</span> <span class='const'>URI</span><span class='lparen'>(</span><span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4URL</span><span class='rparen'>)</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_p4_url'>p4_url</span><span class='period'>.</span><span class='id identifier rubyid_host'>host</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_p4_url'>p4_url</span><span class='period'>.</span><span class='id identifier rubyid_port'>port</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4HOST</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:host</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4HOST</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4PORT</span> <span class='comment'># Apparently, the P4API will ports with 'rsh:' to mean "I'm going </span> <span class='comment'># to have a way to launch random things for you". It's great. And by </span> <span class='comment'># great I mean a another fantastic feature that makes no sense to anyone </span> <span class='comment'># who's not debugging a local client application. </span> <span class='comment'># </span> <span class='comment'># See netportparser.cc for how the P4API parses out the transport type. </span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4PORT</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>rsh:</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4PORT</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_start_with?'>start_with?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>jsh:</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_fail'>fail</span> <span class='const'>P4Error</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='int'>0</span><span class='comma'>,</span> <span class='int'>3</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>Do not use rsh: or jsh: P4PORT values</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4PORT</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4CHARSET</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:charset</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4CHARSET</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4APILEVEL</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:api_level</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='const'>Integer</span><span class='lparen'>(</span><span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4APILEVEL</span><span class='rparen'>)</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4PASSWD</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:password</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_hws_settings'>hws_settings</span><span class='period'>.</span><span class='const'>P4PASSWD</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_env'>env</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>AUTH_CREDENTIALS</span><span class='tstring_end'>'</span></span><span class='rparen'>)</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:user</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_env'>env</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>AUTH_CREDENTIALS</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='symbol'>:password</span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:password</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:password</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_env'>env</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>AUTH_CREDENTIALS</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_last'>last</span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='id identifier rubyid_options'>options</span><span class='lbracket'>[</span><span class='symbol'>:client</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>INVALID</span><span class='tstring_end'>'</span></span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> </div> <div id="footer"> Generated on Mon Oct 12 22:20:49 2015 by <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a> 0.8.7.6 (ruby-2.2.3). </div> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#11 | 16275 | Doug Scheirer | Merge from main | ||
#10 | 16196 | Doug Scheirer | Merge from main | ||
#9 | 16148 | Doug Scheirer | Merge from main | ||
#8 | 16114 | Doug Scheirer | Merge from main | ||
#7 | 16079 | Doug Scheirer | Merge from main | ||
#6 | 16014 | Doug Scheirer | Merge down from main | ||
#5 | 15884 | Doug Scheirer | Merge from main | ||
#4 | 15868 | Doug Scheirer | Merge from main | ||
#3 | 15845 | Doug Scheirer | Integ from main | ||
#2 | 15715 | Doug Scheirer | merge changes from main | ||
#1 | 15688 | Doug Scheirer |
Populate -o //guest/perforce_software/helix-web-services/... //guest/doug_scheirer/helix-web-services/.... |
||
//guest/perforce_software/helix-web-services/main/build/doc/helix_web_services/P4Util.html | |||||
#32 | 15676 | tjuricek | HWS/NOARCH/2015.1.main/201509092205 | ||
#31 | 15589 | tjuricek | Update path to test output and update docs. | ||
#30 | 15542 | tjuricek |
Add spaces to our basic 'component encode' mechanism, and use it for HVE project IDs. In general, this will make the HVE IDs a bit more readable. |
||
#29 | 15517 | tjuricek | Do not require changelist ID for submitting Helix Sync pending changelists. | ||
#28 | 15499 | tjuricek | Naive implementation of helix sync project submit for "helix versioning engine projects". | ||
#27 | 15487 | tjuricek | Add basic ability to create pending changelists for helix sync projects. | ||
#26 | 15479 | tjuricek | Added a basic "HVE project" implementation for creating clients. | ||
#25 | 15447 | tjuricek |
Add simple Example application to list "projects" in a HVE instance. Qt's a little weird to follow, so I may have to find a different kind of example to write. It does work, however. |
||
#24 | 15240 | tjuricek |
Set api level via request path on all Helix Versioning Engine methods. This will allow migration of applications to different P4D versions. Our internal methods (like project API) should attempt to handle backward compatibility similarly. P4WEBAPI-118 |
||
#23 | 15228 | tjuricek | Revise triggers implementation, tests, and documentation. | ||
#22 | 15227 | tjuricek |
Revise implementation, tests, and documentation for protections management. Remove some specs I will not be revising from the helix_web_services project. |
||
#21 | 15225 | tjuricek |
Revise counter implementation, tests, and documentation Wasn't available in the Ruby client before, so, it's now available. |
||
#20 | 15222 | tjuricek |
Revise server specs testing and documentation. Note: also fixed issues with setting P4PORT via headers. For whatever reason, the host setting doesn't seem to work like I expect it to, though P4PORT works just fine. |
||
#19 | 15211 | tjuricek | Implement tests and documentation for label spec management. | ||
#18 | 15210 | tjuricek | Implement tests and documentation for job spec management. | ||
#17 | 15209 | tjuricek | Implement tests and documentation for group spec management. | ||
#16 | 15208 | tjuricek |
Revise 'command' implementation, tests, and documentaiton. This includes a change from a command blacklist to a whitelist. See P4WEBAPI-21 |
||
#15 | 15205 | tjuricek | Implemented tests and documentation for depot spec editing. | ||
#14 | 15189 | tjuricek | Update files implementation, testing, and documentation. | ||
#13 | 15185 | tjuricek | Update user spec management implementation, tests, and documentation. | ||
#12 | 15144 | tjuricek |
Setup stream spec tests and documentation. Also revised the documentation folder http_p4_web_api -> helix_versioning_engine |
||
#11 | 15132 | tjuricek | Provde a basic submit -e mechanism on classic perforce workspaces. | ||
#10 | 15110 | tjuricek | Revise changes methods for new p4 connection handling, add server specs, remove model references in client, and update asciidoc documentation. | ||
#9 | 15099 | tjuricek | Revise project services to be our simple 'container' for other systems. | ||
#8 | 15098 | tjuricek |
Revised project services to GET-only forms. With Helix Sync revising to integrate purely with Helix Cloud, this is the only thing we can reasonably define. |
||
#7 | 15090 | tjuricek |
Update _proposed_ API for project services. This is *very likely* to change, and will not be implemented until reviewed. |
||
#6 | 15078 | tjuricek |
clients spec method revisions Updated some other documentation. |
||
#5 | 15077 | tjuricek |
Add new 'model' technique, revised branch spec operations, test Auth::Middleware. The Ruby client now does *not* strictly type anything, but extends OpenStruct with helper methods to help deal with inconsistent data formats. See the OpenModel class documentation for more details. The Auth::Middleware class is also *finally* implemented as well. This does not take into account all possible variations of server behavior (yet), but that will happen in follow-up work. |
||
#4 | 15073 | tjuricek | Update Auth::Middleware and add spec | ||
#3 | 15053 | tjuricek |
Revise the client API to use the new login method. The current specs will need to be revised since data normalization is moving out of the server and into the client. |
||
#2 | 15038 | tjuricek | Document 'login' auth method and client programming overview. | ||
#1 | 15032 | tjuricek |
Starting config and doc revisions. System is now broken while revisions underway. Configuration of the p4d connection is now done via a single HWSSettings middleware object injected into the Rack env. The HWSP4Cleanup middleware now cleans up any p4 injected into the Rack env. The Auth::App class now mostly just contains one method to generate a p4 ticket. /auth/v1/login. Added yard documentation for the main project. Yard docs have been reconfigured to dump into build/ directories. This should probably be done with each release. Hm... The top level rake file contains a task, 'all:doc', to update our documentation. This should probably be run for each checkin. Hm... Specs are now using Rack::Test on top of a 'live' p4d. I'd suggest you still use the p4util mechanism, which now dumps to a /tmp folder, so we can safely add P4IGNORE rules back into your local .p4config file. Old 'perforce' application now called 'helix_versioning_engine'. Removing cache data. Helix Sync may be slow. It may also get axed. We'll see. |