ghoul 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +39 -0
- data/LICENSE +20 -0
- data/README.md +46 -0
- data/Rakefile +1 -0
- data/bin/ghoul +19 -0
- data/config.ru +30 -0
- data/ghoul.gemspec +51 -0
- data/lib/ghoul/app.rb +119 -0
- data/lib/ghoul/lib/helpers.rb +64 -0
- data/lib/ghoul/lib/repository.rb +41 -0
- data/lib/ghoul/lib/url_helpers.rb +53 -0
- data/lib/ghoul/public/css/buttons.css +38 -0
- data/lib/ghoul/public/css/coderay.css +136 -0
- data/lib/ghoul/public/css/github-buttons.css +393 -0
- data/lib/ghoul/public/flash/clippy.swf +0 -0
- data/lib/ghoul/public/images/bg.png +0 -0
- data/lib/ghoul/public/images/big_logo.png +0 -0
- data/lib/ghoul/public/images/dir.png +0 -0
- data/lib/ghoul/public/images/gh-icons.png +0 -0
- data/lib/ghoul/public/images/logo-hover.png +0 -0
- data/lib/ghoul/public/images/logo.png +0 -0
- data/lib/ghoul/public/images/txt.png +0 -0
- data/lib/ghoul/views/404.erb +10 -0
- data/lib/ghoul/views/app.sass +316 -0
- data/lib/ghoul/views/blob.erb +11 -0
- data/lib/ghoul/views/commits.erb +11 -0
- data/lib/ghoul/views/diff.erb +16 -0
- data/lib/ghoul/views/error.erb +6 -0
- data/lib/ghoul/views/layout.erb +25 -0
- data/lib/ghoul/views/new_repo.erb +16 -0
- data/lib/ghoul/views/no_commits.erb +34 -0
- data/lib/ghoul/views/partials/_breadcrumbs.erb +6 -0
- data/lib/ghoul/views/partials/_commit.erb +10 -0
- data/lib/ghoul/views/partials/_footer.erb +5 -0
- data/lib/ghoul/views/partials/_repo_header.erb +17 -0
- data/lib/ghoul/views/partials/_repo_top_bar.erb +8 -0
- data/lib/ghoul/views/repo_settings.erb +18 -0
- data/lib/ghoul/views/repositories.erb +73 -0
- data/lib/ghoul/views/setup_repos_path.erb +8 -0
- data/lib/ghoul/views/tree.erb +17 -0
- data/lib/ghoul.rb +24 -0
- data/lib/server.rb +39 -0
- data/lib/version.rb +3 -0
- data/sample +0 -0
- data/spec/ghoul_helpers_spec.rb +62 -0
- data/spec/spec_helper.rb +0 -0
- data/spec/url_helper_spec.rb +56 -0
- metadata +195 -0
@@ -0,0 +1,316 @@
|
|
1
|
+
*
|
2
|
+
:padding 0
|
3
|
+
:margin 0
|
4
|
+
|
5
|
+
body
|
6
|
+
:font-family "Lucida Grande","Lucida Sans Unicode",Helvetica,sans-serif,Verdana,Arial
|
7
|
+
:font-size 13px
|
8
|
+
:background url(data:image/png;base64,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)
|
9
|
+
|
10
|
+
.container
|
11
|
+
:width 810px
|
12
|
+
:margin 0 auto
|
13
|
+
|
14
|
+
.gravatar
|
15
|
+
:border 2px solid #f1f1f1
|
16
|
+
:float left
|
17
|
+
:margin-right 10px
|
18
|
+
:width 30px
|
19
|
+
:height 30px
|
20
|
+
|
21
|
+
#page
|
22
|
+
:float left
|
23
|
+
:width 760px
|
24
|
+
:padding 20px
|
25
|
+
:background #fff
|
26
|
+
:border 5px solid #f1f1f1
|
27
|
+
:margin-top 30px
|
28
|
+
:border-radius 10px
|
29
|
+
|
30
|
+
#header
|
31
|
+
:float left
|
32
|
+
:width 100%
|
33
|
+
:margin-top 20px
|
34
|
+
a#logo
|
35
|
+
:float left
|
36
|
+
:width 139px
|
37
|
+
:height 60px
|
38
|
+
:background url(/images/logo.png)
|
39
|
+
:text-indent -9999px
|
40
|
+
ul
|
41
|
+
:float right
|
42
|
+
:width auto
|
43
|
+
:margin-top 20px
|
44
|
+
:margin-right 20px
|
45
|
+
li
|
46
|
+
:float right
|
47
|
+
:width auto
|
48
|
+
:list-style none
|
49
|
+
:margin-left 30px
|
50
|
+
a
|
51
|
+
:color #fff
|
52
|
+
:font-size 22px
|
53
|
+
:text-decoration none
|
54
|
+
|
55
|
+
#footer
|
56
|
+
:float left
|
57
|
+
:width 100%
|
58
|
+
:padding 20px 0
|
59
|
+
:text-align center
|
60
|
+
p
|
61
|
+
:margin-top 10px
|
62
|
+
:color #666
|
63
|
+
a
|
64
|
+
:color #777
|
65
|
+
|
66
|
+
h1
|
67
|
+
:float left
|
68
|
+
:margin 20px 0
|
69
|
+
|
70
|
+
#commits
|
71
|
+
:float left
|
72
|
+
//:margin-top 20px
|
73
|
+
.commit
|
74
|
+
:float left
|
75
|
+
:border 1px solid #ccc
|
76
|
+
:padding 5px
|
77
|
+
:width 748px
|
78
|
+
:background #f6f9fe
|
79
|
+
:margin-bottom 20px
|
80
|
+
&.indent
|
81
|
+
:background #fff
|
82
|
+
:width 720px
|
83
|
+
:margin-left 28px
|
84
|
+
.data
|
85
|
+
:width 668px
|
86
|
+
.diff a
|
87
|
+
:float right
|
88
|
+
:color #777
|
89
|
+
:text-decoration none
|
90
|
+
&:hover
|
91
|
+
:text-decoration underline
|
92
|
+
.commit_hash
|
93
|
+
:font-size 10px
|
94
|
+
:float left
|
95
|
+
:width 100%
|
96
|
+
:margin-top 10px
|
97
|
+
.data
|
98
|
+
:float left
|
99
|
+
:width 696px
|
100
|
+
.meta
|
101
|
+
:float left
|
102
|
+
:width 100%
|
103
|
+
:margin-top 3px
|
104
|
+
:font-size 12px
|
105
|
+
.name
|
106
|
+
:float left
|
107
|
+
.committed_date
|
108
|
+
:float left
|
109
|
+
:color #888
|
110
|
+
:margin-left 10px
|
111
|
+
a.mailto
|
112
|
+
:color #888
|
113
|
+
:text-decoration none
|
114
|
+
&:hover
|
115
|
+
:text-decoration underline
|
116
|
+
.message
|
117
|
+
:font-size 13px
|
118
|
+
:font-weight bold
|
119
|
+
:float left
|
120
|
+
:width 100%
|
121
|
+
a
|
122
|
+
:color #333
|
123
|
+
:text-decoration none
|
124
|
+
&:hover
|
125
|
+
:text-decoration underline
|
126
|
+
|
127
|
+
#tree
|
128
|
+
:float left
|
129
|
+
:width 100%
|
130
|
+
:background #fff
|
131
|
+
:border-top 1px solid #ccc
|
132
|
+
.tree
|
133
|
+
.name
|
134
|
+
:background url(/images/dir.png) 8px center no-repeat
|
135
|
+
.blob
|
136
|
+
.name
|
137
|
+
:background url(/images/txt.png) 8px center no-repeat
|
138
|
+
.blob, .tree
|
139
|
+
:float left
|
140
|
+
:width 760px
|
141
|
+
:padding 10px 0
|
142
|
+
:border 1px solid #ccc
|
143
|
+
:border-top none
|
144
|
+
:text-indent 20px
|
145
|
+
:background -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(47%,#f6f6f6), color-stop(100%,#ededed))
|
146
|
+
.name
|
147
|
+
:float left
|
148
|
+
:padding-left 10px
|
149
|
+
a
|
150
|
+
:color steelblue
|
151
|
+
:text-decoration none
|
152
|
+
&:hover
|
153
|
+
:text-decoration underline
|
154
|
+
|
155
|
+
#repo_header
|
156
|
+
:float left
|
157
|
+
:width 100%
|
158
|
+
:margin-bottom 20px
|
159
|
+
h2
|
160
|
+
:float left
|
161
|
+
:width 60%
|
162
|
+
:font-size 25px
|
163
|
+
#actions
|
164
|
+
:float left
|
165
|
+
:width 40%
|
166
|
+
.button
|
167
|
+
:float right
|
168
|
+
:margin-left 20px
|
169
|
+
|
170
|
+
.section_bar
|
171
|
+
:float left
|
172
|
+
:width 758px
|
173
|
+
:border 1px solid #ccc
|
174
|
+
:border-bottom none
|
175
|
+
:background -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(47%,#f6f6f6), color-stop(100%,#ededed))
|
176
|
+
a, .title
|
177
|
+
:color #333
|
178
|
+
:text-decoration none
|
179
|
+
:float left
|
180
|
+
:font-weight bold
|
181
|
+
a
|
182
|
+
:padding 5px
|
183
|
+
|
184
|
+
#blob
|
185
|
+
:float left
|
186
|
+
:width 760px
|
187
|
+
:background #f1f1f1
|
188
|
+
:overflow auto
|
189
|
+
|
190
|
+
|
191
|
+
#breadcrumbs
|
192
|
+
:float left
|
193
|
+
:width 100%
|
194
|
+
:font-size 18px
|
195
|
+
:margin-bottom 20px
|
196
|
+
a
|
197
|
+
:color #333
|
198
|
+
|
199
|
+
#repo_info
|
200
|
+
:float left
|
201
|
+
:width 758px
|
202
|
+
:background #f1f1f1
|
203
|
+
:border 1px solid #ccc
|
204
|
+
:border-bottom none
|
205
|
+
#git_url
|
206
|
+
:float left
|
207
|
+
:padding 3px 5px
|
208
|
+
:background #fff
|
209
|
+
:border 1px solid #ccc
|
210
|
+
:border-radius 4px
|
211
|
+
:margin 10px
|
212
|
+
:width 600px
|
213
|
+
#clippy
|
214
|
+
:float left
|
215
|
+
:margin-top 8px
|
216
|
+
|
217
|
+
#repositories
|
218
|
+
:float left
|
219
|
+
:width 100%
|
220
|
+
:font-size 30px
|
221
|
+
:border-top 1px solid #ccc
|
222
|
+
a
|
223
|
+
:text-decoration none
|
224
|
+
:color #333
|
225
|
+
.repository
|
226
|
+
:padding 10px
|
227
|
+
:border 1px solid #ccc
|
228
|
+
:border-top none
|
229
|
+
:float left
|
230
|
+
:width 738px
|
231
|
+
:background -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(47%,#f6f6f6), color-stop(100%,#ededed))
|
232
|
+
.data
|
233
|
+
:float left
|
234
|
+
:width 100%
|
235
|
+
:margin-top 10px
|
236
|
+
.message, .new_repo
|
237
|
+
:float left
|
238
|
+
:margin-top 3px
|
239
|
+
:font-size 10px
|
240
|
+
:background #fff
|
241
|
+
:border 1px solid #ccc
|
242
|
+
:padding 4px
|
243
|
+
:border-radius 5px
|
244
|
+
:font-weight bold
|
245
|
+
|
246
|
+
#diffs
|
247
|
+
.diff
|
248
|
+
:float left
|
249
|
+
:width 100%
|
250
|
+
:overflow none
|
251
|
+
:margin-bottom 20px
|
252
|
+
|
253
|
+
#guide
|
254
|
+
:float left
|
255
|
+
:width 100%
|
256
|
+
code
|
257
|
+
:float left
|
258
|
+
:background #f6f9fe
|
259
|
+
:padding 5px
|
260
|
+
:border 1px solid #ccc
|
261
|
+
:width 740px
|
262
|
+
:margin 10px 0
|
263
|
+
:border-radius 5px
|
264
|
+
h2
|
265
|
+
:margin-top 40px
|
266
|
+
:float left
|
267
|
+
:width 100%
|
268
|
+
p
|
269
|
+
:float left
|
270
|
+
:margin-top 20px
|
271
|
+
:width 100%
|
272
|
+
:line-height 22px
|
273
|
+
ul
|
274
|
+
:float left
|
275
|
+
:margin-left 40px
|
276
|
+
:width 700px
|
277
|
+
:margin-top 10px
|
278
|
+
li
|
279
|
+
:float left
|
280
|
+
:width 100%
|
281
|
+
:margin-top 10px
|
282
|
+
|
283
|
+
form
|
284
|
+
:float left
|
285
|
+
:width 100%
|
286
|
+
:margin-bottom 30px
|
287
|
+
input
|
288
|
+
:font-size 28px
|
289
|
+
:padding 4px
|
290
|
+
:width 740px
|
291
|
+
|
292
|
+
#repo_settings
|
293
|
+
:float left
|
294
|
+
:border 1px solid #ccc
|
295
|
+
:width 738px
|
296
|
+
:padding 10px
|
297
|
+
p
|
298
|
+
:margin-top 20px
|
299
|
+
code
|
300
|
+
:background #f1f1f1
|
301
|
+
:padding 3px
|
302
|
+
:float left
|
303
|
+
:width 730px
|
304
|
+
:margin 20px 0
|
305
|
+
:border 1px solid #ccc
|
306
|
+
a
|
307
|
+
:margin-top 20px
|
308
|
+
|
309
|
+
#big_link
|
310
|
+
:float left
|
311
|
+
:width 100%
|
312
|
+
:padding 40px 0
|
313
|
+
:font-size 26px
|
314
|
+
|
315
|
+
a
|
316
|
+
:color dodgerblue
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<% title "#{@repository} #{params[:splat][0]}" %>
|
2
|
+
|
3
|
+
<%=partial(:repo_header) %>
|
4
|
+
|
5
|
+
<div class="section_bar">
|
6
|
+
<%=link_to "Raw", raw_blob_for_commit_path(@repository, params[:commit], params[:splat][0]) %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div id="blob">
|
10
|
+
<%=@syntaxer%>
|
11
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% title "diffs on #{@commit}" %>
|
2
|
+
|
3
|
+
<%=partial(:repo_header) %>
|
4
|
+
|
5
|
+
<div id="diffs">
|
6
|
+
<% @commit.diffs.each do |diff| %>
|
7
|
+
<div class="section_bar">
|
8
|
+
<div class="title">
|
9
|
+
<%=link_to diff.b_path, blob_for_commit_path(@repository, @commit, diff.b_path) %>
|
10
|
+
</div>
|
11
|
+
<div class="diff">
|
12
|
+
<%=CodeRay.scan(diff.diff, :diff, :highlight_code => false, :inline_diff => false).div(:css => :class) %>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
</div>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
5
|
+
<title><%= @title %> - Ghoul v<%= Ghoul::VERSION %></title>
|
6
|
+
<%= stylesheet_link_tag :app, :coderay, :buttons, :'github-buttons' %>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div class="container">
|
10
|
+
<div id="header">
|
11
|
+
<a href="<%= url("/") %>" id="logo">Ghoul v<%= Ghoul::VERSION %></a>
|
12
|
+
<% if repos_path_exists? %>
|
13
|
+
<ul>
|
14
|
+
<li><%= link_to "Repositories", repositories_path %></li>
|
15
|
+
<li><a href="<%= url("/new_repo") %>" class="thoughtbot_button">New Repo</a></li>
|
16
|
+
</ul>
|
17
|
+
<% end %>
|
18
|
+
</div>
|
19
|
+
<div id="page">
|
20
|
+
<%= yield %>
|
21
|
+
</div>
|
22
|
+
<%= partial(:footer) %>
|
23
|
+
</div>
|
24
|
+
</body>
|
25
|
+
</html>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<% title "New repository" %>
|
2
|
+
<form action="<%=url("/new_repo")%>" method="post">
|
3
|
+
<input name="name" placeholder="Repository name"/>
|
4
|
+
</form>
|
5
|
+
|
6
|
+
<div id="guide">
|
7
|
+
<h2>Creating A Repository</h2>
|
8
|
+
|
9
|
+
<p>Please bear in mind when you create a repository that:</p>
|
10
|
+
|
11
|
+
<p>There is currently no authentication built into Ghoul. This first version is a proof of concept and I hope that something will be able to be built into future versions of this software.</p>
|
12
|
+
|
13
|
+
<p>If you change ports you will need to change add the remote repository again on your local repository.</p>
|
14
|
+
|
15
|
+
</div>
|
16
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<% title "Setting up your repository" %>
|
2
|
+
|
3
|
+
<div id="guide">
|
4
|
+
<h2>Global Setup:</h2>
|
5
|
+
<pre><code>
|
6
|
+
git config --global user.name "Your Name"
|
7
|
+
git config --global user.email author@accountsapp.com
|
8
|
+
</code>
|
9
|
+
</pre>
|
10
|
+
|
11
|
+
<h2>Next Steps:</h2>
|
12
|
+
<pre><code>
|
13
|
+
mkdir <%=@repository%>
|
14
|
+
cd <%=@repository%>
|
15
|
+
touch README
|
16
|
+
git init
|
17
|
+
git add README
|
18
|
+
git commit -m 'first commit'
|
19
|
+
git remote add origin <%=repository_git_url(@repository)%>
|
20
|
+
git push -u origin master
|
21
|
+
</code>
|
22
|
+
</pre>
|
23
|
+
|
24
|
+
<h2>Existing Repository:</h2>
|
25
|
+
<pre><code>
|
26
|
+
cd existing_repository
|
27
|
+
git remote add origin <%=repository_git_url(@repository)%>
|
28
|
+
git push -u origin master
|
29
|
+
</code>
|
30
|
+
</pre>
|
31
|
+
|
32
|
+
<p>When you're done, <%= link_to "click here", repository_path(@repository) %></p>
|
33
|
+
</div>
|
34
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%= gravatar_image(commit.author.email, 30) %>
|
2
|
+
|
3
|
+
<div class="data">
|
4
|
+
<div class="message"><%= link_to commit.message, tree_for_commit_path(@repository, commit.id) %></div>
|
5
|
+
<div class="meta">
|
6
|
+
<div class="name"><%= mail_to commit.author.email, commit.author.name %></div>
|
7
|
+
<div class="committed_date"><%= date_format commit.committed_date %></div>
|
8
|
+
<div class="diff"><%= link_to "diff", diff_for_commit_path(@repository, commit.id) %></div>
|
9
|
+
</div>
|
10
|
+
</div>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<div id='footer'>
|
2
|
+
<p>Powered by <%= link_to "Ghoul", "http://github.com/georgedrummond/ghoul" %> v<%=Ghoul::VERSION %></p>
|
3
|
+
<p>© <%= link_to "George Drummond", "http://www.georgedrummond.com" %> & <%= link_to "AccountsApp Ltd", "http://accountsapp.com" %> 2011. All rights reserved</p>
|
4
|
+
<p>Released under the MIT license</p>
|
5
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%= partial :repo_top_bar %>
|
2
|
+
|
3
|
+
<div id="repo_info">
|
4
|
+
<div id="git_url"><%= repository_git_url(@repository) %></div>
|
5
|
+
<div id="clippy"><%= clippy(repository_git_url(@repository), '#f1f1f1') %></div>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div id="commits">
|
9
|
+
<div class="commit"><%= partial(:commit, :commit => @newest_commit) %></div>
|
10
|
+
<% if @commit.id != @newest_commit.id %>
|
11
|
+
<div class="indent commit">
|
12
|
+
<%= partial(:commit, :commit => @commit) %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<%= partial(:breadcrumbs) unless @hide_breadcrumbs %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div id="repo_header">
|
2
|
+
<h2><%=@repository %></h2>
|
3
|
+
<div id="actions">
|
4
|
+
<a class="button log icon" href="<%=commits_path(@repository)%>">Commits</a>
|
5
|
+
<a class="button settings icon" href="<%=repository_settings_path(@repository)%>">Settings</a>
|
6
|
+
<a class="button home icon" href="<%=repository_path(@repository)%>">Trunk</a>
|
7
|
+
</div>
|
8
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<% title "Settings for #{@repository}" %>
|
2
|
+
|
3
|
+
<%=partial :repo_top_bar %>
|
4
|
+
|
5
|
+
<div id="repo_settings">
|
6
|
+
<h2>About this <%=@repository %> repository</h2>
|
7
|
+
|
8
|
+
<p>You can clone your repository by running the command <b>git clone <%=clone_url(@repository) %></b>.</p>
|
9
|
+
|
10
|
+
<p>Please note that <b>Ghoul</b> currently <b>does not use any form of authentication</b>. This will be added in future versions. Until we build in authentication please only use this to host your repositories in a secure environment as <b>anyone can push to your repository</b>.</p>
|
11
|
+
|
12
|
+
<pre><code>Want to delete this repository? Just delete the folder at <%= repos_path %>/<%= @repository %></code></pre>
|
13
|
+
<!--
|
14
|
+
<form action="<%= url("/repository/#{@repository}/delete") %>" method="post" style="margin-top:40px">
|
15
|
+
<button class="danger button">Delete repository</button>
|
16
|
+
</form>
|
17
|
+
-->
|
18
|
+
</div>
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<% title "Repositories" %>
|
2
|
+
|
3
|
+
<% unless @repositories.count == 2 %>
|
4
|
+
<h1>Repositories</h1>
|
5
|
+
<div id="repositories">
|
6
|
+
<% @repositories.each do |repo| %>
|
7
|
+
<% unless repo == "." || repo == ".." %>
|
8
|
+
<div class="repository">
|
9
|
+
<div class="name"><%= link_to repo, repository_path(repo) %></div>
|
10
|
+
<div class="data">
|
11
|
+
<% begin %>
|
12
|
+
<% last_commit = commit_from_repository(repo, "trunk") %>
|
13
|
+
<div class="message">
|
14
|
+
Last updated by <%= last_commit.author.name %> on <%= date_format(last_commit.committed_date) %>
|
15
|
+
</div>
|
16
|
+
<% rescue %>
|
17
|
+
<div class="message">New repository</div>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
<% else %>
|
25
|
+
|
26
|
+
<div id="guide">
|
27
|
+
<h1>Ghoul - Prettier Git For Everyone :)</h1>
|
28
|
+
<p><a href="http://github.com/georgedrummond/ghoul">Ghoul</a> is a simple yet good looking interface for your git repositories written in <a href="http://sinatrarb.com">sinatra</a>. It is currently only for demonstration purposes and use on your secure local machine as it does not enforce any authentication as of yet.</p>
|
29
|
+
|
30
|
+
<h2>Installation</h2>
|
31
|
+
<p>Ghoul can be run either using the ghoul gem or by downloading the git repository and running through the rackup command.</p>
|
32
|
+
<pre><code># Installing via rubygems
|
33
|
+
|
34
|
+
gem install ghoul
|
35
|
+
ghoul server</code></pre>
|
36
|
+
<pre><code># Installing from the git repository
|
37
|
+
|
38
|
+
git clone http://github.com/georgedrummond/ghoul
|
39
|
+
cd ghoul
|
40
|
+
bundle install
|
41
|
+
rackup
|
42
|
+
</code></pre>
|
43
|
+
|
44
|
+
<h2>How it works</h2>
|
45
|
+
<p>Ghoul uses the grit, written by the guys at github for parsing your repositories which are located in a folder named "repos" within your
|
46
|
+
home folder e.g. /Users/georgedrummond/repos. For git push, ghoul uses grack. Grack has no authentication so ghoul should only be used
|
47
|
+
on your local machine.</p>
|
48
|
+
|
49
|
+
<h2>License</h2>
|
50
|
+
<pre><code>Copyright (c) 2011 George Drummond, george@accountsapp.com
|
51
|
+
|
52
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
53
|
+
a copy of this software and associated documentation files (the
|
54
|
+
"Software"), to deal in the Software without restriction, including
|
55
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
56
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
57
|
+
permit persons to whom the Software is furnished to do so, subject to
|
58
|
+
the following conditions:
|
59
|
+
|
60
|
+
The above copyright notice and this permission notice shall be
|
61
|
+
included in all copies or substantial portions of the Software.
|
62
|
+
|
63
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
64
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
65
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
66
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
67
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
68
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
69
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</code></pre>
|
70
|
+
</div>
|
71
|
+
|
72
|
+
<% end %>
|
73
|
+
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% title "Please set up the repos path"%>
|
2
|
+
<div id="guide">
|
3
|
+
<h2>Please Set Up The Repos Path</h2>
|
4
|
+
<p>Before you can run <b>Ghoul</b> you must setup the home for your ghoul repositories. This is where we will store our bare repositories and its where you will push to.</p>
|
5
|
+
<p>To continue please create an empty folder in <b><%= repos_path %></b></p>
|
6
|
+
<pre><code>$ mkdir <%= repos_path %></code></pre>
|
7
|
+
<p>When you have done that please <a href="<%= repositories_path %>">click here</a></p>
|
8
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<% title "#{@repository} tree" %>
|
2
|
+
|
3
|
+
<%=partial :repo_header %>
|
4
|
+
|
5
|
+
<div id="tree">
|
6
|
+
<% @resource.contents.sort { |a, b| [b.class.name, a.name.downcase] <=> [a.class.name, b.name.downcase] }.each do |f| %>
|
7
|
+
<% if f.is_a?(Grit::Tree) %>
|
8
|
+
<div class="tree">
|
9
|
+
<div class="name"><%= link_to "#{f.name}/", tree_for_commit_path(@repository, params[:commit], params[:splat][0], f.name) %></div>
|
10
|
+
</div>
|
11
|
+
<% else %>
|
12
|
+
<div class="blob">
|
13
|
+
<div class="name"><%= link_to f.name, blob_for_commit_path(@repository, params[:commit], params[:splat][0], f.name) %></div>
|
14
|
+
</div>
|
15
|
+
<% end %>
|
16
|
+
<% end %>
|
17
|
+
</div>
|
data/lib/ghoul.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
$:.unshift File.dirname(__FILE__)
|
3
|
+
|
4
|
+
|
5
|
+
require "sinatra"
|
6
|
+
require "sass"
|
7
|
+
require "georgedrummond_sinatra_helpers"
|
8
|
+
require "grit"
|
9
|
+
require "coderay"
|
10
|
+
require "redcarpet"
|
11
|
+
require "time"
|
12
|
+
require "erb"
|
13
|
+
|
14
|
+
def require_all(path)
|
15
|
+
glob = File.join(File.dirname(__FILE__), path, '*.rb')
|
16
|
+
Dir[glob].each do |f|
|
17
|
+
require f
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
require "version"
|
22
|
+
require_all "ghoul/lib"
|
23
|
+
require "ghoul/app"
|
24
|
+
|