gitdocs 0.4.13 → 0.4.14

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,10 +1,22 @@
1
- 0.4.12 (1/05/2011)
1
+ 0.4.14 (1/14/2012)
2
+
3
+ * Change file modes into tab style [thanks Kale Worsley]
4
+ * Add ability to revert a file to a previous revision [thanks Kale Worsley]
5
+ * Add optional git commit message field to edit form [thanks Kale Worsley]
6
+
7
+ 0.4.13 (1/11/2012)
8
+
9
+ * Redirect to first share if there's only one
10
+ * Render inline README for a directory
11
+ * Front-end now lists folder sizes in directory listing [Thanks evan tatarka]
12
+
13
+ 0.4.12 (1/05/2012)
2
14
 
3
15
  * Fixes incorrect padding style on rendered code blocks (thanks chris kempson)
4
16
  * Fixes encoding issues in markdown files
5
17
  * Tag documents as utf-8 in meta for web frontend (thanks chris kempson)
6
18
 
7
- 0.4.11 (1/04/2011)
19
+ 0.4.11 (1/04/2012)
8
20
 
9
21
  * Add line-height to code blocks in file displays
10
22
  * Fixes various browser inconsistencies (thanks evan tatarka)
data/README.md CHANGED
@@ -170,7 +170,8 @@ Gitdocs was created at [Miso](http://engineering.gomiso.com) by [Joshua Hull](ht
170
170
  We also have had several contributors:
171
171
 
172
172
  * [Chris Kempson](https://github.com/ChrisKempson) - Encoding issues
173
- * [Evan Tatarka](https://github.com/evant) - Browser fixes
173
+ * [Evan Tatarka](https://github.com/evant) - Front-end style fixes
174
+ * [Kale Worsley](https://github.com/kaleworsley) - Custom commit msgs, revert revisions, front-end cleanup
174
175
 
175
176
  Gitdocs is still a young project with a lot of opportunity for contributions. Patches welcome!
176
177
 
@@ -51,6 +51,13 @@ GitDocs = {
51
51
  $(el).data("iso", iso);
52
52
  $(el).text(RelativeDate.time_ago_in_words(iso));
53
53
  });
54
+ },
55
+ activateTabs : function() {
56
+ $('ul.tabs li a').each(function() {
57
+ if (($(this).attr('href') == location.pathname && location.search == '') || $(this).attr('href') == location.search) {
58
+ $(this).parent().addClass('active');
59
+ }
60
+ });
54
61
  }
55
62
  };
56
63
 
@@ -58,6 +65,7 @@ $(document).ready(function() {
58
65
  GitDocs.linkBreadcrumbs();
59
66
  GitDocs.fillDirMeta();
60
67
  GitDocs.convertRelativeTimes();
68
+ GitDocs.activateTabs();
61
69
  StringFormatter.autoLink();
62
70
  });
63
71
 
@@ -83,4 +91,4 @@ $('a[data-method]').live('click', function(e) {
83
91
  if (target) { form.attr('target', target); }
84
92
  form.hide().append(metadata_input).appendTo('body');
85
93
  form.submit();
86
- });
94
+ });
@@ -109,10 +109,16 @@ module Gitdocs
109
109
  end
110
110
 
111
111
  def push_changes
112
+ message_file = File.expand_path(".gitmessage~", @root)
113
+ if File.exist? message_file
114
+ message = File.read message_file
115
+ File.delete message_file
116
+ else
117
+ message = 'Auto-commit from gitdocs'
118
+ end
112
119
  sh 'find . -type d -regex ``./[^.].*'' -empty -exec touch \'{}/.gitignore\' \;'
113
120
  sh 'git add .'
114
- # TODO make this message nicer
115
- sh "git commit -a -m'Auto-commit from gitdocs'" unless sh("git status -s").strip.empty?
121
+ sh "git commit -a -m #{ShellTools.escape(message)}" unless sh("git status -s").strip.empty?
116
122
  if @current_revision.nil? || sh('git status')[/branch is ahead/]
117
123
  out, code = sh_with_code("git push #{@current_remote} #{@current_branch}")
118
124
  if code.success?
@@ -199,6 +205,16 @@ module Gitdocs
199
205
  tmp_path
200
206
  end
201
207
 
208
+ # Revert a file to a particular revision
209
+ def file_revert(file, ref)
210
+ if file_revisions(file).map {|r| r[:commit]}.include? ref
211
+ file = file.gsub(%r{^/}, '')
212
+ full_path = File.expand_path(file, @root)
213
+ content = File.read(file_revision_at(file, ref))
214
+ File.open(full_path, 'w') { |f| f.puts content }
215
+ end
216
+ end
217
+
202
218
  def valid?
