jruby-lint 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +12 -0
- data/Guardfile +12 -0
- data/History.txt +4 -0
- data/README.md +62 -0
- data/Rakefile +24 -0
- data/bin/jrlint +5 -0
- data/jruby-lint.gemspec +38 -0
- data/lib/jruby/lint.rb +19 -0
- data/lib/jruby/lint/ast.rb +56 -0
- data/lib/jruby/lint/checkers.rb +24 -0
- data/lib/jruby/lint/checkers/fork_exec.rb +47 -0
- data/lib/jruby/lint/checkers/gem.rb +45 -0
- data/lib/jruby/lint/checkers/gemspec.rb +41 -0
- data/lib/jruby/lint/checkers/object_space.rb +25 -0
- data/lib/jruby/lint/checkers/thread_critical.rb +26 -0
- data/lib/jruby/lint/cli.rb +61 -0
- data/lib/jruby/lint/collectors.rb +75 -0
- data/lib/jruby/lint/collectors/bundler.rb +9 -0
- data/lib/jruby/lint/collectors/gemspec.rb +9 -0
- data/lib/jruby/lint/collectors/rake.rb +9 -0
- data/lib/jruby/lint/collectors/ruby.rb +14 -0
- data/lib/jruby/lint/finding.rb +15 -0
- data/lib/jruby/lint/github.crt +76 -0
- data/lib/jruby/lint/libraries.rb +107 -0
- data/lib/jruby/lint/project.rb +56 -0
- data/lib/jruby/lint/reporters.rb +35 -0
- data/lib/jruby/lint/version.rb +5 -0
- data/spec/fixtures/C-Extension-Alternatives.html +557 -0
- data/spec/jruby/lint/ast_spec.rb +23 -0
- data/spec/jruby/lint/checkers_spec.rb +135 -0
- data/spec/jruby/lint/cli_spec.rb +66 -0
- data/spec/jruby/lint/collectors_spec.rb +34 -0
- data/spec/jruby/lint/finding_spec.rb +31 -0
- data/spec/jruby/lint/libraries_spec.rb +56 -0
- data/spec/jruby/lint/project_spec.rb +77 -0
- data/spec/jruby/lint/reporters_spec.rb +42 -0
- data/spec/jruby/lint/version_spec.rb +6 -0
- data/spec/spec_helper.rb +30 -0
- metadata +194 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'term/ansicolor'
|
2
|
+
|
3
|
+
module JRuby::Lint
|
4
|
+
module Reporters
|
5
|
+
class Text
|
6
|
+
def initialize(project, output)
|
7
|
+
@tags, @output = project.tags, output
|
8
|
+
end
|
9
|
+
|
10
|
+
def report(findings)
|
11
|
+
findings.each do |finding|
|
12
|
+
puts finding unless (@tags & finding.tags).empty?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def puts(finding)
|
17
|
+
@output.puts finding.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class ANSIColor < Text
|
22
|
+
include Term::ANSIColor
|
23
|
+
def puts(finding)
|
24
|
+
msg = if finding.tags.include?("error")
|
25
|
+
red(finding.to_s)
|
26
|
+
elsif finding.tags.include?("warning")
|
27
|
+
yellow(finding.to_s)
|
28
|
+
else
|
29
|
+
finding.to_s
|
30
|
+
end
|
31
|
+
@output.puts msg
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,557 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
<!DOCTYPE html>
|
7
|
+
<html>
|
8
|
+
<head>
|
9
|
+
<meta charset='utf-8'>
|
10
|
+
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
11
|
+
<title>C Extension Alternatives - GitHub</title>
|
12
|
+
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub" />
|
13
|
+
<link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub" />
|
14
|
+
|
15
|
+
<link href="https://d3nwyuy0nl342s.cloudfront.net/ba26f6a198e5e881573c321692d2255635b24eb8/stylesheets/bundle_github.css" media="screen" rel="stylesheet" type="text/css" />
|
16
|
+
|
17
|
+
|
18
|
+
<script type="text/javascript">
|
19
|
+
if (typeof console == "undefined" || typeof console.log == "undefined")
|
20
|
+
console = { log: function() {} }
|
21
|
+
</script>
|
22
|
+
<script type="text/javascript" charset="utf-8">
|
23
|
+
var GitHub = {
|
24
|
+
assetHost: 'https://d3nwyuy0nl342s.cloudfront.net'
|
25
|
+
}
|
26
|
+
var github_user = null
|
27
|
+
|
28
|
+
</script>
|
29
|
+
<script src="https://d3nwyuy0nl342s.cloudfront.net/ba26f6a198e5e881573c321692d2255635b24eb8/javascripts/jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
|
30
|
+
<script src="https://d3nwyuy0nl342s.cloudfront.net/ba26f6a198e5e881573c321692d2255635b24eb8/javascripts/bundle_common.js" type="text/javascript"></script>
|
31
|
+
<script src="https://d3nwyuy0nl342s.cloudfront.net/ba26f6a198e5e881573c321692d2255635b24eb8/javascripts/bundle_github.js" type="text/javascript"></script>
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
<script type="text/javascript" charset="utf-8">
|
36
|
+
GitHub.spy({
|
37
|
+
repo: "jruby/jruby"
|
38
|
+
})
|
39
|
+
</script>
|
40
|
+
|
41
|
+
|
42
|
+
<link href="https://github.com/jruby/jruby/commits/master.atom" rel="alternate" title="Recent Commits to jruby:master" type="application/atom+xml" />
|
43
|
+
<script src="https://d3nwyuy0nl342s.cloudfront.net/ba26f6a198e5e881573c321692d2255635b24eb8/javascripts/bundle_wiki.js" type="text/javascript"></script>
|
44
|
+
|
45
|
+
<script src="/javascripts/other/MathJax/MathJax.js" type="text/javascript">
|
46
|
+
if (window.location.protocol == "https:") {
|
47
|
+
MathJax.OutputJax.fontDir = "https://" + document.location.host + "/assets/MathJax/fonts"
|
48
|
+
} else {
|
49
|
+
MathJax.OutputJax.fontDir = "http://" + document.location.host + "/assets/MathJax/fonts"
|
50
|
+
}
|
51
|
+
MathJax.Hub.Config({
|
52
|
+
jax: ["input/TeX", "output/HTML-CSS"]
|
53
|
+
})
|
54
|
+
</script>
|
55
|
+
|
56
|
+
<meta name="description" content="jruby - JRuby, an implementation of Ruby on the JVM" />
|
57
|
+
<script type="text/javascript">
|
58
|
+
GitHub.nameWithOwner = GitHub.nameWithOwner || "jruby/jruby";
|
59
|
+
GitHub.currentRef = 'master';
|
60
|
+
GitHub.commitSHA = "21565774f8800b3df6f839505365d340b573f253";
|
61
|
+
GitHub.currentPath = '';
|
62
|
+
GitHub.masterBranch = "master";
|
63
|
+
|
64
|
+
|
65
|
+
</script>
|
66
|
+
|
67
|
+
|
68
|
+
<script type="text/javascript">
|
69
|
+
var _gaq = _gaq || [];
|
70
|
+
_gaq.push(['_setAccount', 'UA-3769691-2']);
|
71
|
+
_gaq.push(['_setDomainName', 'none']);
|
72
|
+
_gaq.push(['_trackPageview']);
|
73
|
+
_gaq.push(['_trackPageLoadTime']);
|
74
|
+
(function() {
|
75
|
+
var ga = document.createElement('script');
|
76
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
77
|
+
ga.setAttribute('async', 'true');
|
78
|
+
document.documentElement.firstChild.appendChild(ga);
|
79
|
+
})();
|
80
|
+
</script>
|
81
|
+
|
82
|
+
|
83
|
+
</head>
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
<body class="logged_out env-production">
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
<div class="subnavd" id="main">
|
101
|
+
<div id="header" class="true">
|
102
|
+
|
103
|
+
<a class="logo boring" href="https://github.com">
|
104
|
+
<img alt="github" class="default" src="https://d3nwyuy0nl342s.cloudfront.net/images/modules/header/logov3.png" />
|
105
|
+
<!--[if (gt IE 8)|!(IE)]><!-->
|
106
|
+
<img alt="github" class="hover" src="https://d3nwyuy0nl342s.cloudfront.net/images/modules/header/logov3-hover.png" />
|
107
|
+
<!--<![endif]-->
|
108
|
+
</a>
|
109
|
+
|
110
|
+
|
111
|
+
<div class="topsearch">
|
112
|
+
|
113
|
+
<ul class="nav logged_out">
|
114
|
+
<li class="pricing"><a href="/plans">Pricing and Signup</a></li>
|
115
|
+
<li class="explore"><a href="/explore">Explore GitHub</a></li>
|
116
|
+
<li class="features"><a href="/features">Features</a></li>
|
117
|
+
<li class="blog"><a href="/blog">Blog</a></li>
|
118
|
+
<li class="login"><a href="/login?return_to=%2Fjruby%2Fjruby%2Fwiki%2FC-Extension-Alternatives">Login</a></li>
|
119
|
+
</ul>
|
120
|
+
|
121
|
+
</div>
|
122
|
+
|
123
|
+
</div>
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
<div class="site">
|
129
|
+
<div class="pagehead repohead vis-public emptyrepohead shortdetails instapaper_ignore readability-menu">
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
<div class="title-actions-bar">
|
134
|
+
<h1>
|
135
|
+
<a href="/jruby">jruby</a> / <strong><a href="/jruby/jruby">jruby</a></strong>
|
136
|
+
|
137
|
+
|
138
|
+
</h1>
|
139
|
+
|
140
|
+
|
141
|
+
<ul class="actions">
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
<li class="for-owner" style="display:none"><a href="/jruby/jruby/admin" class="minibutton btn-admin "><span><span class="icon"></span>Admin</span></a></li>
|
146
|
+
<li>
|
147
|
+
<a href="/jruby/jruby/toggle_watch" class="minibutton btn-watch " id="watch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'f0cc17b027c2396c32ee54c98c3537e3299e335c'); f.appendChild(s);f.submit();return false;" style="display:none"><span><span class="icon"></span>Watch</span></a>
|
148
|
+
<a href="/jruby/jruby/toggle_watch" class="minibutton btn-watch " id="unwatch_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'f0cc17b027c2396c32ee54c98c3537e3299e335c'); f.appendChild(s);f.submit();return false;" style="display:none"><span><span class="icon"></span>Unwatch</span></a>
|
149
|
+
</li>
|
150
|
+
|
151
|
+
|
152
|
+
<li class="for-notforked" style="display:none"><a href="/jruby/jruby/fork" class="minibutton btn-fork " id="fork_button" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'f0cc17b027c2396c32ee54c98c3537e3299e335c'); f.appendChild(s);f.submit();return false;"><span><span class="icon"></span>Fork</span></a></li>
|
153
|
+
<li class="for-hasfork" style="display:none"><a href="#" class="minibutton btn-fork " id="your_fork_button"><span><span class="icon"></span>Your Fork</span></a></li>
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
<li class="repostats">
|
162
|
+
<ul class="repo-stats">
|
163
|
+
<li class="watchers"><a href="/jruby/jruby/watchers" title="Watchers" class="tooltipped downwards">497</a></li>
|
164
|
+
<li class="forks"><a href="/jruby/jruby/network" title="Forks" class="tooltipped downwards">109</a></li>
|
165
|
+
</ul>
|
166
|
+
</li>
|
167
|
+
</ul>
|
168
|
+
|
169
|
+
</div>
|
170
|
+
|
171
|
+
|
172
|
+
<ul class="tabs">
|
173
|
+
<li><a href="/jruby/jruby" highlight="repo_source">Source</a></li>
|
174
|
+
<li><a href="/jruby/jruby/commits/master" highlight="repo_commits">Commits</a></li>
|
175
|
+
<li><a href="/jruby/jruby/network" highlight="repo_network">Network</a></li>
|
176
|
+
<li><a href="/jruby/jruby/pulls" highlight="repo_pulls">Pull Requests (5)</a></li>
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
<li><a href="/jruby/jruby/wiki" class="selected" highlight="repo_wiki">Wiki (117)</a></li>
|
183
|
+
|
184
|
+
<li><a href="/jruby/jruby/graphs" highlight="repo_graphs">Graphs</a></li>
|
185
|
+
|
186
|
+
<li class="contextswitch nochoices">
|
187
|
+
<span class="toggle leftwards" >
|
188
|
+
<em>Branch:</em>
|
189
|
+
<code>master</code>
|
190
|
+
</span>
|
191
|
+
</li>
|
192
|
+
</ul>
|
193
|
+
|
194
|
+
<div style="display:none" id="pl-description"><p><em class="placeholder">click here to add a description</em></p></div>
|
195
|
+
<div style="display:none" id="pl-homepage"><p><em class="placeholder">click here to add a homepage</em></p></div>
|
196
|
+
|
197
|
+
|
198
|
+
|
199
|
+
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
<div class="subnav-bar">
|
204
|
+
<ul>
|
205
|
+
<li><a href="/jruby/jruby/wiki">Home</a></li>
|
206
|
+
<li><a href="/jruby/jruby/wiki/_pages">Pages</a></li>
|
207
|
+
<li><a href="/jruby/jruby/wiki/_history">Wiki History</a></li>
|
208
|
+
<li><a href="/jruby/jruby/wiki/_access">Git Access</a></li>
|
209
|
+
</ul>
|
210
|
+
</div>
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
|
218
|
+
</div><!-- /.pagehead -->
|
219
|
+
|
220
|
+
|
221
|
+
|
222
|
+
<div id="repos">
|
223
|
+
|
224
|
+
|
225
|
+
|
226
|
+
<script type="text/javascript">
|
227
|
+
GitHub.downloadRepo = '/jruby/jruby/archives/master'
|
228
|
+
GitHub.revType = "master"
|
229
|
+
|
230
|
+
GitHub.repoName = "jruby"
|
231
|
+
GitHub.controllerName = "wiki"
|
232
|
+
GitHub.actionName = "show"
|
233
|
+
GitHub.currentAction = "wiki#show"
|
234
|
+
|
235
|
+
|
236
|
+
GitHub.loggedIn = false
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
</script>
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
</div>
|
248
|
+
<div class="flash-messages"></div>
|
249
|
+
|
250
|
+
|
251
|
+
<div id="wiki-wrapper" class="page">
|
252
|
+
<div id="head">
|
253
|
+
<h1 class="instapaper_title">C Extension Alternatives</h1>
|
254
|
+
<ul class="actions readability-extra">
|
255
|
+
<li class="gollum-minibutton"><a href="/jruby/jruby/wiki/C-Extension-Alternatives/_history"
|
256
|
+
class="action-page-history">
|
257
|
+
Page History
|
258
|
+
</a></li>
|
259
|
+
</ul>
|
260
|
+
</div>
|
261
|
+
<div id="wiki-content">
|
262
|
+
<div class="wrap">
|
263
|
+
<div id="wiki-body" class="gollum-markdown-content instapaper_body">
|
264
|
+
<div id="template">
|
265
|
+
<p>JRuby versions prior to 1.6 did not support Ruby C extensions, and even in 1.6 the support is still "in development" and considered experimental. This page lists common C extensions and non-C alternatives you can use to replace them.</p>
|
266
|
+
|
267
|
+
<ul>
|
268
|
+
<li><p><strong><a href="https://github.com/rtomayko/rdiscount">RDiscount</a></strong> - Use <a href="https://github.com/nex3/maruku">Maruku</a> (pure Ruby) or <a href="https://github.com/nate/markdown_j">markdown_j</a> (wrapper around a Java library)</p></li>
|
269
|
+
<li><p><strong><a href="https://github.com/rmagick/rmagick">RMagick</a></strong> - Try <a href="https://github.com/Serabe/RMagick4J">RMagick4J</a> (implements ImageMagick functionality in Java) or preferably use alternatives <a href="https://github.com/probablycorey/mini_magick">mini_magick</a> & <a href="https://github.com/aseldawy/quick_magick">quick_magick</a>. For simple resizing, cropping, greyscaling, etc look at <a href="https://github.com/jruby/image_voodoo">image_voodoo</a>.</p></li>
|
270
|
+
<li><p><strong><a href="http://unicorn.bogomips.org/">Unicorn</a></strong> - Try any one of the following <a class="internal present" href="/jruby/jruby/wiki/Servers">JRuby-based servers</a>: <a href="https://github.com/trinidad/trinidad">Trinidad</a>, <a href="https://github.com/matadon/mizuno">Mizuno</a>, <a href="https://github.com/strobecorp/kirk">Kirk</a> or <a href="http://torquebox.org/">TorqueBox</a>.</p></li>
|
271
|
+
<li><p><strong><a href="http://code.macournoyer.com/thin/">Thin</a></strong> - Thin might compile and run but is not recommended. Try any one of the following <a class="internal present" href="/jruby/jruby/wiki/Servers">JRuby-based servers</a>: <a href="https://github.com/trinidad/trinidad">Trinidad</a>, <a href="https://github.com/matadon/mizuno">Mizuno</a>, <a href="https://github.com/strobecorp/kirk">Kirk</a> or <a href="http://torquebox.org/">TorqueBox</a>.</p></li>
|
272
|
+
<li><p><strong><a href="https://github.com/dbalatero/typhoeus">Typhoeus</a></strong> - The C extension <a href="https://github.com/dbalatero/typhoeus/issues/65">doesn't currently compile</a>. There's no equivalent library for JRuby, but you might try any of the pure-Ruby HTTP clients (<code>net/http</code>, httpclient, etc.). There are also several Java HTTP client libraries that will work (<a href="http://hc.apache.org/httpcomponents-client-ga/">Apache HttpClient</a>, <a href="http://download.oracle.com/javase/1,5.0/docs/api/java/net/HttpURLConnection.html">HttpURLConnection</a>, etc).</p></li>
|
273
|
+
<li><p><strong>mysql</strong> - Use <a href="https://github.com/nicksieger/activerecord-jdbc-adapter">activerecord-jdbc-adapter</a> instead along with <code>jdbc-mysql</code>.</p></li>
|
274
|
+
<li><p><strong>mysql2</strong> - Use <a href="https://github.com/nicksieger/activerecord-jdbc-adapter">activerecord-jdbc-adapter</a> instead along with <code>jdbc-mysql</code>.</p></li>
|
275
|
+
<li><p><strong>sqlite3</strong> - Use <a href="https://github.com/nicksieger/activerecord-jdbc-adapter">activerecord-jdbc-adapter</a> instead along with <code>jdbc-sqlite3</code>.</p></li>
|
276
|
+
<li><p><strong><a href="http://nokogiri.org/">Nokogiri</a></strong> - For best results, use the pure-Java version of Nokogiri (1.5 or greater).</p></li>
|
277
|
+
<li><p><strong><a href="https://github.com/brianmario/yajl-ruby">yajl-ruby</a></strong> - Try <code>json</code> or <code>json_pure</code> instead. Unfortunately there is no known equivalent JSON stream parser.</p></li>
|
278
|
+
<li><p><strong><a href="https://github.com/mongodb/mongo-ruby-driver">bson_ext</a></strong> - <code>bson_ext</code> isn't used with JRuby. Instead, some native Java extensions are bundled with the <code>bson</code> gem.</p></li>
|
279
|
+
<li><p><strong><a href="http://www.ruby-doc.org/stdlib/libdoc/win32ole/rdoc/index.html">win32ole</a></strong> - Use the <code>jruby-win32ole</code> gem (preinstalled in JRuby's Windows installer).</p></li>
|
280
|
+
</ul><p>Please add to this list with your findings.</p>
|
281
|
+
|
282
|
+
<p><em>Note that the <a href="https://github.com/jruby/jruby-lint">JRuby-Lint</a> gem parses the contents of the list above to use for its Ruby gem checker. In order for JRuby-Lint to use the information, please adhere to the <code>gem_name - instructions</code> format.</em></p>
|
283
|
+
</div>
|
284
|
+
</div>
|
285
|
+
|
286
|
+
|
287
|
+
</div>
|
288
|
+
|
289
|
+
</div>
|
290
|
+
<div id="gollum-footer">
|
291
|
+
<p id="last-edit">
|
292
|
+
Last edited by headius, <abbr class="relatize" title="2011-05-15 17:25:54">Sun May 15 17:25:54 -0700 2011</abbr>
|
293
|
+
</p>
|
294
|
+
<p id="delete-link">
|
295
|
+
<a href="/jruby/jruby/wiki/C-Extension-Alternatives" onclick="if (confirm('Are you sure you want to delete this page?')) { var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'f0cc17b027c2396c32ee54c98c3537e3299e335c'); f.appendChild(s);f.submit(); };return false;"><span>Delete this Page</span></a>
|
296
|
+
</p>
|
297
|
+
</div>
|
298
|
+
</div>
|
299
|
+
|
300
|
+
|
301
|
+
</div>
|
302
|
+
|
303
|
+
|
304
|
+
</div>
|
305
|
+
|
306
|
+
<div id="footer" class="clearfix">
|
307
|
+
<div class="site">
|
308
|
+
<div class="sponsor">
|
309
|
+
<a href="http://www.rackspace.com" class="logo">
|
310
|
+
<img alt="Dedicated Server" height="36" src="https://d3nwyuy0nl342s.cloudfront.net/images/modules/footer/rackspace_logo.png?v2" width="38" />
|
311
|
+
</a>
|
312
|
+
Powered by the <a href="http://www.rackspace.com ">Dedicated
|
313
|
+
Servers</a> and<br/> <a href="http://www.rackspacecloud.com">Cloud
|
314
|
+
Computing</a> of Rackspace Hosting<span>®</span>
|
315
|
+
</div>
|
316
|
+
|
317
|
+
<ul class="links">
|
318
|
+
<li class="blog"><a href="https://github.com/blog">Blog</a></li>
|
319
|
+
<li><a href="https://github.com/contact">Support</a></li>
|
320
|
+
<li><a href="https://github.com/training">Training</a></li>
|
321
|
+
<li><a href="http://jobs.github.com">Job Board</a></li>
|
322
|
+
<li><a href="http://shop.github.com">Shop</a></li>
|
323
|
+
<li><a href="https://github.com/contact">Contact</a></li>
|
324
|
+
<li><a href="http://developer.github.com">API</a></li>
|
325
|
+
<li><a href="http://status.github.com">Status</a></li>
|
326
|
+
</ul>
|
327
|
+
<ul class="sosueme">
|
328
|
+
<li class="main">© 2011 <span id="_rrt" title="0.40823s from fe4.rs.github.com">GitHub</span> Inc. All rights reserved.</li>
|
329
|
+
<li><a href="/site/terms">Terms of Service</a></li>
|
330
|
+
<li><a href="/site/privacy">Privacy</a></li>
|
331
|
+
<li><a href="https://github.com/security">Security</a></li>
|
332
|
+
</ul>
|
333
|
+
</div>
|
334
|
+
</div><!-- /#footer -->
|
335
|
+
|
336
|
+
<script>window._auth_token = "f0cc17b027c2396c32ee54c98c3537e3299e335c"</script>
|
337
|
+
|
338
|
+
|
339
|
+
<div id="keyboard_shortcuts_pane" class="instapaper_ignore readability-extra" style="display:none">
|
340
|
+
<h2>Keyboard Shortcuts <small><a href="#" class="js-see-all-keyboard-shortcuts">(see all)</a></small></h2>
|
341
|
+
|
342
|
+
<div class="columns threecols">
|
343
|
+
<div class="column first">
|
344
|
+
<h3>Site wide shortcuts</h3>
|
345
|
+
<dl class="keyboard-mappings">
|
346
|
+
<dt>s</dt>
|
347
|
+
<dd>Focus site search</dd>
|
348
|
+
</dl>
|
349
|
+
<dl class="keyboard-mappings">
|
350
|
+
<dt>?</dt>
|
351
|
+
<dd>Bring up this help dialog</dd>
|
352
|
+
</dl>
|
353
|
+
</div><!-- /.column.first -->
|
354
|
+
|
355
|
+
<div class="column middle" style='display:none'>
|
356
|
+
<h3>Commit list</h3>
|
357
|
+
<dl class="keyboard-mappings">
|
358
|
+
<dt>j</dt>
|
359
|
+
<dd>Move selected down</dd>
|
360
|
+
</dl>
|
361
|
+
<dl class="keyboard-mappings">
|
362
|
+
<dt>k</dt>
|
363
|
+
<dd>Move selected up</dd>
|
364
|
+
</dl>
|
365
|
+
<dl class="keyboard-mappings">
|
366
|
+
<dt>t</dt>
|
367
|
+
<dd>Open tree</dd>
|
368
|
+
</dl>
|
369
|
+
<dl class="keyboard-mappings">
|
370
|
+
<dt>p</dt>
|
371
|
+
<dd>Open parent</dd>
|
372
|
+
</dl>
|
373
|
+
<dl class="keyboard-mappings">
|
374
|
+
<dt>c <em>or</em> o <em>or</em> enter</dt>
|
375
|
+
<dd>Open commit</dd>
|
376
|
+
</dl>
|
377
|
+
<dl class="keyboard-mappings">
|
378
|
+
<dt>y</dt>
|
379
|
+
<dd>Expand URL to its canonical form</dd>
|
380
|
+
</dl>
|
381
|
+
</div><!-- /.column.first -->
|
382
|
+
|
383
|
+
<div class="column last" style='display:none'>
|
384
|
+
<h3>Pull request list</h3>
|
385
|
+
<dl class="keyboard-mappings">
|
386
|
+
<dt>j</dt>
|
387
|
+
<dd>Move selected down</dd>
|
388
|
+
</dl>
|
389
|
+
<dl class="keyboard-mappings">
|
390
|
+
<dt>k</dt>
|
391
|
+
<dd>Move selected up</dd>
|
392
|
+
</dl>
|
393
|
+
<dl class="keyboard-mappings">
|
394
|
+
<dt>o <em>or</em> enter</dt>
|
395
|
+
<dd>Open issue</dd>
|
396
|
+
</dl>
|
397
|
+
</div><!-- /.columns.last -->
|
398
|
+
|
399
|
+
</div><!-- /.columns.equacols -->
|
400
|
+
|
401
|
+
<div style='display:none'>
|
402
|
+
<div class="rule"></div>
|
403
|
+
|
404
|
+
<h3>Issues</h3>
|
405
|
+
|
406
|
+
<div class="columns threecols">
|
407
|
+
<div class="column first">
|
408
|
+
<dl class="keyboard-mappings">
|
409
|
+
<dt>j</dt>
|
410
|
+
<dd>Move selected down</dd>
|
411
|
+
</dl>
|
412
|
+
<dl class="keyboard-mappings">
|
413
|
+
<dt>k</dt>
|
414
|
+
<dd>Move selected up</dd>
|
415
|
+
</dl>
|
416
|
+
<dl class="keyboard-mappings">
|
417
|
+
<dt>x</dt>
|
418
|
+
<dd>Toggle select target</dd>
|
419
|
+
</dl>
|
420
|
+
<dl class="keyboard-mappings">
|
421
|
+
<dt>o <em>or</em> enter</dt>
|
422
|
+
<dd>Open issue</dd>
|
423
|
+
</dl>
|
424
|
+
</div><!-- /.column.first -->
|
425
|
+
<div class="column middle">
|
426
|
+
<dl class="keyboard-mappings">
|
427
|
+
<dt>I</dt>
|
428
|
+
<dd>Mark selected as read</dd>
|
429
|
+
</dl>
|
430
|
+
<dl class="keyboard-mappings">
|
431
|
+
<dt>U</dt>
|
432
|
+
<dd>Mark selected as unread</dd>
|
433
|
+
</dl>
|
434
|
+
<dl class="keyboard-mappings">
|
435
|
+
<dt>e</dt>
|
436
|
+
<dd>Close selected</dd>
|
437
|
+
</dl>
|
438
|
+
<dl class="keyboard-mappings">
|
439
|
+
<dt>y</dt>
|
440
|
+
<dd>Remove selected from view</dd>
|
441
|
+
</dl>
|
442
|
+
</div><!-- /.column.middle -->
|
443
|
+
<div class="column last">
|
444
|
+
<dl class="keyboard-mappings">
|
445
|
+
<dt>c</dt>
|
446
|
+
<dd>Create issue</dd>
|
447
|
+
</dl>
|
448
|
+
<dl class="keyboard-mappings">
|
449
|
+
<dt>l</dt>
|
450
|
+
<dd>Create label</dd>
|
451
|
+
</dl>
|
452
|
+
<dl class="keyboard-mappings">
|
453
|
+
<dt>i</dt>
|
454
|
+
<dd>Back to inbox</dd>
|
455
|
+
</dl>
|
456
|
+
<dl class="keyboard-mappings">
|
457
|
+
<dt>u</dt>
|
458
|
+
<dd>Back to issues</dd>
|
459
|
+
</dl>
|
460
|
+
<dl class="keyboard-mappings">
|
461
|
+
<dt>/</dt>
|
462
|
+
<dd>Focus issues search</dd>
|
463
|
+
</dl>
|
464
|
+
</div>
|
465
|
+
</div>
|
466
|
+
</div>
|
467
|
+
|
468
|
+
<div style='display:none'>
|
469
|
+
<div class="rule"></div>
|
470
|
+
|
471
|
+
<h3>Network Graph</h3>
|
472
|
+
<div class="columns equacols">
|
473
|
+
<div class="column first">
|
474
|
+
<dl class="keyboard-mappings">
|
475
|
+
<dt><span class="badmono">←</span> <em>or</em> h</dt>
|
476
|
+
<dd>Scroll left</dd>
|
477
|
+
</dl>
|
478
|
+
<dl class="keyboard-mappings">
|
479
|
+
<dt><span class="badmono">→</span> <em>or</em> l</dt>
|
480
|
+
<dd>Scroll right</dd>
|
481
|
+
</dl>
|
482
|
+
<dl class="keyboard-mappings">
|
483
|
+
<dt><span class="badmono">↑</span> <em>or</em> k</dt>
|
484
|
+
<dd>Scroll up</dd>
|
485
|
+
</dl>
|
486
|
+
<dl class="keyboard-mappings">
|
487
|
+
<dt><span class="badmono">↓</span> <em>or</em> j</dt>
|
488
|
+
<dd>Scroll down</dd>
|
489
|
+
</dl>
|
490
|
+
<dl class="keyboard-mappings">
|
491
|
+
<dt>t</dt>
|
492
|
+
<dd>Toggle visibility of head labels</dd>
|
493
|
+
</dl>
|
494
|
+
</div><!-- /.column.first -->
|
495
|
+
<div class="column last">
|
496
|
+
<dl class="keyboard-mappings">
|
497
|
+
<dt>shift <span class="badmono">←</span> <em>or</em> shift h</dt>
|
498
|
+
<dd>Scroll all the way left</dd>
|
499
|
+
</dl>
|
500
|
+
<dl class="keyboard-mappings">
|
501
|
+
<dt>shift <span class="badmono">→</span> <em>or</em> shift l</dt>
|
502
|
+
<dd>Scroll all the way right</dd>
|
503
|
+
</dl>
|
504
|
+
<dl class="keyboard-mappings">
|
505
|
+
<dt>shift <span class="badmono">↑</span> <em>or</em> shift k</dt>
|
506
|
+
<dd>Scroll all the way up</dd>
|
507
|
+
</dl>
|
508
|
+
<dl class="keyboard-mappings">
|
509
|
+
<dt>shift <span class="badmono">↓</span> <em>or</em> shift j</dt>
|
510
|
+
<dd>Scroll all the way down</dd>
|
511
|
+
</dl>
|
512
|
+
</div><!-- /.column.last -->
|
513
|
+
</div>
|
514
|
+
</div>
|
515
|
+
|
516
|
+
<div style='display:none'>
|
517
|
+
<div class="rule"></div>
|
518
|
+
<div class="columns threecols">
|
519
|
+
<div class="column first" style='display:none'>
|
520
|
+
<h3>Source Code Browsing</h3>
|
521
|
+
<dl class="keyboard-mappings">
|
522
|
+
<dt>t</dt>
|
523
|
+
<dd>Activates the file finder</dd>
|
524
|
+
</dl>
|
525
|
+
<dl class="keyboard-mappings">
|
526
|
+
<dt>l</dt>
|
527
|
+
<dd>Jump to line</dd>
|
528
|
+
</dl>
|
529
|
+
<dl class="keyboard-mappings">
|
530
|
+
<dt>y</dt>
|
531
|
+
<dd>Expand URL to its canonical form</dd>
|
532
|
+
</dl>
|
533
|
+
</div>
|
534
|
+
</div>
|
535
|
+
</div>
|
536
|
+
</div>
|
537
|
+
|
538
|
+
|
539
|
+
|
540
|
+
<!--[if IE 8]>
|
541
|
+
<script type="text/javascript" charset="utf-8">
|
542
|
+
$(document.body).addClass("ie8")
|
543
|
+
</script>
|
544
|
+
<![endif]-->
|
545
|
+
|
546
|
+
<!--[if IE 7]>
|
547
|
+
<script type="text/javascript" charset="utf-8">
|
548
|
+
$(document.body).addClass("ie7")
|
549
|
+
</script>
|
550
|
+
<![endif]-->
|
551
|
+
|
552
|
+
|
553
|
+
<script type='text/javascript'></script>
|
554
|
+
|
555
|
+
</body>
|
556
|
+
</html>
|
557
|
+
|