gitdocs 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_dependency 'haml'
31
31
  s.add_dependency 'sqlite3', "~> 1.3.4"
32
32
  s.add_dependency 'activerecord', "~> 3.1.0"
33
+ s.add_dependency 'grit', "~> 2.4.1"
33
34
 
34
35
  s.add_development_dependency 'minitest', "~> 2.6.1"
35
36
  s.add_development_dependency 'rake'
@@ -3,44 +3,24 @@ require 'gitdocs/configuration'
3
3
  require 'gitdocs/runner'
4
4
  require 'gitdocs/server'
5
5
  require 'gitdocs/cli'
6
+ require 'gitdocs/manager'
6
7
  require 'thread'
7
8
  require 'rb-fsevent'
8
9
  require 'growl'
9
10
  require 'yajl'
10
11
  require 'dante'
12
+ require 'socket'
11
13
 
12
14
  module Gitdocs
13
15
 
14
16
  DEBUG = ENV['DEBUG']
15
17
 
16
- def self.run(config_root = nil, debug = DEBUG)
17
- loop do
18
- config = Configuration.new(config_root)
19
- yield config if block_given?
20
- puts "Gitdocs v#{VERSION}" if debug
21
- puts "Using configuration root: '#{config.config_root}'" if debug
22
- puts "Shares: #{config.shares.map(&:inspect).join(", ")}" if debug
23
- # Start the repo watchers
24
- runners = []
25
- threads = config.shares.map do |share|
26
- t = Thread.new(runners) { |r|
27
- runner = Runner.new(share)
28
- r << runner
29
- runner.run
30
- }
31
- t.abort_on_exception = true
32
- t
33
- end
34
- sleep 1
35
- unless defined?(pid) && pid
36
- # Start the web front-end
37
- pid = fork { Server.new(config, *runners).start }
38
- at_exit { Process.kill("KILL", pid) rescue nil }
39
- end
40
- puts "Watch threads: #{threads.map { |t| "Thread status: '#{t.status}', running: #{t.alive?}" }}" if debug
41
- puts "Joined #{threads.size} watch threads...running" if debug
42
- threads.each(&:join)
43
- sleep(60)
44
- end
18
+ def self.run(config_root = nil, debug = DEBUG, &blk)
19
+ @manager = Manager.new(config_root, debug, &blk)
20
+ @manager.run
21
+ end
22
+
23
+ def self.restart
24
+ @manager.restart
45
25
  end
46
26
  end
@@ -1,4 +1,5 @@
1
1
  require 'active_record'
2
+ require 'grit'
2
3
 
3
4
  module Gitdocs
4
5
  class Configuration
@@ -17,6 +18,24 @@ module Gitdocs
17
18
 
18
19
  class Share < ActiveRecord::Base
19
20
  attr_accessible :polling_interval, :path, :notification, :branch_name, :remote_name
21
+
22
+ def available_remotes
23
+ repo = Grit::Repo.new(path)
24
+ repo.remotes.map{|r| r.name}
25
+ rescue
26
+ nil
27
+ end
28
+
29
+ def available_branches
30
+ repo = Grit::Repo.new(path)
31
+ repo.heads.map{|r| r.name}
32
+ rescue
33
+ nil
34
+ end
35
+ end
36
+
37
+ class Config < ActiveRecord::Base
38
+ attr_accessible :load_browser_on_startup
20
39
  end
21
40
 
22
41
  def add_path(path, opts = nil)
@@ -33,6 +52,12 @@ module Gitdocs
33
52
  Share.all
34
53
  end
35
54
 
55
+ def global
56
+ raise if Config.all.size > 1
57
+ Config.create! if Config.all.empty?
58
+ Config.all.first
59
+ end
60
+
36
61
  def normalize_path(path)
37
62
  File.expand_path(path, Dir.pwd)
38
63
  end
