<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Class: P4RecFile</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" /> <script type="text/javascript"> // <![CDATA[ function popupCode( url ) { window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400") } function toggleCode( id ) { if ( document.getElementById ) elem = document.getElementById( id ); else if ( document.all ) elem = eval( "document.all." + id ); else return false; elemStyle = elem.style; if ( elemStyle.display != "block" ) { elemStyle.display = "block" } else { elemStyle.display = "none" } return true; } // Make codeblocks hidden by default document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" ) // ]]> </script> </head> <body> <div id="classHeader"> <h1>P4RecFile <sup class="type-note">(Class)</sup></h1> <table class="header-table"> <tr class="top-aligned-row"> <td><strong>In:</strong></td> <td> <a href="../files/p4table_rb.html"> p4table.rb </a> <br /> </td> </tr> <tr class="top-aligned-row"> <td><strong>Parent:</strong></td> <td> Object </td> </tr> </table> </div> <!-- banner header --> <div id="bodyContent"> <div id="contextContent"> <div id="description"> <p> Class for representing files that are versioned in the depot. Files can be either (a) the meta file containing the metadata about the record (basically a "p4 job -o <recid>") or they can be other files which are attached to the record. </p> </div> <div id="method-list"> <h2 class="section-bar">Methods</h2> <div class="name-list"> <a href="#M000021">add</a> <a href="#M000023">delete</a> <a href="#M000018">depot_path</a> <a href="#M000017">depot_path=</a> <a href="#M000022">edit</a> <a href="#M000020">exists=</a> <a href="#M000019">exists?</a> <a href="#M000026">mkdir</a> <a href="#M000015">new</a> <a href="#M000024">read</a> <a href="#M000027">to_s</a> <a href="#M000025">write</a> <a href="#M000016">ws_path</a> </div> </div> <div id="attribute-list"> <h2 class="section-bar">Attributes</h2> <div class="name-list"> <table> <tr class="top-aligned-row context-row"> <td class="context-item-name">id</td> <td class="context-item-value"> [R] </td> <td class="context-item-desc"></td> </tr> <tr class="top-aligned-row context-row"> <td class="context-item-name">name</td> <td class="context-item-value"> [R] </td> <td class="context-item-desc"></td> </tr> </table> </div> </div> </div> <!-- if includes --> <!-- if method_list --> <div id="methods"> <h2 class="section-bar">Public Class methods</h2> <div id="method-M000015" class="method-detail"> <a name="M000015"></a> <div class="method-heading"> <a href="#M000015" class="method-signature"> <span class="method-name">new</span><span class="method-args">( name, id )</span> </a> </div> <div class="method-description"> <p> Construct a new <a href="P4RecFile.html">P4RecFile</a> object based on the supplied filename and RecId. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000015-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000015-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 277</span> 277: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>( <span class="ruby-identifier">name</span>, <span class="ruby-identifier">id</span> ) 278: <span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span> 279: <span class="ruby-ivar">@id</span> = <span class="ruby-identifier">id</span> 280: <span class="ruby-ivar">@exists</span> = <span class="ruby-keyword kw">false</span> 281: <span class="ruby-ivar">@depot_path</span> = <span class="ruby-keyword kw">nil</span> 282: <span class="ruby-ivar">@ws_path</span> = <span class="ruby-keyword kw">nil</span> 283: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <h2 class="section-bar">Public Instance methods</h2> <div id="method-M000021" class="method-detail"> <a name="M000021"></a> <div class="method-heading"> <a href="#M000021" class="method-signature"> <span class="method-name">add</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Open this file for add </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000021-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000021-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 336</span> 336: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add</span> 337: <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">exists?</span> ) 338: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-value str">"Can't open existing file for add"</span>, <span class="ruby-identifier">caller</span> ) 339: <span class="ruby-keyword kw">end</span> 340: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span> 341: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_add</span>( <span class="ruby-identifier">ws_path</span>() ) 342: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000023" class="method-detail"> <a name="M000023"></a> <div class="method-heading"> <a href="#M000023" class="method-signature"> <span class="method-name">delete</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Open this file for delete </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000023-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000023-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 359</span> 359: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span> 360: <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-identifier">exists?</span> ) 361: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-value str">"Can't delete non-existent file"</span>, <span class="ruby-identifier">caller</span> ) 362: <span class="ruby-keyword kw">end</span> 363: 364: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span> 365: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_delete</span>( <span class="ruby-identifier">depot_path</span>() ) 366: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000018" class="method-detail"> <a name="M000018"></a> <div class="method-heading"> <a href="#M000018" class="method-signature"> <span class="method-name">depot_path</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Compute the depot path based on the table storage map and the id </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000018-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000018-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 313</span> 313: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">depot_path</span> 314: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@depot_path</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@depot_path</span> 315: <span class="ruby-identifier">table_path</span> = <span class="ruby-ivar">@id</span>.<span class="ruby-identifier">table</span>.<span class="ruby-identifier">storage_map</span>( <span class="ruby-ivar">@id</span> ).<span class="ruby-identifier">join</span>( <span class="ruby-value str">"/"</span> ) 316: <span class="ruby-ivar">@depot_path</span> = [ <span class="ruby-constant">DEPOT_ROOT_PATH</span>, <span class="ruby-identifier">table_path</span>, <span class="ruby-ivar">@id</span>.<span class="ruby-identifier">seq_str</span>, <span class="ruby-ivar">@name</span> ].<span class="ruby-identifier">join</span>( <span class="ruby-value str">"/"</span> ) 317: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000017" class="method-detail"> <a name="M000017"></a> <div class="method-heading"> <a href="#M000017" class="method-signature"> <span class="method-name">depot_path=</span><span class="method-args">( path )</span> </a> </div> <div class="method-description"> <p> Explicitly set the depot path for a file. Needed to allow old records to be found in their old locations even if the storage map has since changed. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000017-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000017-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 306</span> 306: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">depot_path=</span>( <span class="ruby-identifier">path</span> ) 307: <span class="ruby-ivar">@depot_path</span> = <span class="ruby-identifier">path</span> 308: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000022" class="method-detail"> <a name="M000022"></a> <div class="method-heading"> <a href="#M000022" class="method-signature"> <span class="method-name">edit</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Open this file for edit </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000022-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000022-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 347</span> 347: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">edit</span> 348: <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-identifier">exists?</span> ) 349: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>,<span class="ruby-value str">"Can't open non-existent file for edit"</span>, <span class="ruby-identifier">caller</span>) 350: <span class="ruby-keyword kw">end</span> 351: 352: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span> 353: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_edit</span>( <span class="ruby-identifier">depot_path</span>() ) 354: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000020" class="method-detail"> <a name="M000020"></a> <div class="method-heading"> <a href="#M000020" class="method-signature"> <span class="method-name">exists=</span><span class="method-args">( bool )</span> </a> </div> <div class="method-description"> <p> Set the existence flag for a file explicitly </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000020-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000020-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 329</span> 329: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists=</span>( <span class="ruby-identifier">bool</span> ) 330: <span class="ruby-ivar">@exists</span> = <span class="ruby-identifier">bool</span> 331: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000019" class="method-detail"> <a name="M000019"></a> <div class="method-heading"> <a href="#M000019" class="method-signature"> <span class="method-name">exists?</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Does the file exist? </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000019-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000019-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 322</span> 322: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists?</span> 323: <span class="ruby-ivar">@exists</span> 324: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000026" class="method-detail"> <a name="M000026"></a> <div class="method-heading"> <a href="#M000026" class="method-signature"> <span class="method-name">mkdir</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Create the directory for the workspace file </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000026-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000026-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 391</span> 391: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">mkdir</span> 392: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span> 393: <span class="ruby-identifier">dirs</span> = <span class="ruby-identifier">ws_path</span>.<span class="ruby-identifier">split</span>( <span class="ruby-constant">SEP</span> ) 394: <span class="ruby-identifier">dirs</span>.<span class="ruby-identifier">pop</span> 395: <span class="ruby-identifier">dir</span> = <span class="ruby-value str">""</span> 396: <span class="ruby-identifier">dirs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> 397: <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span> 398: <span class="ruby-identifier">dir</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">+</span> <span class="ruby-constant">SEP</span> 399: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">mkdir</span>( <span class="ruby-identifier">dir</span> ) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>( <span class="ruby-identifier">dir</span> ) 400: <span class="ruby-keyword kw">end</span> 401: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000024" class="method-detail"> <a name="M000024"></a> <div class="method-heading"> <a href="#M000024" class="method-signature"> <span class="method-name">read</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Read the contents of the file (returns a String) </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000024-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000024-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 371</span> 371: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">read</span> 372: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span> 373: <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>( <span class="ruby-identifier">ws_path</span>, <span class="ruby-value str">"r"</span> ) 374: <span class="ruby-identifier">buf</span> = <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span> 375: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span> 376: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">buf</span> 377: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000027" class="method-detail"> <a name="M000027"></a> <div class="method-heading"> <a href="#M000027" class="method-signature"> <span class="method-name">to_s</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Render the filename as a string (we use depot syntax) </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000027-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000027-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 406</span> 406: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span> 407: <span class="ruby-identifier">depot_file</span> 408: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000025" class="method-detail"> <a name="M000025"></a> <div class="method-heading"> <a href="#M000025" class="method-signature"> <span class="method-name">write</span><span class="method-args">( string )</span> </a> </div> <div class="method-description"> <p> Write the contents of the file </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000025-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000025-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 382</span> 382: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write</span>( <span class="ruby-identifier">string</span> ) 383: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span> 384: <span class="ruby-identifier">mkdir</span> 385: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>( <span class="ruby-identifier">ws_path</span>, <span class="ruby-value str">"w"</span> ) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span>( <span class="ruby-identifier">string</span> ) } 386: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000016" class="method-detail"> <a name="M000016"></a> <div class="method-heading"> <a href="#M000016" class="method-signature"> <span class="method-name">ws_path</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Convert the depot path into a client path. Obviously this precludes complex client maps as we don’t want to reimplement Perforce mappings in Ruby. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000016-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000016-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 292</span> 292: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ws_path</span> 293: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@ws_path</span> <span class="ruby-keyword kw">if</span> ( <span class="ruby-ivar">@ws_path</span> ) 294: 295: <span class="ruby-identifier">root</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">fetch_client</span>[ <span class="ruby-value str">"Root"</span> ] 296: <span class="ruby-identifier">path</span> = <span class="ruby-identifier">depot_path</span>.<span class="ruby-identifier">sub</span>( <span class="ruby-constant">DEPOT_ROOT_PATH</span>, <span class="ruby-identifier">root</span> ) 297: <span class="ruby-ivar">@ws_path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub!</span>( <span class="ruby-value str">"/"</span>, <span class="ruby-constant">SEP</span> ) 298: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> </div> </div> <div id="validator-badges"> <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p> </div> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 4678 | Tony Smith |
Update p4table.rb to use the new spec parsing and formatting features of P4Ruby. This means we now only need one Perforce client instance to handle specs in both hash form and text form. |
||
#1 | 4677 | Tony Smith |
Move P4table.rb to the P4Ruby library and rename it to p4table.rb instead. There's an update coming so this is just the move. |