<?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: P4Record</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>P4Record <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> Main record manipulation class. Handles the loading and saving of records as both jobs and files. </p> </div> <div id="method-list"> <h2 class="section-bar">Methods</h2> <div class="name-list"> <a href="#M000045">abandon</a> <a href="#M000043">add_file</a> <a href="#M000035">create</a> <a href="#M000048">delete</a> <a href="#M000042">each_file</a> <a href="#M000039">exists=</a> <a href="#M000038">exists?</a> <a href="#M000036">exists?</a> <a href="#M000046">file_list</a> <a href="#M000040">get_file</a> <a href="#M000033">load</a> <a href="#M000041">metafile</a> <a href="#M000050">method_missing</a> <a href="#M000037">new</a> <a href="#M000049">obliterate</a> <a href="#M000034">query</a> <a href="#M000044">rm_file</a> <a href="#M000047">save</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">files</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">id</td> <td class="context-item-value"> [RW] </td> <td class="context-item-desc"></td> </tr> <tr class="top-aligned-row context-row"> <td class="context-item-name">meta</td> <td class="context-item-value"> [RW] </td> <td class="context-item-desc"></td> </tr> <tr class="top-aligned-row context-row"> <td class="context-item-name">seq</td> <td class="context-item-value"> [RW] </td> <td class="context-item-desc"></td> </tr> <tr class="top-aligned-row context-row"> <td class="context-item-name">spec</td> <td class="context-item-value"> [RW] </td> <td class="context-item-desc"></td> </tr> <tr class="top-aligned-row context-row"> <td class="context-item-name">table</td> <td class="context-item-value"> [RW] </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-M000035" class="method-detail"> <a name="M000035"></a> <div class="method-heading"> <a href="#M000035" class="method-signature"> <span class="method-name">create</span><span class="method-args">( table )</span> </a> </div> <div class="method-description"> <p> Create a new record in the given table. Returns the skeletal record populated with the default values from the jobspec for editing. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000035-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000035-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 477</span> 477: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">create</span>( <span class="ruby-identifier">table</span> ) 478: <span class="ruby-identifier">id</span> = <span class="ruby-constant">P4RecId</span>.<span class="ruby-identifier">next</span>( <span class="ruby-identifier">table</span> ) 479: <span class="ruby-identifier">rec</span> = <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">id</span> ) 480: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">spec</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">fetch_job</span>( <span class="ruby-identifier">id</span>.<span class="ruby-identifier">to_s</span> ) 481: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">rec</span> 482: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000036" class="method-detail"> <a name="M000036"></a> <div class="method-heading"> <a href="#M000036" class="method-signature"> <span class="method-name">exists?</span><span class="method-args">( id )</span> </a> </div> <div class="method-description"> <p> Test for record existence </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000036-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000036-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 487</span> 487: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">exists?</span>( <span class="ruby-identifier">id</span> ) 488: <span class="ruby-identifier">jobs</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_jobs</span>( <span class="ruby-value str">"-e"</span>, <span class="ruby-value str">"job="</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">id</span>.<span class="ruby-identifier">to_s</span> ) 489: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">jobs</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span> 490: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000033" class="method-detail"> <a name="M000033"></a> <div class="method-heading"> <a href="#M000033" class="method-signature"> <span class="method-name">load</span><span class="method-args">( id )</span> </a> </div> <div class="method-description"> <p> Load a record from its associated job. Use to load existing records rather than constructing new ones. Raises a RuntimeError if the record does not exist. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000033-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000033-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 427</span> 427: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">load</span>( <span class="ruby-identifier">id</span> ) 428: 429: <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">exists?</span>( <span class="ruby-identifier">id</span> ) ) 430: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-node">"Record #{id.to_s} does not exist"</span>, <span class="ruby-identifier">caller</span> ) 431: <span class="ruby-keyword kw">end</span> 432: 433: <span class="ruby-identifier">rec</span> = <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">id</span> ) 434: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">spec</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">fetch_job</span>( <span class="ruby-identifier">id</span>.<span class="ruby-identifier">to_s</span> ) 435: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">spec</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-value str">"files"</span> ) 436: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">spec</span>[ <span class="ruby-value str">"files"</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> 437: <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> 438: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">sub</span>( <span class="ruby-value str">".*/"</span>, <span class="ruby-value str">""</span> ).<span class="ruby-identifier">chomp</span> 439: <span class="ruby-identifier">f</span> = <span class="ruby-constant">P4RecFile</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">name</span>, <span class="ruby-identifier">id</span> ) 440: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">exists</span> = <span class="ruby-keyword kw">true</span> 441: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">depot_path</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">chomp</span> 442: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">files</span>[ <span class="ruby-identifier">name</span> ] = <span class="ruby-identifier">f</span> 443: <span class="ruby-keyword kw">end</span> 444: <span class="ruby-keyword kw">end</span> 445: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">exists</span> = <span class="ruby-keyword kw">true</span> 446: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">rec</span> 447: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000037" class="method-detail"> <a name="M000037"></a> <div class="method-heading"> <a href="#M000037" class="method-signature"> <span class="method-name">new</span><span class="method-args">( id )</span> </a> </div> <div class="method-description"> <p> Constructor: DON‘T USE NEW DIRECTLY, CALL create/load. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000037-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000037-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 495</span> 495: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>( <span class="ruby-identifier">id</span> ) 496: <span class="ruby-ivar">@id</span> = <span class="ruby-identifier">id</span> 497: <span class="ruby-ivar">@table</span> = <span class="ruby-identifier">id</span>.<span class="ruby-identifier">table</span> 498: <span class="ruby-ivar">@seq</span> = <span class="ruby-identifier">id</span>.<span class="ruby-identifier">seq</span> 499: <span class="ruby-ivar">@spec</span> = <span class="ruby-keyword kw">nil</span> 500: <span class="ruby-ivar">@exists</span> = <span class="ruby-keyword kw">false</span> 501: <span class="ruby-ivar">@files</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> 502: 503: <span class="ruby-ivar">@files</span>[ <span class="ruby-value str">"meta"</span> ] = <span class="ruby-constant">P4RecFile</span>.<span class="ruby-identifier">new</span>( <span class="ruby-value str">"meta"</span>, <span class="ruby-ivar">@id</span> ) 504: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000034" class="method-detail"> <a name="M000034"></a> <div class="method-heading"> <a href="#M000034" class="method-signature"> <span class="method-name">query</span><span class="method-args">( table, expr )</span> </a> </div> <div class="method-description"> <p> Load all records matching a query expression. Uses a dynamically built "p4 jobs -e" expression to identify the matching records and then loads each record. Returns an array of <a href="P4Record.html">P4Record</a> objects. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000034-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000034-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 454</span> 454: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">query</span>( <span class="ruby-identifier">table</span>, <span class="ruby-identifier">expr</span> ) 455: <span class="ruby-identifier">expr</span> = <span class="ruby-node">"job=#{table} & ( "</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">expr</span> <span class="ruby-operator">+</span> <span class="ruby-value str">" )"</span> 456: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_jobs</span>( <span class="ruby-value str">"-e"</span>, <span class="ruby-identifier">expr</span> ).<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> 457: <span class="ruby-operator">|</span><span class="ruby-identifier">job</span><span class="ruby-operator">|</span> 458: <span class="ruby-identifier">rec</span> = <span class="ruby-constant">P4Record</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">P4RecId</span>.<span class="ruby-identifier">new_from_job</span>( <span class="ruby-identifier">job</span>[ <span class="ruby-value str">"job"</span> ] ) ) 459: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">spec</span> = <span class="ruby-identifier">job</span> 460: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">spec</span>[ <span class="ruby-value str">"files"</span> ].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> 461: <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> 462: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">sub</span>( <span class="ruby-value str">".*/"</span>, <span class="ruby-value str">""</span> ).<span class="ruby-identifier">chomp</span> 463: <span class="ruby-identifier">f</span> = <span class="ruby-constant">P4RecFile</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">name</span>, <span class="ruby-identifier">id</span> ) 464: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">exists</span> = <span class="ruby-keyword kw">true</span> 465: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">depot_path</span> = <span class="ruby-identifier">file</span> 466: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">files</span>[ <span class="ruby-identifier">name</span> ] = <span class="ruby-identifier">f</span> 467: <span class="ruby-keyword kw">end</span> 468: <span class="ruby-identifier">rec</span>.<span class="ruby-identifier">exists</span> = <span class="ruby-keyword kw">true</span> 469: <span class="ruby-identifier">rec</span> 470: <span class="ruby-keyword kw">end</span> 471: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <h2 class="section-bar">Public Instance methods</h2> <div id="method-M000045" class="method-detail"> <a name="M000045"></a> <div class="method-heading"> <a href="#M000045" class="method-signature"> <span class="method-name">abandon</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Abandon all edits to this record. Use with care: it reverts the files that are open for add/edit/delete etc. but it doesn’t reload the record from the job - it may be a new record. You should either discard the record or reload it yourself after calling abandon(). </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000045-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000045-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 580</span> 580: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">abandon</span> 581: <span class="ruby-identifier">p4</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span> 582: <span class="ruby-identifier">each_file</span> <span class="ruby-keyword kw">do</span> 583: <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> 584: <span class="ruby-identifier">fs</span> = <span class="ruby-identifier">p4</span>.<span class="ruby-identifier">run_fstat</span>( <span class="ruby-identifier">f</span>.<span class="ruby-identifier">ws_path</span> ) 585: <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">fs</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">fs</span>[ <span class="ruby-value str">"action"</span> ] <span class="ruby-operator">==</span> <span class="ruby-value str">"add"</span> ) 586: <span class="ruby-constant">File</span>.<span class="ruby-identifier">unlink</span>( <span class="ruby-identifier">f</span>.<span class="ruby-identifier">ws_path</span> ) 587: <span class="ruby-keyword kw">end</span> 588: <span class="ruby-identifier">p4</span>.<span class="ruby-identifier">run_revert</span>( <span class="ruby-identifier">f</span>.<span class="ruby-identifier">depot_path</span> ) 589: <span class="ruby-keyword kw">end</span> 590: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000043" class="method-detail"> <a name="M000043"></a> <div class="method-heading"> <a href="#M000043" class="method-signature"> <span class="method-name">add_file</span><span class="method-args">( name )</span> </a> </div> <div class="method-description"> <p> Add a new file attachment to this record </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000043-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000043-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 550</span> 550: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_file</span>( <span class="ruby-identifier">name</span> ) 551: <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"meta"</span> ) 552: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-value str">"The meta file already exists."</span>, <span class="ruby-identifier">caller</span> ) 553: <span class="ruby-keyword kw">end</span> 554: 555: <span class="ruby-identifier">nfile</span> = <span class="ruby-constant">P4RecFile</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">name</span>, <span class="ruby-ivar">@id</span> ) 556: <span class="ruby-identifier">nfile</span>.<span class="ruby-identifier">add</span> 557: <span class="ruby-ivar">@files</span>[ <span class="ruby-value str">"name"</span> ] = <span class="ruby-identifier">nfile</span> 558: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000048" class="method-detail"> <a name="M000048"></a> <div class="method-heading"> <a href="#M000048" class="method-signature"> <span class="method-name">delete</span><span class="method-args">( desc )</span> </a> </div> <div class="method-description"> <p> Delete a record. Deletes the files and the job. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000048-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000048-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 636</span> 636: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete</span>( <span class="ruby-identifier">desc</span> ) 637: <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-identifier">exists?</span> ) 638: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-value str">"Can't delete. Record doesn't exist."</span>, <span class="ruby-identifier">caller</span> ) 639: <span class="ruby-keyword kw">end</span> 640: 641: <span class="ruby-ivar">@files</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">each</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">delete</span> } 642: <span class="ruby-identifier">change</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">fetch_change</span> 643: <span class="ruby-identifier">change</span>[ <span class="ruby-value str">"Description"</span> ] = <span class="ruby-identifier">desc</span> 644: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">submit_spec</span>( <span class="ruby-identifier">change</span> ) 645: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_job</span>( <span class="ruby-value str">"-d"</span>, <span class="ruby-ivar">@spec</span>[ <span class="ruby-value str">"job"</span> ] ) 646: <span class="ruby-ivar">@files</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> 647: <span class="ruby-ivar">@spec</span>[ <span class="ruby-value str">"files"</span> ] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span> 648: <span class="ruby-ivar">@exists</span> = <span class="ruby-keyword kw">false</span> 649: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000042" class="method-detail"> <a name="M000042"></a> <div class="method-heading"> <a href="#M000042" class="method-signature"> <span class="method-name">each_file</span><span class="method-args">() {|f| ...}</span> </a> </div> <div class="method-description"> <p> Iterate over the files in the record </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000042-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000042-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 543</span> 543: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each_file</span> 544: <span class="ruby-ivar">@files</span>.<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">yield</span>( <span class="ruby-identifier">f</span> ) } 545: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000039" class="method-detail"> <a name="M000039"></a> <div class="method-heading"> <a href="#M000039" class="method-signature"> <span class="method-name">exists=</span><span class="method-args">( bool )</span> </a> </div> <div class="method-description"> <p> Explicitly set record existence (or otherwise) </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000039-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000039-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 519</span> 519: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists=</span>( <span class="ruby-identifier">bool</span> ) 520: <span class="ruby-ivar">@exists</span> = <span class="ruby-identifier">bool</span> 521: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000038" class="method-detail"> <a name="M000038"></a> <div class="method-heading"> <a href="#M000038" class="method-signature"> <span class="method-name">exists?</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Test for record existence </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000038-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000038-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 512</span> 512: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">exists?</span> 513: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@exists</span> 514: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000046" class="method-detail"> <a name="M000046"></a> <div class="method-heading"> <a href="#M000046" class="method-signature"> <span class="method-name">file_list</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Get the list of files attached to this record in depot syntax </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000046-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000046-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 595</span> 595: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">file_list</span> 596: <span class="ruby-ivar">@files</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> 597: <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> 598: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">depot_path</span> 599: <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>( <span class="ruby-value str">"\n"</span> ) 600: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000040" class="method-detail"> <a name="M000040"></a> <div class="method-heading"> <a href="#M000040" class="method-signature"> <span class="method-name">get_file</span><span class="method-args">( name )</span> </a> </div> <div class="method-description"> <p> Get a file handle by name (not the depot path). Returns a <a href="P4RecFile.html">P4RecFile</a> object. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000040-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000040-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 528</span> 528: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_file</span>( <span class="ruby-identifier">name</span> ) 529: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@files</span>[ <span class="ruby-identifier">name</span> ] <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@files</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">name</span> ) 530: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-node">"Record contains no file called #{name}"</span>, <span class="ruby-identifier">caller</span> ) 531: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000041" class="method-detail"> <a name="M000041"></a> <div class="method-heading"> <a href="#M000041" class="method-signature"> <span class="method-name">metafile</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Get the meta file specifically. Just shorthand. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000041-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000041-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 536</span> 536: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">metafile</span> 537: <span class="ruby-identifier">get_file</span>( <span class="ruby-value str">"meta"</span> ) 538: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000050" class="method-detail"> <a name="M000050"></a> <div class="method-heading"> <a href="#M000050" class="method-signature"> <span class="method-name">method_missing</span><span class="method-args">( meth, *args )</span> </a> </div> <div class="method-description"> <p> Allow direct access to the fields in the jobspec by making them virtual method names of the form _<field>() </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000050-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000050-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 675</span> 675: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span>( <span class="ruby-identifier">meth</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> ) 676: <span class="ruby-identifier">meth</span> = <span class="ruby-identifier">meth</span>.<span class="ruby-identifier">to_s</span> 677: <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">meth</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">"_"</span> ) 678: <span class="ruby-identifier">meth</span> = <span class="ruby-identifier">meth</span>[ <span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span> ] 679: <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">meth</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^(.*)=$/</span> ) 680: <span class="ruby-identifier">meth</span> = <span class="ruby-identifier">$1</span> 681: <span class="ruby-ivar">@spec</span>[ <span class="ruby-identifier">meth</span> ] = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span> 682: <span class="ruby-keyword kw">elsif</span> ( <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">&&</span> <span class="ruby-ivar">@spec</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">meth</span> ) ) 683: <span class="ruby-ivar">@spec</span>[ <span class="ruby-identifier">meth</span> ] 684: <span class="ruby-keyword kw">else</span> 685: <span class="ruby-value str">""</span> 686: <span class="ruby-keyword kw">end</span> 687: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000049" class="method-detail"> <a name="M000049"></a> <div class="method-heading"> <a href="#M000049" class="method-signature"> <span class="method-name">obliterate</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Obliterate a record. Does exactly what it says on the tin. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000049-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000049-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 655</span> 655: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">obliterate</span> 656: <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-identifier">exists?</span> ) 657: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-value str">"Can't oblit. Record doesn't exist."</span>, <span class="ruby-identifier">caller</span> ) 658: <span class="ruby-keyword kw">end</span> 659: 660: <span class="ruby-identifier">args</span> = <span class="ruby-ivar">@files</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">collect</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">depot_path</span> } 661: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">exception_level</span> = <span class="ruby-value">1</span> 662: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_sync</span>( <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">"#none"</span> } ) 663: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">exception_level</span> = <span class="ruby-value">2</span> 664: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_obliterate</span>( <span class="ruby-value str">"-y"</span>, <span class="ruby-identifier">args</span> ) 665: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">run_job</span>( <span class="ruby-value str">"-d"</span>, <span class="ruby-ivar">@spec</span>[ <span class="ruby-value str">"job"</span> ] ) 666: <span class="ruby-ivar">@spec</span>[ <span class="ruby-value str">"files"</span> ] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span> 667: <span class="ruby-ivar">@files</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> 668: <span class="ruby-ivar">@exists</span> = <span class="ruby-keyword kw">false</span> 669: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000044" class="method-detail"> <a name="M000044"></a> <div class="method-heading"> <a href="#M000044" class="method-signature"> <span class="method-name">rm_file</span><span class="method-args">( file )</span> </a> </div> <div class="method-description"> <p> Remove a file attachment </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000044-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000044-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 563</span> 563: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rm_file</span>( <span class="ruby-identifier">file</span> ) 564: <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">file</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"meta"</span> ) 565: <span class="ruby-identifier">raise</span>( <span class="ruby-constant">RuntimeError</span>, <span class="ruby-value str">"You can't delete the meta file"</span>, <span class="ruby-identifier">caller</span> ) 566: <span class="ruby-keyword kw">end</span> 567: 568: <span class="ruby-identifier">f</span> = <span class="ruby-identifier">get_file</span>( <span class="ruby-identifier">file</span> ) 569: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">delete</span> 570: <span class="ruby-ivar">@files</span>.<span class="ruby-identifier">delete</span>( <span class="ruby-identifier">file</span> ) 571: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000047" class="method-detail"> <a name="M000047"></a> <div class="method-heading"> <a href="#M000047" class="method-signature"> <span class="method-name">save</span><span class="method-args">( desc )</span> </a> </div> <div class="method-description"> <p> Update the record. Updates the job and then archives the job into the meta file and saves any attached files. Provide the description you’d like to see attached to the change </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000047-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000047-source"> <pre> <span class="ruby-comment cmt"># File p4table.rb, line 608</span> 608: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">save</span>( <span class="ruby-identifier">desc</span> ) 609: <span class="ruby-comment cmt"># First rewrite the files list in case it's been modified</span> 610: <span class="ruby-ivar">@spec</span>[ <span class="ruby-value str">"files"</span> ] = <span class="ruby-identifier">file_list</span> 611: 612: <span class="ruby-comment cmt"># Next update the job with the values in the spec</span> 613: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">save_job</span>( <span class="ruby-ivar">@spec</span> ) 614: 615: <span class="ruby-comment cmt"># Now update the metafile with the job -o output</span> 616: <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">exists?</span> ) 617: <span class="ruby-identifier">metafile</span>.<span class="ruby-identifier">edit</span> 618: <span class="ruby-keyword kw">else</span> 619: <span class="ruby-identifier">metafile</span>.<span class="ruby-identifier">add</span> 620: <span class="ruby-keyword kw">end</span> 621: 622: <span class="ruby-identifier">metafile</span>.<span class="ruby-identifier">mkdir</span> 623: <span class="ruby-identifier">metafile</span>.<span class="ruby-identifier">write</span>( <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">plain</span>.<span class="ruby-identifier">fetch_job</span>( <span class="ruby-ivar">@id</span>.<span class="ruby-identifier">to_s</span> ) ) 624: 625: <span class="ruby-comment cmt"># Now submit</span> 626: <span class="ruby-identifier">change</span> = <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">fetch_change</span> 627: <span class="ruby-identifier">change</span>[ <span class="ruby-value str">"Description"</span> ] = <span class="ruby-identifier">desc</span> 628: <span class="ruby-constant">P4Global</span>.<span class="ruby-identifier">tagged</span>.<span class="ruby-identifier">submit_spec</span>( <span class="ruby-identifier">change</span> ) 629: 630: <span class="ruby-ivar">@exists</span> = <span class="ruby-keyword kw">true</span> 631: <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. |