@@ -0,0 +1,58 @@
1
+ module Gitdocs
2
+ Restart = Class.new(RuntimeError)
3
+
4
+ class Manager
5
+ attr_reader :config, :debug
6
+
7
+ def initialize(config_root, debug)
8
+ @config = Configuration.new(config_root)
9
+ @debug = debug
10
+ yield @config if block_given?
11
+ end
12
+
13
+ def run
14
+ loop do
15
+ puts "Gitdocs v#{VERSION}" if self.debug
16
+ puts "Using configuration root: '#{self.config.config_root}'" if self.debug
17
+ puts "Shares: #{config.shares.map(&:inspect).join(", ")}" if self.debug
18
+ # Start the repo watchers
19
+ runners = []
20
+ threads = config.shares.map do |share|
21
+ t = Thread.new(runners) { |r|
22
+ runner = Runner.new(share)
23
+ r << runner
24
+ runner.run
25
+ }
26
+ t.abort_on_exception = true
27
+ t
28
+ end
29
+ trap("USR1") { puts "stopping threads: #{threads.map(&:alive?)}"; runners.each { |r| r.listener.stop } }
30
+ sleep 1
31
+ unless @pid
32
+ # Start the web front-end
33
+ @pid = fork { Server.new(self, *runners).start }
34
+ at_exit { Process.kill("KILL", @pid) rescue nil }
35
+ end
36
+ puts "Watch threads: #{threads.map { |t| "Thread status: '#{t.status}', running: #{t.alive?}" }}" if self.debug
37
+ puts "Joined #{threads.size} watch threads...running" if self.debug
38
+ i = 0
39
+ web_started = false
40
+ begin
41
+ TCPSocket.open('127.0.0.1', 8888).close
42
+ web_started = true
43
+ rescue Errno::ECONNREFUSED
44
+ sleep 0.2
45
+ i += 1
46
+ retry if i <= 20
47
+ end
48
+ system("open http://localhost:8888/") if self.config.global.load_browser_on_startup && web_started
49
+ threads.each(&:join)
50
+ sleep(60) if threads.empty?
51
+ end
52
+ end
53
+
54
+ def restart
55
+ Process.kill("USR1", Process.pid)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,11 @@
1
+ class CreateConfigs < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :configs do |t|
4
+ t.column :load_browser_on_startup, :boolean, :default => true
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ raise
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class AddIndexForPath < ActiveRecord::Migration
2
+ def self.up
3
+ shares = Gitdocs::Configuration::Share.all.inject(Hash.new{|h,k| h[k] = []}) {|h, s| h[s.path] << s; h}
4
+ shares.each do |path, shares|
5
+ shares.shift
6
+ shares.each(&:destroy) unless shares.empty?
7
+ end
8
+ add_index :shares, :path, :unique => true
9
+ end
10
+ end
@@ -1,6 +1,6 @@
1
1
  module Gitdocs
2
2
  class Runner
3
- attr_accessor :root
3
+ attr_reader :root, :listener
4
4
 
5
5
  def initialize(share)
6
6
  @share = share
@@ -29,16 +29,16 @@ module Gitdocs
29
29
  end.abort_on_exception = true
30
30
 
31
31
  # Listen for changes in local repository
32
- listener = FSEvent.new
33
- listener.watch(@root) do |directories|
32
+ @listener = FSEvent.new
33
+ @listener.watch(@root) do |directories|
34
34
  directories.uniq!
35
35
  directories.delete_if {|d| d =~ /\/\.git/}
36
36
  unless directories.empty?
37
37
  mutex.synchronize { push_changes }
38
38
  end
39
39
  end
40
- at_exit { listener.stop }
41
- listener.run
40
+ at_exit { @listener.stop }
41
+ @listener.run
42
42
  end
43
43
 
44
44
  def sync_changes
@@ -4,14 +4,14 @@ require 'coderay'
4
4
 
5
5
  module Gitdocs
6
6
  class Server
7
- def initialize(config, *gitdocs)
8
- @config = config
7
+ def initialize(manager, *gitdocs)
8
+ @manager = manager
9
9
  @gitdocs = gitdocs
10
10
  end
11
11
 
12
12
  def start(port = 8888)
13
13
  gds = @gitdocs
14
- conf = @config
14
+ manager = @manager
15
15
  Thin::Server.start('127.0.0.1', port) do