203
219
  out, status = sh_with_code "git status"
204
220
  @root.present? && status.success?
@@ -72,6 +72,7 @@ module Gitdocs
72
72
  file_path = URI.unescape(request.path_info)
73
73
  file_ext = File.extname(file_path)
74
74
  expanded_path = File.expand_path(".#{file_path}", gd.root)
75
+ message_file = File.expand_path(".gitmessage~", gd.root)
75
76
  halt 400 unless expanded_path[/^#{Regexp.quote(gd.root)}/]
76
77
  parent = File.dirname(file_path)
77
78
  parent = '' if parent == '/'
@@ -83,6 +84,7 @@ module Gitdocs
83
84
  halt 200, { 'Content-Type' => 'application/json' }, [gd.file_meta(file_path).to_json]
84
85
  elsif mode == 'save' # Saving
85
86
  File.open(expanded_path, 'w') { |f| f.print request.params['data'] }
87
+ File.open(message_file, 'w') { |f| f.print request.params['message'] } unless request.params['message'] == ''
86
88
  redirect! "/" + idx.to_s + file_path
87
89
  elsif mode == 'upload' # Uploading
88
90
  halt 404 unless file = request.params['file']
@@ -101,6 +103,12 @@ module Gitdocs
101
103
  elsif mode == "revisions" # list revisions
102
104
  revisions = gd.file_revisions(file_path)
103
105
  render! "revisions", :layout => 'app', :locals => locals.merge(:revisions => revisions)
106
+ elsif mode == "revert" # revert file
107
+ if revision = request.params['revision']
108
+ File.open(message_file, 'w') { |f| f.print "Reverting '#{file_path}' to #{revision}" }
109
+ gd.file_revert(file_path, revision)
110
+ end
111
+ redirect! "/" + idx.to_s + file_path
104
112
  elsif mode == 'delete' # delete file
105
113
  FileUtils.rm(expanded_path)
106
114
  redirect! "/" + idx.to_s + parent
@@ -1,3 +1,3 @@
1
1
  module Gitdocs
2
- VERSION = "0.4.13"
2
+ VERSION = "0.4.14"
3
3
  end
@@ -1,7 +1,14 @@
1
1
  %h2.path
2
2
  %span.path= request.path_info.empty? ? '/' : request.path_info
3
- - if file
4
- %a{ :href => "?mode=raw" } (raw)
5
- %a{ :href => "?mode=edit" } (edit)
6
- %a{ :href => "?mode=revisions" } (revisions)
7
- %a{ :href => "?mode=delete", :onclick => "javascript:return confirm('Are you sure?')" } (delete)
3
+ - if file
4
+ %ul{ :class => "tabs" }
5
+ %li
6
+ %a{ :href => "#{request.path}" } View
7
+ %li
8
+ %a{ :href => "?mode=raw" } Raw
9
+ %li
10
+ %a{ :href => "?mode=edit" } Edit
11
+ %li
12
+ %a{ :href => "?mode=revisions" } Revisions
13
+ %li
14
+ %a{ :href => "?mode=delete", :onclick => "javascript:return confirm('Are you sure?')" } Delete
@@ -2,10 +2,6 @@
2
2
 
3
3
  = partial("header", :locals => { :parent => parent, :file => false, :idx => idx })
4
4
 
5
- - if rendered_readme
6
- .contents
7
- = preserve rendered_readme
8
-
9
5
  - if contents && contents.any?
10
6
  %table#fileListing.condensed-table.zebra-striped
11
7
  %thead
@@ -40,3 +36,7 @@
40
36
  %p Add new file in this directory
41
37
  %input{:type => 'text', :name => "path", :class => "edit", :placeholder => "somefile.md" }
42
38
  %input{:type => 'submit', :value => "New file", :class => "btn secondary" }
39
+
40
+ - if rendered_readme
41
+ .contents
42
+ = preserve rendered_readme
@@ -5,6 +5,8 @@
5
5
  %form{ :class => "edit", :action => "/#{idx}#{request.path_info}?mode=save", :method => "post", :style => "display:none;" }
6
6
  #editor
7
7
  %textarea{ :id => 'data', :name => "data" }= preserve contents
8
+ .clearfix
9
+ %textarea{ :id => 'message', :name => 'message', :class => 'span16', :placeholder => 'Optional commit message.' }
8
10
  %input{ :type => 'submit', :value => "Save", :class => "btn primary" }
9
11
  %a{ :href => "/#{idx}#{request.path_info}", :class => "btn secondary" } Cancel
10
12
  %input{ :type => 'hidden', :class => 'filename', :value => request.path_info }
@@ -10,6 +10,7 @@
10
10
  %th Subject
11
11
  %th Author
12
12
  %th Committed
13
+ %th Revert
13
14
 
14
15
  %tbody
15
16
  - revisions.each_with_index do |r, i|
@@ -20,6 +21,8 @@
20
21
  %td.subject= r[:subject]
21
22
  %td.author= r[:author]
22
23
  %td.date.reldate= r[:date]
23
-
24
+ %td.revert
25
+ %a{ :href => "?mode=revert&revision=#{r[:commit]}", :onclick => "javascript:return confirm('Are you sure?')" }
26
+ = r[:commit]
24
27
  - if revisions.empty?
25
28
  %p No revisions for this file could be found.
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitdocs
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 13
10
- version: 0.4.13
9
+ - 14
10
+ version: 0.4.14
11
11
  platform: ruby
12
12
  authors:
13
13
  - Josh Hull
@@ -16,10 +16,13 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-01-11 00:00:00 Z
19
+ date: 2012-01-14 00:00:00 -08:00
20
+ default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ name: joshbuddy-guard
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
23
26
  none: false
24
27
  requirements:
25
28
  - - ~>
@@ -30,12 +33,12 @@ dependencies:
30
33
  - 10
31
34
  - 0
32
35
  version: 0.10.0
33
- requirement: *id001
34
36
  type: :runtime
35
- prerelease: false
36
- name: joshbuddy-guard
37
+ version_requirements: *id001
37
38
  - !ruby/object:Gem::Dependency
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ name: thin
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
39
42
  none: false
40
43
  requirements:
41
44
  - - ~>
@@ -46,12 +49,12 @@ dependencies:
46
49
  - 3
47
50
  - 1
48
51
  version: 1.3.1
49
- requirement: *id002
50
52
  type: :runtime
51
- prerelease: false
52
- name: thin
53
+ version_requirements: *id002
53
54
  - !ruby/object:Gem::Dependency
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
55
+ name: renee
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
55
58
  none: false
56
59
  requirements:
57
60
  - - ~>
@@ -62,12 +65,12 @@ dependencies:
62
65
  - 3
63
66
  - 7
64
67
  version: 0.3.7
65
- requirement: *id003
66
68
  type: :runtime
67
- prerelease: false
68
- name: renee
69
+ version_requirements: *id003
69
70
  - !ruby/object:Gem::Dependency
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
71
+ name: redcarpet
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
71
74
  none: false
72
75
  requirements:
73
76
  - - ~>
@@ -78,12 +81,12 @@ dependencies:
78
81
  - 0
79
82
  - 0
80
83
  version: 2.0.0
81
- requirement: *id004
82
84
  type: :runtime
83
- prerelease: false
84
- name: redcarpet
85
+ version_requirements: *id004
85
86
  - !ruby/object:Gem::Dependency
86
- version_requirements: &id005 !ruby/object:Gem::Requirement
87
+ name: thor
88
+ prerelease: false
89
+ requirement: &id005 !ruby/object:Gem::Requirement
87
90
  none: false
88
91
  requirements:
89
92
  - - ~>
@@ -94,12 +97,12 @@ dependencies:
94
97
  - 14
95
98
  - 6
96
99
  version: 0.14.6
97
- requirement: *id005
98
100
  type: :runtime
99
- prerelease: false
100
- name: thor
101
+ version_requirements: *id005
101
102
  - !ruby/object:Gem::Dependency
102
- version_requirements: &id006 !ruby/object:Gem::Requirement
103
+ name: coderay
104
+ prerelease: false
105
+ requirement: &id006 !ruby/object:Gem::Requirement
103
106
  none: false
104
107
  requirements:
105
108
  - - ~>
@@ -110,12 +113,12 @@ dependencies:
110
113
  - 0
111
114
  - 4
112
115
  version: 1.0.4
113
- requirement: *id006
114
116
  type: :runtime
115
- prerelease: false
116
- name: coderay
117
+ version_requirements: *id006
117
118
  - !ruby/object:Gem::Dependency
118
- version_requirements: &id007 !ruby/object:Gem::Requirement
119
+ name: dante
120
+ prerelease: false
121
+ requirement: &id007 !ruby/object:Gem::Requirement
119
122
  none: false
120
123
  requirements:
121
124
  - - ~>
@@ -126,12 +129,12 @@ dependencies:
126
129
  - 1
127
130
  - 2
128
131
  version: 0.1.2
129
- requirement: *id007
130
132
  type: :runtime
131
- prerelease: false
132
- name: dante
133
+ version_requirements: *id007
133
134
  - !ruby/object:Gem::Dependency
134
- version_requirements: &id008 !ruby/object:Gem::Requirement
135
+ name: growl
136
+ prerelease: false
137
+ requirement: &id008 !ruby/object:Gem::Requirement
135
138
  none: false
136
139
  requirements:
137
140
  - - ~>
@@ -142,12 +145,12 @@ dependencies:
142
145
  - 0
143
146
  - 3
144
147
  version: 1.0.3
145
- requirement: *id008
146
148
  type: :runtime
147
- prerelease: false
148
- name: growl
149
+ version_requirements: *id008
149
150
  - !ruby/object:Gem::Dependency
150
- version_requirements: &id009 !ruby/object:Gem::Requirement
151
+ name: yajl-ruby
152
+ prerelease: false
153
+ requirement: &id009 !ruby/object:Gem::Requirement
151
154
  none: false
152
155
  requirements:
153
156
  - - ~>
@@ -158,12 +161,12 @@ dependencies:
158
161
  - 1
159
162
  - 0
160
163
  version: 1.1.0
161
- requirement: *id009
162
164
  type: :runtime
163
- prerelease: false
164
- name: yajl-ruby
165
+ version_requirements: *id009
165
166
  - !ruby/object:Gem::Dependency
166
- version_requirements: &id010 !ruby/object:Gem::Requirement
167
+ name: haml
168
+ prerelease: false
169
+ requirement: &id010 !ruby/object:Gem::Requirement
167
170
  none: false
168
171
  requirements:
169
172
  - - ~>
@@ -174,12 +177,12 @@ dependencies:
174
177
  - 1
175
178
  - 4
176
179
  version: 3.1.4
177
- requirement: *id010
178
180
  type: :runtime
179
- prerelease: false
180
- name: haml
181
+ version_requirements: *id010
181
182
  - !ruby/object:Gem::Dependency
182
- version_requirements: &id011 !ruby/object:Gem::Requirement
183
+ name: sqlite3
184
+ prerelease: false
185
+ requirement: &id011 !ruby/object:Gem::Requirement
183
186
  none: false
184
187
  requirements:
185
188
  - - ~>
@@ -190,12 +193,12 @@ dependencies:
190
193
  - 3
191
194
  - 4
192
195
  version: 1.3.4
193
- requirement: *id011
194
196
  type: :runtime
195
- prerelease: false
196
- name: sqlite3
197
+ version_requirements: *id011
197
198
  - !ruby/object:Gem::Dependency
198
- version_requirements: &id012 !ruby/object:Gem::Requirement
199
+ name: activerecord
200
+ prerelease: false
201
+ requirement: &id012 !ruby/object:Gem::Requirement
199
202
  none: false
200
203
  requirements:
201
204
  - - ~>
@@ -206,12 +209,12 @@ dependencies:
206
209
  - 1
207
210
  - 0
208
211
  version: 3.1.0
209
- requirement: *id012
210
212
  type: :runtime
211
- prerelease: false
212
- name: activerecord
213
+ version_requirements: *id012
213
214
  - !ruby/object:Gem::Dependency
214
- version_requirements: &id013 !ruby/object:Gem::Requirement
215
+ name: grit
216
+ prerelease: false
217
+ requirement: &id013 !ruby/object:Gem::Requirement
215
218
  none: false
216
219
  requirements:
217
220
  - - ~>
@@ -222,12 +225,12 @@ dependencies:
222
225
  - 4
223
226
  - 1
224
227
  version: 2.4.1
225
- requirement: *id013
226
228
  type: :runtime
227
- prerelease: false
228
- name: grit
229
+ version_requirements: *id013
229
230
  - !ruby/object:Gem::Dependency
230
- version_requirements: &id014 !ruby/object:Gem::Requirement
231
+ name: shell_tools
232
+ prerelease: false
233
+ requirement: &id014 !ruby/object:Gem::Requirement
231
234
  none: false
232
235
  requirements:
233
236
  - - ~>
@@ -238,12 +241,12 @@ dependencies:
238
241
  - 1
239
242
  - 0
240
243
  version: 0.1.0
241
- requirement: *id014
242
244
  type: :runtime
243
- prerelease: false
244
- name: shell_tools
245
+ version_requirements: *id014
245
246
  - !ruby/object:Gem::Dependency
246
- version_requirements: &id015 !ruby/object:Gem::Requirement
247
+ name: mimetype-fu
248
+ prerelease: false
249
+ requirement: &id015 !ruby/object:Gem::Requirement
247
250
  none: false
248
251
  requirements:
249
252
  - - ~>
@@ -254,12 +257,12 @@ dependencies:
254
257
  - 1
255
258
  - 2
256
259
  version: 0.1.2
257
- requirement: *id015
258
260
  type: :runtime
259
- prerelease: false
260
- name: mimetype-fu
261
+ version_requirements: *id015
261
262
  - !ruby/object:Gem::Dependency
262
- version_requirements: &id016 !ruby/object:Gem::Requirement
263
+ name: eventmachine
264
+ prerelease: false
265
+ requirement: &id016 !ruby/object:Gem::Requirement
263
266
  none: false
264
267
  requirements:
265
268
  - - ">="
@@ -272,12 +275,12 @@ dependencies:
272
275
  - beta
273
276
  - 3
274
277
  version: 1.0.0.beta.3
275
- requirement: *id016
276
278
  type: :runtime
277
- prerelease: false
278
- name: eventmachine
279
+ version_requirements: *id016
279
280
  - !ruby/object:Gem::Dependency
280
- version_requirements: &id017 !ruby/object:Gem::Requirement
281
+ name: minitest
282
+ prerelease: false
283
+ requirement: &id017 !ruby/object:Gem::Requirement
281
284
  none: false
282
285
  requirements:
283
286
  - - ~>
@@ -288,12 +291,12 @@ dependencies:
288
291
  - 6
289
292
  - 1
290
293
  version: 2.6.1
291
- requirement: *id017
292
294
  type: :development
293
- prerelease: false
294
- name: minitest
295
+ version_requirements: *id017
295
296
  - !ruby/object:Gem::Dependency
296
- version_requirements: &id018 !ruby/object:Gem::Requirement
297
+ name: rake
298
+ prerelease: false
299
+ requirement: &id018 !ruby/object:Gem::Requirement
297
300
  none: false
298
301
  requirements:
299
302
  - - ">="
@@ -302,12 +305,12 @@ dependencies:
302
305
  segments:
303
306
  - 0
304
307
  version: "0"
305
- requirement: *id018
306
308
  type: :development
307
- prerelease: false
308
- name: rake
309
+ version_requirements: *id018
309
310
  - !ruby/object:Gem::Dependency
310
- version_requirements: &id019 !ruby/object:Gem::Requirement
311
+ name: mocha
312
+ prerelease: false
313
+ requirement: &id019 !ruby/object:Gem::Requirement
311
314
  none: false
312
315
  requirements:
313
316
  - - ">="
@@ -316,12 +319,12 @@ dependencies:
316
319
  segments:
317
320
  - 0
318
321
  version: "0"
319
- requirement: *id019
320
322
  type: :development
321
- prerelease: false
322
- name: mocha
323
+ version_requirements: *id019
323
324
  - !ruby/object:Gem::Dependency
324
- version_requirements: &id020 !ruby/object:Gem::Requirement
325
+ name: fakeweb
326
+ prerelease: false
327
+ requirement: &id020 !ruby/object:Gem::Requirement
325
328
  none: false
326
329
  requirements:
327
330
  - - ">="
@@ -330,10 +333,8 @@ dependencies:
330
333
  segments:
331
334
  - 0
332
335
  version: "0"
333
- requirement: *id020
334
336
  type: :development
335
- prerelease: false
336
- name: fakeweb
337
+ version_requirements: *id020
337
338
  description: Open-source Dropbox using Ruby and Git.
338
339
  email:
339
340
  - joshbuddy@gmail.com
@@ -430,6 +431,7 @@ files:
430
431
  - test/configuration_test.rb
431
432
  - test/runner_test.rb
432
433
  - test/test_helper.rb
434
+ has_rdoc: true
433
435
  homepage: http://engineering.gomiso.com/2011/11/30/collaborate-and-track-tasks-with-ease-using-gitdocs/
434
436
  licenses: []
435
437
 
@@ -459,7 +461,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
459
461
  requirements: []
460
462
 
461
463
  rubyforge_project: gitdocs
462
- rubygems_version: 1.8.10
464
+ rubygems_version: 1.6.2
463
465
  signing_key:
464
466
  specification_version: 3
465
467
  summary: Open-source Dropbox using Ruby and Git