gitdocs 0.4.13 → 0.4.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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