gitdocs 0.3.0 → 0.3.1
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/gitdocs.gemspec +1 -0
- data/lib/gitdocs.rb +9 -29
- data/lib/gitdocs/configuration.rb +25 -0
- data/lib/gitdocs/manager.rb +58 -0
- data/lib/gitdocs/migration/003_create_configs.rb +11 -0
- data/lib/gitdocs/migration/004_add_index_for_path.rb +10 -0
- data/lib/gitdocs/runner.rb +5 -5
- data/lib/gitdocs/server.rb +10 -5
- data/lib/gitdocs/version.rb +1 -1
- data/lib/gitdocs/views/settings.haml +27 -10
- data/test/test_helper.rb +1 -0
- metadata +157 -141
    
        data/gitdocs.gemspec
    CHANGED
    
    | @@ -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'
         | 
    
        data/lib/gitdocs.rb
    CHANGED
    
    | @@ -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 | 
            -
                 | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 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,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
         | 
    
        data/lib/gitdocs/runner.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            module Gitdocs
         | 
| 2 2 | 
             
              class Runner
         | 
| 3 | 
            -
                 | 
| 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
         | 
    
        data/lib/gitdocs/server.rb
    CHANGED
    
    | @@ -4,14 +4,14 @@ require 'coderay' | |
| 4 4 |  | 
| 5 5 | 
             
            module Gitdocs
         | 
| 6 6 | 
             
              class Server
         | 
