shagit 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ /*
2
+ Copyright (c) 2008, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.net/yui/license.txt
5
+ version: 2.5.2
6
+ */
7
+ html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;font-variant:normal;}sup {vertical-align:text-top;}sub {vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}
@@ -0,0 +1,354 @@
1
+ html {
2
+ background-color: #e0e0e0; }
3
+
4
+ body {
5
+ font-size: 100%;
6
+ font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
7
+ color: #333333; }
8
+
9
+ a {
10
+ color: #73de2d;
11
+ text-decoration: none; }
12
+ a:hover {
13
+ color: #fff;
14
+ background-color: #73de2d; }
15
+
16
+ #header, #content, #footer {
17
+ width: 40em;
18
+ margin: 0 auto;
19
+ background: #eeeeee;
20
+ padding: 0 2em;
21
+ z-index: 0;
22
+ position: relative;
23
+ font-size: 1em; }
24
+
25
+ #header {
26
+ background: white; }
27
+ #header h1 {
28
+ font-weight: bold;
29
+ font-size: 1.5em; }
30
+ #header address.watermark {
31
+ position: absolute;
32
+ font-weight: bold;
33
+ right: 3em;
34
+ top: 0;
35
+ font-size: .75em;
36
+ color: #cccccc; }
37
+ #header address.watermark a {
38
+ color: #cccccc;
39
+ font-weight: bold;
40
+ font-size: 2em; }
41
+ #header address.watermark a:hover {
42
+ background: transparent;
43
+ color: #aaaaaa; }
44
+
45
+ #content {
46
+ padding-top: 1em;
47
+ padding-bottom: 2em; }
48
+ #content strong {
49
+ font-weight: bold; }
50
+ #content em {
51
+ font-style: italic; }
52
+ #content h1, #content h2, #content h3, #content h4, #content h5, #content h6 {
53
+ color: #4e4e4e; }
54
+ #content h1 {
55
+ font-size: 2em;
56
+ font-weight: bold;
57
+ margin-bottom: .75em;
58
+ padding: .25em 0;
59
+ line-height: 1.2;
60
+ border-bottom: 1px solid silver; }
61
+ #content h2 {
62
+ font-weight: bold;
63
+ font-size: 1.5em;
64
+ margin: 1em 0 .2em; }
65
+ #content h3 {
66
+ font-weight: bold;
67
+ font-size: 1.25em;
68
+ margin: .25em 0; }
69
+ #content h4, #content h5, #content h6 {
70
+ font-weight: bold;
71
+ margin-top: .5em; }
72
+ #content code, #content pre, #content textarea, #content input {
73
+ font-family: Monaco, Deja Vu Sans Mono, Inconsolata, Consolas, monospace; }
74
+ #content pre {
75
+ margin: .5em;
76
+ padding: .5em; }
77
+ #content form p {
78
+ margin-top: 1em;
79
+ position: relative; }
80
+ #content form p.checkbox label {
81
+ margin-top: 0 !important; }
82
+ #content form input.text, #content form textarea, #content form select {
83
+ width: 30em;
84
+ padding: .2em .4em;
85
+ color: #4e4e4e; }
86
+ #content form input.text {
87
+ height: 1.4em; }
88
+ #content form label {
89
+ float: left;
90
+ display: block;
91
+ margin-top: .5em;
92
+ width: 8em;
93
+ margin-right: .75em; }
94
+ #content form .with_errors label {
95
+ background: red;
96
+ color: white;
97
+ position: relative;
98
+ top: -.7em; }
99
+ #content form .with_errors.required label {
100
+ position: static;
101
+ margin-right: .25em;
102
+ padding: 0 .2em; }
103
+ #content form .with_errors input, #content form .with_errors textarea, #content form .with_errors select {
104
+ border: 2px solid #f22;
105
+ background: #fee;
106
+ color: #222222; }
107
+ #content form .required label {
108
+ float: none;
109
+ display: block;
110
+ width: auto;
111
+ position: relative;
112
+ font-weight: bold;
113
+ margin-top: 1em;
114
+ text-indent: -.65em; }
115
+ #content form .required label:before {
116
+ content: "* ";
117
+ color: #73de2d; }
118
+ #content form .required input.text {
119
+ width: 25.6em;
120
+ font-size: 24px;
121
+ font-weight: bold; }
122
+ #content form .normal {
123
+ margin-top: 2em; }
124
+ #content form h2.notifier label {
125
+ float: none;
126
+ width: auto;
127
+ margin-right: 0; }
128
+ #content form h2.notifier label .warning {
129
+ font-size: .5em;
130
+ font-weight: normal;
131
+ color: #999999; }
132
+ #content form fieldset {
133
+ padding-bottom: 1em;
134
+ margin-left: 1.35em;
135
+ border-bottom: 1px solid silver;
136
+ margin-bottom: 1em; }
137
+ #content form fieldset h3 {
138
+ margin-top: 1em;
139
+ margin-bottom: 0; }
140
+ #content form fieldset p.normal {
141
+ margin-top: 1em; }
142
+ #content form fieldset p label {
143
+ width: 6.7em; }
144
+ #content form p.submit {
145
+ margin-top: 2em; }
146
+ #content form p.submit:after {
147
+ display: block;
148
+ clear: both;
149
+ float: none;
150
+ content: ".";
151
+ text-indent: -9999em;
152
+ text-align: left; }
153
+ #content form p.submit.destroy button, #content form p.submit.manual-build button {
154
+ float: none;
155
+ display: inline; }
156
+ #content form p.submit.manual-build button {
157
+ margin-right: 0; }
158
+ #content #build form, #content #last_build form {
159
+ font-size: .75em; }
160
+ #content #build form p.submit, #content #last_build form p.submit {
161
+ margin: 0;
162
+ padding: 0;
163
+ position: absolute;
164
+ right: .5em;
165
+ top: 1.25em; }
166
+ #content .blank_slate p, #content .error p {
167
+ position: relative;
168
+ top: .3em; }
169
+ #content .blank_slate h1, #content .error h1 {
170
+ border-width: 0;
171
+ margin: 0;
172
+ padding: 0; }
173
+ #content .blank_slate h1 button, #content .error h1 button {
174
+ float: none;
175
+ border: 0 none;
176
+ background: transparent;
177
+ display: inline;
178
+ color: #73de2d;
179
+ padding: 0.25em 0;
180
+ margin: 0; }
181
+ #content .blank_slate h1 button:hover, #content .error h1 button:hover {
182
+ background: #73de2d;
183
+ color: #fff; }
184
+ #content .error dt {
185
+ margin-top: 1.4em;
186
+ margin-bottom: .3em;
187
+ font-size: 1.75em;
188
+ font-family: Georgia, Times New Roman, serif; }
189
+ #content .error dd {
190
+ line-height: 1.4; }
191
+ #content .error .backtrace {
192
+ margin: 1em 0;
193
+ overflow: "scroll";
194
+ height: 30em;
195
+ border: 1px solid silver;
196
+ line-height: 1.6; }
197
+ #content #projects {
198
+ margin: 1em 0 2em;
199
+ border-top: 1px solid silver; }
200
+ #content #projects li {
201
+ position: relative;
202
+ border-bottom: 1px solid silver; }
203
+ #content #projects li.odd {
204
+ background: #e6e6e6; }
205
+ #content #projects li a {
206
+ font-size: 2em;
207
+ padding: .25em;
208
+ line-height: 1.2;
209
+ font-weight: bold;
210
+ display: block; }
211
+ #content #projects li a.success {
212
+ color: #337022; }
213
+ #content #projects li a.failed {
214
+ color: #ff1100; }
215
+ #content #projects li a.building {
216
+ color: #777777; }
217
+ #content #projects li .meta {
218
+ position: absolute;
219
+ right: .6em;
220
+ top: 1.5em;
221
+ font-size: 0.8em;
222
+ color: #999999;
223
+ text-align: right; }
224
+ #content #projects li.success .meta {
225
+ color: #337022; }
226
+ #content #projects li.failed .meta {
227
+ color: #ff1100; }
228
+ #content #projects li.building .meta {
229
+ color: #777777; }
230
+ #content #previous_builds li a {
231
+ display: block;
232
+ padding: .25em;
233
+ margin-bottom: .25em;
234
+ border-width: 1px;
235
+ border-style: solid; }
236
+ #content #previous_builds li a strong {
237
+ font-size: 1.3em; }
238
+ #content #previous_builds li a .attribution {
239
+ font-size: .9em; }
240
+ #content #projects li.success a, #content #previous_builds li.success a {
241
+ background-color: #bbf8aa;
242
+ border-color: #99d688;
243
+ color: #337022; }
244
+ #content #projects li.success a .attribution, #content #previous_builds li.success a .attribution {
245
+ color: #77b466; }
246
+ #content #projects li.success a:hover, #content #previous_builds li.success a:hover {
247
+ background-color: #ddffcc; }
248
+ #content #projects li.failed a, #content #previous_builds li.failed a {
249
+ background-color: #ffbbaa;
250
+ border-color: #dd9988;
251
+ color: #ff1100; }
252
+ #content #projects li.failed a .attribution, #content #previous_builds li.failed a .attribution {
253
+ color: #bb7766; }
254
+ #content #projects li.failed a:hover, #content #previous_builds li.failed a:hover {
255
+ background-color: #ffddcc; }
256
+ #content #projects li.building a, #content #previous_builds li.building a {
257
+ background-color: #cccccc;
258
+ border-color: #aaaaaa;
259
+ color: #777777; }
260
+ #content #projects li.building a .attribution, #content #previous_builds li.building a .attribution {
261
+ color: #888888; }
262
+ #content #projects li.building a:hover, #content #previous_builds li.building a:hover {
263
+ background-color: #eeeeee; }
264
+ #content #build, #content #last_build {
265
+ position: relative; }
266
+ #content #build h1, #content #build blockquote, #content #last_build h1, #content #last_build blockquote {
267
+ border-width: 0 1px;
268
+ border-style: solid; }
269
+ #content #build h1, #content #last_build h1 {
270
+ border-top-width: 1px; }
271
+ #content #build blockquote, #content #last_build blockquote {
272
+ bottom-bottom-width: 1px;
273
+ line-height: 1.4; }
274
+ #content #build.success h1, #content #build.success blockquote, #content #last_build.success h1, #content #last_build.success blockquote {
275
+ background-color: #bbf8aa;
276
+ border-color: #99d688 #ccffbb #ccffbb #99d688; }
277
+ #content #build.success h1, #content #last_build.success h1 {
278
+ color: #337022; }
279
+ #content #build.success .meta, #content #last_build.success .meta {
280
+ color: #77b466; }
281
+ #content #build.failed h1, #content #build.failed blockquote, #content #last_build.failed h1, #content #last_build.failed blockquote {
282
+ background-color: #ffbbaa;
283
+ border-color: #dd9988 #ffccbb #ffccbb #dd9988; }
284
+ #content #build.failed h1, #content #last_build.failed h1 {
285
+ color: #ff1100; }
286
+ #content #build.failed .meta, #content #last_build.failed .meta {
287
+ color: #bb7766; }
288
+ #content #build.building h1, #content #build.building blockquote, #content #last_build.building h1, #content #last_build.building blockquote {
289
+ background-color: #cccccc;
290
+ border-color: #aaaaaa #dddddd #dddddd #aaaaaa; }
291
+ #content #build.building h1, #content #last_build.building h1 {
292
+ color: #777777; }
293
+ #content #build.building .meta, #content #last_build.building .meta {
294
+ color: #333333; }
295
+ #content #build h1, #content #last_build h1 {
296
+ margin-top: .5em;
297
+ margin-bottom: 0;
298
+ padding: .25em;
299
+ color: #337022; }
300
+ #content #build blockquote, #content #last_build blockquote {
301
+ padding: .75em;
302
+ margin-bottom: 2em; }
303
+ #content #build blockquote .meta, #content #last_build blockquote .meta {
304
+ margin-top: 1em;
305
+ display: block;
306
+ font-size: .9em; }
307
+ #content #build pre.output, #content #last_build pre.output {
308
+ background: #111;
309
+ color: #fff;
310
+ padding: .5em;
311
+ overflow: auto;
312
+ max-height: 50em;
313
+ font-size: .825em; }
314
+ #content #build pre.output .color30, #content #last_build pre.output .color30 {
315
+ color: #333; }
316
+ #content #build pre.output .color31, #content #last_build pre.output .color31 {
317
+ color: #e33; }
318
+ #content #build pre.output .color32, #content #last_build pre.output .color32 {
319
+ color: #3e3; }
320
+ #content #build pre.output .color33, #content #last_build pre.output .color33 {
321
+ color: #ee3; }
322
+ #content #build pre.output .color34, #content #last_build pre.output .color34 {
323
+ color: #33e; }
324
+ #content #build pre.output .color35, #content #last_build pre.output .color35 {
325
+ color: #e3e; }
326
+ #content #build pre.output .color36, #content #last_build pre.output .color36 {
327
+ color: #3ee; }
328
+ #content #build pre.output .color37, #content #last_build pre.output .color37 {
329
+ color: #fff; }
330
+ #content #push_path {
331
+ display: block;
332
+ margin-top: 1em;
333
+ margin-left: 2em; }
334
+
335
+ a.success {
336
+ color: #bbf8aa; }
337
+ a.success:hover {
338
+ background-color: #bbf8aa;
339
+ color: white; }
340
+ a.failed {
341
+ color: #ffbbaa; }
342
+ a.failed:hover {
343
+ background-color: #ffbbaa;
344
+ color: white; }
345
+
346
+ #footer {
347
+ padding: 1.5em 2.5em;
348
+ border-top: 1px solid #ccc;
349
+ font-size: .8em;
350
+ width: 50em !important;
351
+ color: #666;
352
+ text-align: right; }
353
+ #footer strong {
354
+ font-weight: bold; }
@@ -0,0 +1,99 @@
1
+ begin
2
+ GEM = "shagit"
3
+ AUTHOR = "Martin Gajdos"
4
+ EMAIL = "contact@roboprojects.com"
5
+ SUMMARY = "A simple web application for local, private git repository management"
6
+ HOMEPAGE = "http://github.com/unabatede/shagit"
7
+ INSTALL_MESSAGE = %q{
8
+ ========================================================================
9
+ Thanks for installing Shagit!
10
+ ------------------------------------------------------------------------
11
+ Please set the path to your working directory within the config.yml file
12
+ before starting Shagit.
13
+
14
+ Once you're done, you can start Shagit by running the following command:
15
+ shagit
16
+
17
+ For a production environment you should consider using Phusion Passenger
18
+ or any of the other known Ruby deployment solutions that can be run as a
19
+ daemon.
20
+
21
+ Find out more and get involved:
22
+ http://github.com/unabatede/shagit
23
+ ========================================================================
24
+ }
25
+
26
+ gem 'jeweler', '>= 1.0.0'
27
+ require 'jeweler'
28
+
29
+ Jeweler::Tasks.new do |s|
30
+ s.name = GEM
31
+ s.summary = SUMMARY
32
+ s.email = EMAIL
33
+ s.homepage = HOMEPAGE
34
+ s.description = SUMMARY
35
+ s.author = AUTHOR
36
+ s.post_install_message = INSTALL_MESSAGE
37
+ s.executables = ["shagit"]
38
+
39
+ s.require_path = 'lib'
40
+ s.files = %w(LICENSE CHANGES README.md config.ru config.yml shagit_app.rb VERSION.yml rakefile) + Dir.glob("{lib,public,views,test}/**/*")
41
+
42
+ # Runtime dependencies: When installing Formtastic these will be checked if they are installed.
43
+ # Will be offered to install these if they are not already installed.
44
+ s.add_dependency 'sinatra', '>= 0.9.4'
45
+ s.add_dependency 'haml', '>= 2.2.20'
46
+ s.add_dependency 'grit', '>= 2.0.0'
47
+
48
+ # Development dependencies. Not installed by default.
49
+ # Install with: sudo gem install shagit --development
50
+ s.add_development_dependency 'rack-test', '>= 0.5.3'
51
+ s.add_development_dependency 'webrat', '>= 0.7.0'
52
+ end
53
+
54
+ Jeweler::GemcutterTasks.new
55
+ rescue LoadError
56
+ puts "[shagit:] Jeweler - or one of its dependencies - is not available. Install it using superuser-rights with: gem install jeweler"
57
+ end
58
+
59
+ task :default => [:setup, :setup_config]
60
+
61
+ desc "This task will install all required gems by Shagit"
62
+ task :setup do
63
+ sh "gem install sinatra haml grit --no-ri --no-rdoc"
64
+ end
65
+
66
+ task :setup_dev_gems do
67
+ sh "gem install sinatra haml grit rack-test webrat jeweler --no-ri --no-rdoc"
68
+ end
69
+
70
+ task :test => [:unit_tests, :acceptance_tests]
71
+
72
+ desc "This task will run all unit tests located within the test/unit directory"
73
+ task :unit_tests do
74
+ #require 'rake/runtest'
75
+ #Rake.run_tests 'test/unit/*test.rb'
76
+ print "please run these tests manually by changing to test/unit and executing shagit_test.rb"
77
+ end
78
+
79
+ desc "This task will run all acceptance tests located within the test/acceptance directory"
80
+ task :acceptance_tests do
81
+ require 'rake/runtest'
82
+ Rake.run_tests 'test/acceptance/*test.rb'
83
+ end
84
+
85
+ desc "This task will generate the gemspec file and afterwards create the gem based on it"
86
+ task :build_gem => [:clean, :gemspec] do
87
+ sh "gem build shagit.gemspec"
88
+ end
89
+
90
+ desc "This task will remove all temporary and generated files"
91
+ task :clean do
92
+ puts "cleaning up..."
93
+ Dir.new(".").each do |filename|
94
+ if filename =~ /\w+\.gem|.log|.html/
95
+ puts "removing file: #{filename}"
96
+ File.delete(filename)
97
+ end
98
+ end
99
+ end