<?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: TypeTrigger</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>TypeTrigger <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/checktype_rb.html">
checktype.rb
</a>
<br />
</td>
</tr>
<tr class="top-aligned-row">
<td><strong>Parent:</strong></td>
<td>
<a href="P4Trigger.html">
P4Trigger
</a>
</td>
</tr>
</table>
</div>
<!-- banner header -->
<div id="bodyContent">
<div id="contextContent">
<div id="description">
<p>
The trigger class itself. The main method in here is validate() which is
invoked from the super-class’ parse_change() method.
</p>
</div>
<div id="method-list">
<h2 class="section-bar">Methods</h2>
<div class="name-list">
<a href="#M000020">filetype</a>
<a href="#M000019">new</a>
<a href="#M000022">report</a>
<a href="#M000021">validate</a>
</div>
</div>
</div>
<!-- if includes -->
<!-- if method_list -->
<div id="methods">
<h2 class="section-bar">Public Class methods</h2>
<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">new</span><span class="method-args">( max_errors )</span>
</a>
</div>
<div class="method-description">
<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 checktype.rb, line 78</span>
78: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>( <span class="ruby-identifier">max_errors</span> )
79: <span class="ruby-ivar">@max_errors</span> = <span class="ruby-identifier">max_errors</span>
80: <span class="ruby-keyword kw">super</span>()
81: <span class="ruby-keyword kw">end</span>
</pre>
</div>
</div>
</div>
<h2 class="section-bar">Public Instance methods</h2>
<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">filetype</span><span class="method-args">( depot_file )</span>
</a>
</div>
<div class="method-description">
<p>
Method to return the expected filetype given a filename. Returns nil if no
specific filetype has been mandated.
</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 checktype.rb, line 97</span>
97: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">filetype</span>( <span class="ruby-identifier">depot_file</span> )
98: <span class="ruby-identifier">ext</span> = <span class="ruby-identifier">depot_file</span>.<span class="ruby-identifier">sub</span>( <span class="ruby-regexp re">/.*\.(.*)/</span>, <span class="ruby-value str">'\1'</span> )
99: <span class="ruby-identifier">ext</span> = <span class="ruby-identifier">ext</span>.<span class="ruby-identifier">downcase</span>
100: <span class="ruby-constant">TYPEMAP</span>[ <span class="ruby-identifier">ext</span> ]
101: <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">report</span><span class="method-args">( badfiles )</span>
</a>
</div>
<div class="method-description">
<p>
Method to report the error to the user. Just formats the error message and
sends it. We only report the first @max_errors bad files. On a large
changelist they’ll be grateful for that.
</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 checktype.rb, line 132</span>
132: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">report</span>( <span class="ruby-identifier">badfiles</span> )
133: <span class="ruby-identifier">errors</span> = <span class="ruby-value">0</span>
134: <span class="ruby-identifier">msg</span> = @<span class="ruby-ivar">@USER_MESSAGE</span>
135: <span class="ruby-identifier">badfiles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span>
136: <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
137: <span class="ruby-identifier">type</span> = <span class="ruby-identifier">filetype</span>( <span class="ruby-identifier">file</span>.<span class="ruby-identifier">depot_file</span> )
138: <span class="ruby-identifier">msg</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sprintf</span>( @<span class="ruby-ivar">@BADFILE_FORMAT</span>,
139: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">depot_file</span>,
140: <span class="ruby-identifier">file</span>.<span class="ruby-identifier">revisions</span>[ <span class="ruby-value">0</span> ].<span class="ruby-identifier">type</span>,
141: <span class="ruby-identifier">type</span>.<span class="ruby-identifier">msg</span>
142: )
143: <span class="ruby-identifier">errors</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
144: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">errors</span> <span class="ruby-operator">>=</span> <span class="ruby-ivar">@max_errors</span> )
145:
146: <span class="ruby-keyword kw">end</span>
147: <span class="ruby-identifier">message</span>( <span class="ruby-identifier">msg</span> )
148: <span class="ruby-keyword kw">end</span>
</pre>
</div>
</div>
</div>
<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">validate</span><span class="method-args">()</span>
</a>
</div>
<div class="method-description">
<p>
Enforce type checking. Basic algorithm is that we iterate over the typemap
and match each extension against the depot file. If they match, we check
the type.
</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 checktype.rb, line 106</span>
106: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate</span>()
107:
108: <span class="ruby-comment cmt"># First gather the list of bad files</span>
109: <span class="ruby-identifier">badlist</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
110: <span class="ruby-identifier">change</span>.<span class="ruby-identifier">each_file</span> <span class="ruby-keyword kw">do</span>
111: <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
112: <span class="ruby-comment cmt"># Ignore files not open for add</span>
113: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> ( <span class="ruby-identifier">file</span>.<span class="ruby-identifier">revisions</span>[ <span class="ruby-value">0</span> ].<span class="ruby-identifier">action</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"add"</span> )
114:
115: <span class="ruby-identifier">type</span> = <span class="ruby-identifier">filetype</span>( <span class="ruby-identifier">file</span>.<span class="ruby-identifier">depot_file</span> )
116: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">type</span>
117:
118: <span class="ruby-identifier">basetype</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">revisions</span>[ <span class="ruby-value">0</span> ].<span class="ruby-identifier">type</span>.<span class="ruby-identifier">sub</span>( <span class="ruby-regexp re">/\+.*/</span>, <span class="ruby-value str">""</span> )
119: <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-identifier">type</span>.<span class="ruby-identifier">match</span>( <span class="ruby-identifier">basetype</span> ) )
120: <span class="ruby-identifier">badlist</span>.<span class="ruby-identifier">push</span>( <span class="ruby-identifier">file</span> )
121: <span class="ruby-keyword kw">end</span>
122: <span class="ruby-keyword kw">end</span>
123:
124: <span class="ruby-comment cmt"># Now report any problems to the user</span>
125: <span class="ruby-identifier">report</span>( <span class="ruby-identifier">badlist</span> ) <span class="ruby-keyword kw">if</span> ( <span class="ruby-operator">!</span> <span class="ruby-identifier">badlist</span>.<span class="ruby-identifier">empty?</span> )
126: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">badlist</span>.<span class="ruby-identifier">empty?</span>
127: <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 | |
|---|---|---|---|---|---|
| #3 | 4654 | Tony Smith |
Add an example spec trigger to show how you might restrict the default view for all new clients to a pre-defined set of mappings. |
||
| #2 | 4640 | Tony Smith |
Add a sample post-commit trigger that can be used to keep a master and slave branch in sync. |
||
| #1 | 3637 | Tony Smith | Add RDoc documentation to the sample triggers. |