| 7 | 
            -
                def initialize( | 
| 8 | 
            -
                  @ | 
| 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 | 
            -
                   | 
| 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 =>  | 
| 22 | 
            +
                          get.render! 'settings', :layout => 'app', :locals => {:conf => manager.config}
         | 
| 23 23 | 
             
                          post do
         | 
| 24 | 
            -
                            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
         | 
    
        data/lib/gitdocs/version.rb
    CHANGED
    
    
| @@ -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 | 
            -
                   | 
| 17 | 
            -
                    % | 
| 18 | 
            -
             | 
| 19 | 
            -
                      % | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 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
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    
    
        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 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 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 | 
            -
               | 
| 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 | 
            -
               | 
| 25 | 
            -
             | 
| 26 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 27 | 
            +
              version_requirements: *id001
         | 
| 28 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 27 29 | 
             
              name: thin
         | 
| 28 | 
            -
               | 
| 30 | 
            +
              prerelease: false
         | 
| 31 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 29 32 | 
             
                none: false
         | 
| 30 | 
            -
                requirements:
         | 
| 31 | 
            -
                - -  | 
| 32 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                requirements: 
         | 
| 34 | 
            +
                - - ">="
         | 
| 35 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 36 | 
            +
                    version: "0"
         | 
| 34 37 | 
             
              type: :runtime
         | 
| 35 | 
            -
               | 
| 36 | 
            -
             | 
| 37 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 38 | 
            +
              version_requirements: *id002
         | 
| 39 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 38 40 | 
             
              name: renee
         | 
| 39 | 
            -
               | 
| 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 | 
            -
               | 
| 47 | 
            -
             | 
| 48 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 49 | 
            +
              version_requirements: *id003
         | 
| 50 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 49 51 | 
             
              name: redcarpet
         | 
| 50 | 
            -
               | 
| 52 | 
            +
              prerelease: false
         | 
| 53 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 51 54 | 
             
                none: false
         | 
| 52 | 
            -
                requirements:
         | 
| 53 | 
            -
                - -  | 
| 54 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 55 | 
            -
                    version:  | 
| 55 | 
            +
                requirements: 
         | 
| 56 | 
            +
                - - ">="
         | 
| 57 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 58 | 
            +
                    version: "0"
         | 
| 56 59 | 
             
              type: :runtime
         | 
| 57 | 
            -
               | 
| 58 | 
            -
             | 
| 59 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 60 | 
            +
              version_requirements: *id004
         | 
| 61 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 60 62 | 
             
              name: thor
         | 
| 61 | 
            -
               | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 62 65 | 
             
                none: false
         | 
| 63 | 
            -
                requirements:
         | 
| 64 | 
            -
                - -  | 
| 65 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 66 | 
            -
                    version:  | 
| 66 | 
            +
                requirements: 
         | 
| 67 | 
            +
                - - ">="
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 69 | 
            +
                    version: "0"
         | 
| 67 70 | 
             
              type: :runtime
         | 
| 68 | 
            -
               | 
| 69 | 
            -
             | 
| 70 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 71 | 
            +
              version_requirements: *id005
         | 
| 72 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 71 73 | 
             
              name: coderay
         | 
| 72 | 
            -
               | 
| 74 | 
            +
              prerelease: false
         | 
| 75 | 
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 73 76 | 
             
                none: false
         | 
| 74 | 
            -
                requirements:
         | 
| 75 | 
            -
                - -  | 
| 76 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            -
                    version:  | 
| 77 | 
            +
                requirements: 
         | 
| 78 | 
            +
                - - ">="
         | 
| 79 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 80 | 
            +
                    version: "0"
         | 
| 78 81 | 
             
              type: :runtime
         | 
| 79 | 
            -
               | 
| 80 | 
            -
             | 
| 81 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 82 | 
            +
              version_requirements: *id006
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 82 84 | 
             
              name: dante
         | 
| 83 | 
            -
               | 
| 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 | 
            -
               | 
| 91 | 
            -
             | 
| 92 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 93 | 
            +
              version_requirements: *id007
         | 
| 94 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 93 95 | 
             
              name: growl
         | 
| 94 | 
            -
               | 
| 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 | 
            -
               | 
| 102 | 
            -
             | 
| 103 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 104 | 
            +
              version_requirements: *id008
         | 
| 105 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 104 106 | 
             
              name: yajl-ruby
         | 
| 105 | 
            -
               | 
| 107 | 
            +
              prerelease: false
         | 
| 108 | 
            +
              requirement: &id009 !ruby/object:Gem::Requirement 
         | 
| 106 109 | 
             
                none: false
         | 
| 107 | 
            -
                requirements:
         | 
| 108 | 
            -
                - -  | 
| 109 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version:  | 
| 110 | 
            +
                requirements: 
         | 
| 111 | 
            +
                - - ">="
         | 
| 112 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 113 | 
            +
                    version: "0"
         | 
| 111 114 | 
             
              type: :runtime
         | 
| 112 | 
            -
               | 
| 113 | 
            -
             | 
| 114 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 115 | 
            +
              version_requirements: *id009
         | 
| 116 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 115 117 | 
             
              name: haml
         | 
| 116 | 
            -
               | 
| 118 | 
            +
              prerelease: false
         | 
| 119 | 
            +
              requirement: &id010 !ruby/object:Gem::Requirement 
         | 
| 117 120 | 
             
                none: false
         | 
| 118 | 
            -
                requirements:
         | 
| 119 | 
            -
                - -  | 
| 120 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 121 | 
            -
                    version:  | 
| 121 | 
            +
                requirements: 
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 124 | 
            +
                    version: "0"
         | 
| 122 125 | 
             
              type: :runtime
         | 
| 123 | 
            -
               | 
| 124 | 
            -
             | 
| 125 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              version_requirements: *id010
         | 
| 127 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 126 128 | 
             
              name: sqlite3
         | 
| 127 | 
            -
               | 
| 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 | 
            -
               | 
| 135 | 
            -
             | 
| 136 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 137 | 
            +
              version_requirements: *id011
         | 
| 138 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 137 139 | 
             
              name: activerecord
         | 
| 138 | 
            -
               | 
| 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 | 
            -
               | 
| 147 | 
            -
             | 
| 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 | 
            -
               | 
| 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 | 
            -
               | 
| 157 | 
            -
             | 
| 158 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 170 | 
            +
              version_requirements: *id014
         | 
| 171 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 159 172 | 
             
              name: rake
         | 
| 160 | 
            -
               | 
| 173 | 
            +
              prerelease: false
         | 
| 174 | 
            +
              requirement: &id015 !ruby/object:Gem::Requirement 
         | 
| 161 175 | 
             
                none: false
         | 
| 162 | 
            -
                requirements:
         | 
| 163 | 
            -
                - -  | 
| 164 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 165 | 
            -
                    version:  | 
| 176 | 
            +
                requirements: 
         | 
| 177 | 
            +
                - - ">="
         | 
| 178 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 179 | 
            +
                    version: "0"
         | 
| 166 180 | 
             
              type: :development
         | 
| 167 | 
            -
               | 
| 168 | 
            -
             | 
| 169 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 181 | 
            +
              version_requirements: *id015
         | 
| 182 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 170 183 | 
             
              name: mocha
         | 
| 171 | 
            -
               | 
| 184 | 
            +
              prerelease: false
         | 
| 185 | 
            +
              requirement: &id016 !ruby/object:Gem::Requirement 
         | 
| 172 186 | 
             
                none: false
         | 
| 173 | 
            -
                requirements:
         | 
| 174 | 
            -
                - -  | 
| 175 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 176 | 
            -
                    version:  | 
| 187 | 
            +
                requirements: 
         | 
| 188 | 
            +
                - - ">="
         | 
| 189 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 190 | 
            +
                    version: "0"
         | 
| 177 191 | 
             
              type: :development
         | 
| 178 | 
            -
               | 
| 179 | 
            -
             | 
| 180 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 192 | 
            +
              version_requirements: *id016
         | 
| 193 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 181 194 | 
             
              name: fakeweb
         | 
| 182 | 
            -
               | 
| 195 | 
            +
              prerelease: false
         | 
| 196 | 
            +
              requirement: &id017 !ruby/object:Gem::Requirement 
         | 
| 183 197 | 
             
                none: false
         | 
| 184 | 
            -
                requirements:
         | 
| 185 | 
            -
                - -  | 
| 186 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 187 | 
            -
                    version:  | 
| 198 | 
            +
                requirements: 
         | 
| 199 | 
            +
                - - ">="
         | 
| 200 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 201 | 
            +
                    version: "0"
         | 
| 188 202 | 
             
              type: :development
         | 
| 189 | 
            -
               | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 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:  | 
| 275 | 
            -
             | 
| 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:  | 
| 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. | 
| 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
         |