16
16
  use Rack::Static, :urls => ['/css', '/js', '/img', '/doc'], :root => File.expand_path("../public", __FILE__)
17
17
  run Renee {
@@ -19,12 +19,17 @@ module Gitdocs
19
19
  render! "home", :layout => 'app', :locals => {:gds => gds}
20
20
  else
21
21
  path 'settings' do
22
- get.render! 'settings', :layout => 'app', :locals => {:conf => conf}
22
+ get.render! 'settings', :layout => 'app', :locals => {:conf => manager.config}
23
23
  post do
24
- shares = conf.shares
24
+ shares = manager.config.shares
25
+ manager.config.global.update_attributes(request.POST['config'])
25
26
  request.POST['share'].each do |idx, share|
27
+ if remote_branch = share.delete('remote_branch')
28
+ share['remote_name'], share['branch_name'] = remote_branch.split('/', 2)
29
+ end
26
30
  shares[Integer(idx)].update_attributes(share)
27
31
  end
32
+ manager.restart
28
33
  redirect! '/settings'
29
34
  end
30
35
  end
@@ -1,3 +1,3 @@
1
1
  module Gitdocs
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -1,8 +1,16 @@
1
1
  %h1 Settings
2
2
 
3
- %h2 Shares
4
-
5
3
  %form{:method => 'POST', :action => '/settings'}
4
+ %h2 Gitdocs
5
+ %div{:id => "config", :class => "config"}
6
+ %dl
7
+ %dt Open browser on startup?
8
+ %dd
9
+ %input{:type =>'hidden', :value => '0', :name=>"config[load_browser_on_startup]"}
10
+ %input{:type =>'checkbox', :value => '1', :name=>"config[load_browser_on_startup]", :checked => conf.global.load_browser_on_startup ? 'checked' : nil}
11
+
12
+
13
+ %h2 Shares
6
14
  -conf.shares.each_with_index do |share, idx|
7
15
  %div{:id => "share-#{idx}", :class => "share #{idx % 2 == 0 ? 'even' : 'odd'}"}
8
16
  %dl
@@ -13,14 +21,23 @@
13
21
  %dt Polling interval
14
22
  %dd
15
23
  %input{:name=>"share[#{idx}][polling_interval]", :value => share.polling_interval}
16
- %dl
17
- %dt Remote
18
- %dd
19
- %input{:name=>"share[#{idx}][remote_name]", :value => share.remote_name}
20
- %dl
21
- %dt Branch
22
- %dd
23
- %input{:name=>"share[#{idx}][branch_name]", :value => share.branch_name}
24
+ -if share.available_remotes
25
+ %dl
26
+ %dt Remote
27
+ %dd
28
+ %select{:name=>"share[#{idx}][remote_branch]"}
29
+ -share.available_remotes.each do |remote|
30
+ %option{:value => remote, :selected => remote == "#{share.remote_name}/#{share.branch_name}" ? 'selected' : nil}
31
+ =remote
32
+ -else
33
+ %dl
34
+ %dt Remote
35
+ %dd
36
+ %input{:name=>"share[#{idx}][remote_name]", :value => share.remote_name}
37
+ %dl
38
+ %dt Branch
39
+ %dd
40
+ %input{:name=>"share[#{idx}][branch_name]", :value => share.branch_name}
24
41
  %dl
25
42
  %dt Notifications?
26
43
  %dd
@@ -56,6 +56,7 @@ class MiniTest::Spec
56
56
  begin
57
57
  puts "RUNNING!"
58
58
  Gitdocs.run(conf_path) do |conf|
59
+ conf.global.update_attributes(:load_browser_on_startup => false)
59
60
  conf.add_path(path, :polling_interval => 0.1, :notification => false)
60
61
  end
61
62
  rescue
metadata CHANGED
@@ -1,202 +1,217 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gitdocs
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.3.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Josh Hull
9
9
  - Nathan Esquenazi
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-05 00:00:00.000000000Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
13
+
14
+ date: 2011-12-05 00:00:00 -08:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
16
18
  name: rb-fsevent
17
- requirement: &70265086574980 !ruby/object:Gem::Requirement
19
+ prerelease: false
20
+ requirement: &id001 !ruby/object:Gem::Requirement
18
21
  none: false
19
- requirements:
22
+ requirements:
20
23
  - - ~>
21
- - !ruby/object:Gem::Version
24
+ - !ruby/object:Gem::Version
22
25
  version: 0.4.3.1
23
26
  type: :runtime
24
- prerelease: false
25
- version_requirements: *70265086574980
26
- - !ruby/object:Gem::Dependency
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
27
29
  name: thin
28
- requirement: &70265086574080 !ruby/object:Gem::Requirement
30
+ prerelease: false
31
+ requirement: &id002 !ruby/object:Gem::Requirement
29
32
  none: false
30
- requirements:
31
- - - ! '>='
32
- - !ruby/object:Gem::Version
33
- version: '0'
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: "0"
34
37
  type: :runtime
35
- prerelease: false
36
- version_requirements: *70265086574080
37
- - !ruby/object:Gem::Dependency
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
38
40
  name: renee
39
- requirement: &70265086572080 !ruby/object:Gem::Requirement
41
+ prerelease: false
42
+ requirement: &id003 !ruby/object:Gem::Requirement
40
43
  none: false
41
- requirements:
44
+ requirements:
42
45
  - - ~>
43
- - !ruby/object:Gem::Version
46
+ - !ruby/object:Gem::Version
44
47
  version: 0.3.6
45
48
  type: :runtime
46
- prerelease: false
47
- version_requirements: *70265086572080
48
- - !ruby/object:Gem::Dependency
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
49
51
  name: redcarpet
50
- requirement: &70265086571200 !ruby/object:Gem::Requirement
52
+ prerelease: false
53
+ requirement: &id004 !ruby/object:Gem::Requirement
51
54
  none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '0'
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
56
59
  type: :runtime
57
- prerelease: false
58
- version_requirements: *70265086571200
59
- - !ruby/object:Gem::Dependency
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
60
62
  name: thor
61
- requirement: &70265086570280 !ruby/object:Gem::Requirement
63
+ prerelease: false
64
+ requirement: &id005 !ruby/object:Gem::Requirement
62
65
  none: false
63
- requirements:
64
- - - ! '>='
65
- - !ruby/object:Gem::Version
66
- version: '0'
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
67
70
  type: :runtime
68
- prerelease: false
69
- version_requirements: *70265086570280
70
- - !ruby/object:Gem::Dependency
71
+ version_requirements: *id005
72
+ - !ruby/object:Gem::Dependency
71
73
  name: coderay
72
- requirement: &70265086568440 !ruby/object:Gem::Requirement
74
+ prerelease: false
75
+ requirement: &id006 !ruby/object:Gem::Requirement
73
76
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
78
81
  type: :runtime
79
- prerelease: false
80
- version_requirements: *70265086568440
81
- - !ruby/object:Gem::Dependency
82
+ version_requirements: *id006
83
+ - !ruby/object:Gem::Dependency
82
84
  name: dante
83
- requirement: &70265086567200 !ruby/object:Gem::Requirement
85
+ prerelease: false
86
+ requirement: &id007 !ruby/object:Gem::Requirement
84
87
  none: false
85
- requirements:
88
+ requirements:
86
89
  - - ~>
87
- - !ruby/object:Gem::Version
90
+ - !ruby/object:Gem::Version
88
91
  version: 0.0.4
89
92
  type: :runtime
90
- prerelease: false
91
- version_requirements: *70265086567200
92
- - !ruby/object:Gem::Dependency
93
+ version_requirements: *id007
94
+ - !ruby/object:Gem::Dependency
93
95
  name: growl
94
- requirement: &70265086565200 !ruby/object:Gem::Requirement
96
+ prerelease: false
97
+ requirement: &id008 !ruby/object:Gem::Requirement
95
98
  none: false
96
- requirements:
99
+ requirements:
97
100
  - - ~>
98
- - !ruby/object:Gem::Version
101
+ - !ruby/object:Gem::Version
99
102
  version: 1.0.3
100
103
  type: :runtime
101
- prerelease: false
102
- version_requirements: *70265086565200
103
- - !ruby/object:Gem::Dependency
104
+ version_requirements: *id008
105
+ - !ruby/object:Gem::Dependency
104
106
  name: yajl-ruby
105
- requirement: &70265086564420 !ruby/object:Gem::Requirement
107
+ prerelease: false
108
+ requirement: &id009 !ruby/object:Gem::Requirement
106
109
  none: false
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: "0"
111
114
  type: :runtime
112
- prerelease: false
113
- version_requirements: *70265086564420
114
- - !ruby/object:Gem::Dependency
115
+ version_requirements: *id009
116
+ - !ruby/object:Gem::Dependency
115
117
  name: haml
116
- requirement: &70265086563360 !ruby/object:Gem::Requirement
118
+ prerelease: false
119
+ requirement: &id010 !ruby/object:Gem::Requirement
117
120
  none: false
118
- requirements:
119
- - - ! '>='
120
- - !ruby/object:Gem::Version
121
- version: '0'
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: "0"
122
125
  type: :runtime
123
- prerelease: false
124
- version_requirements: *70265086563360
125
- - !ruby/object:Gem::Dependency
126
+ version_requirements: *id010
127
+ - !ruby/object:Gem::Dependency
126
128
  name: sqlite3
127
- requirement: &70265086562040 !ruby/object:Gem::Requirement
129
+ prerelease: false
130
+ requirement: &id011 !ruby/object:Gem::Requirement
128
131
  none: false
129
- requirements:
132
+ requirements:
130
133
  - - ~>
131
- - !ruby/object:Gem::Version
134
+ - !ruby/object:Gem::Version
132
135
  version: 1.3.4
133
136
  type: :runtime
134
- prerelease: false
135
- version_requirements: *70265086562040
136
- - !ruby/object:Gem::Dependency
137
+ version_requirements: *id011
138
+ - !ruby/object:Gem::Dependency
137
139
  name: activerecord
138
- requirement: &70265086560080 !ruby/object:Gem::Requirement
140
+ prerelease: false
141
+ requirement: &id012 !ruby/object:Gem::Requirement
139
142
  none: false
140
- requirements:
143
+ requirements:
141
144
  - - ~>
142
- - !ruby/object:Gem::Version
145
+ - !ruby/object:Gem::Version
143
146
  version: 3.1.0
144
147
  type: :runtime
148
+ version_requirements: *id012
149
+ - !ruby/object:Gem::Dependency
150
+ name: grit
145
151
  prerelease: false
146
- version_requirements: *70265086560080
147
- - !ruby/object:Gem::Dependency
152
+ requirement: &id013 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: 2.4.1
158
+ type: :runtime
159
+ version_requirements: *id013
160
+ - !ruby/object:Gem::Dependency
148
161
  name: minitest
149
- requirement: &70265086558540 !ruby/object:Gem::Requirement
162
+ prerelease: false
163
+ requirement: &id014 !ruby/object:Gem::Requirement
150
164
  none: false
151
- requirements:
165
+ requirements:
152
166
  - - ~>
153
- - !ruby/object:Gem::Version
167
+ - !ruby/object:Gem::Version
154
168
  version: 2.6.1
155
169
  type: :development
156
- prerelease: false
157
- version_requirements: *70265086558540
158
- - !ruby/object:Gem::Dependency
170
+ version_requirements: *id014
171
+ - !ruby/object:Gem::Dependency
159
172
  name: rake
160
- requirement: &70265086557020 !ruby/object:Gem::Requirement
173
+ prerelease: false
174
+ requirement: &id015 !ruby/object:Gem::Requirement
161
175
  none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: "0"
166
180
  type: :development
167
- prerelease: false
168
- version_requirements: *70265086557020
169
- - !ruby/object:Gem::Dependency
181
+ version_requirements: *id015
182
+ - !ruby/object:Gem::Dependency
170
183
  name: mocha
171
- requirement: &70265086554480 !ruby/object:Gem::Requirement
184
+ prerelease: false
185
+ requirement: &id016 !ruby/object:Gem::Requirement
172
186
  none: false
173
- requirements:
174
- - - ! '>='
175
- - !ruby/object:Gem::Version
176
- version: '0'
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: "0"
177
191
  type: :development
178
- prerelease: false
179
- version_requirements: *70265086554480
180
- - !ruby/object:Gem::Dependency
192
+ version_requirements: *id016
193
+ - !ruby/object:Gem::Dependency
181
194
  name: fakeweb
182
- requirement: &70265086552960 !ruby/object:Gem::Requirement
195
+ prerelease: false
196
+ requirement: &id017 !ruby/object:Gem::Requirement
183
197
  none: false
184
- requirements:
185
- - - ! '>='
186
- - !ruby/object:Gem::Version
187
- version: '0'
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: "0"
188
202
  type: :development
189
- prerelease: false
190
- version_requirements: *70265086552960
203
+ version_requirements: *id017
191
204
  description: Open-source Dropbox using Ruby and Git.
192
- email:
205
+ email:
193
206
  - joshbuddy@gmail.com
194
207
  - nesquena@gmail.com
195
- executables:
208
+ executables:
196
209
  - gitdocs
197
210
  extensions: []
211
+
198
212
  extra_rdoc_files: []
199
- files:
213
+
214
+ files:
200
215
  - .gitignore
201
216
  - Gemfile
202
217
  - LICENSE
@@ -207,8 +222,11 @@ files:
207
222
  - lib/gitdocs.rb
208
223
  - lib/gitdocs/cli.rb
209
224
  - lib/gitdocs/configuration.rb
225
+ - lib/gitdocs/manager.rb
210
226
  - lib/gitdocs/migration/001_create_shares.rb
211
227
  - lib/gitdocs/migration/002_add_remote_branch.rb
228
+ - lib/gitdocs/migration/003_create_configs.rb
229
+ - lib/gitdocs/migration/004_add_index_for_path.rb
212
230
  - lib/gitdocs/public/css/app.css
213
231
  - lib/gitdocs/public/css/coderay.css
214
232
  - lib/gitdocs/public/css/reset.css
@@ -260,37 +278,35 @@ files:
260
278
  - test/configuration_test.rb
261
279
  - test/runner_test.rb
262
280
  - test/test_helper.rb
281
+ has_rdoc: true
263
282
  homepage: http://engineering.gomiso.com/2011/11/30/collaborate-and-track-tasks-with-ease-using-gitdocs/
264
283
  licenses: []
284
+
265
285
  post_install_message:
266
286
  rdoc_options: []
267
- require_paths:
287
+
288
+ require_paths:
268
289
  - lib
269
- required_ruby_version: !ruby/object:Gem::Requirement
290
+ required_ruby_version: !ruby/object:Gem::Requirement
270
291
  none: false
271
- requirements:
272
- - - ! '>='
273
- - !ruby/object:Gem::Version
274
- version: '0'
275
- segments:
276
- - 0
277
- hash: -859134024134666501
278
- required_rubygems_version: !ruby/object:Gem::Requirement
292
+ requirements:
293
+ - - ">="
294
+ - !ruby/object:Gem::Version
295
+ version: "0"
296
+ required_rubygems_version: !ruby/object:Gem::Requirement
279
297
  none: false
280
- requirements:
281
- - - ! '>='
282
- - !ruby/object:Gem::Version
283
- version: '0'
284
- segments:
285
- - 0
286
- hash: -859134024134666501
298
+ requirements:
299
+ - - ">="
300
+ - !ruby/object:Gem::Version
301
+ version: "0"
287
302
  requirements: []
303
+
288
304
  rubyforge_project: gitdocs
289
- rubygems_version: 1.8.10
305
+ rubygems_version: 1.6.2
290
306
  signing_key:
291
307
  specification_version: 3
292
308
  summary: Open-source Dropbox using Ruby and Git
293
- test_files:
309
+ test_files:
294
310
  - test/configuration_test.rb
295
311
  - test/runner_test.rb
296
312
  - test/test_helper.rb