engineyard-serverside 1.6.0.pre5 → 1.6.3
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/lib/engineyard-serverside.rb +1 -3
- data/lib/engineyard-serverside/cli.rb +38 -73
- data/lib/engineyard-serverside/configuration.rb +12 -38
- data/lib/engineyard-serverside/deploy.rb +54 -63
- data/lib/engineyard-serverside/deploy_hook.rb +18 -21
- data/lib/engineyard-serverside/deprecation.rb +17 -9
- data/lib/engineyard-serverside/lockfile_parser.rb +1 -1
- data/lib/engineyard-serverside/logged_output.rb +91 -0
- data/lib/engineyard-serverside/rails_asset_support.rb +5 -5
- data/lib/engineyard-serverside/server.rb +11 -8
- data/lib/engineyard-serverside/strategies/git.rb +15 -12
- data/lib/engineyard-serverside/task.rb +8 -29
- data/lib/engineyard-serverside/version.rb +1 -1
- data/lib/vendor/systemu/LICENSE +3 -0
- data/lib/vendor/systemu/lib/systemu.rb +363 -0
- data/lib/vendor/systemu/systemu.gemspec +45 -0
- data/spec/basic_deploy_spec.rb +9 -9
- data/spec/bundler_deploy_spec.rb +1 -1
- data/spec/custom_deploy_spec.rb +4 -63
- data/spec/deploy_hook_spec.rb +78 -77
- data/spec/deprecation_spec.rb +26 -4
- data/spec/git_strategy_spec.rb +2 -6
- data/spec/logged_output_spec.rb +55 -0
- data/spec/nodejs_deploy_spec.rb +2 -2
- data/spec/services_deploy_spec.rb +10 -11
- data/spec/spec_helper.rb +25 -48
- data/spec/sqlite3_deploy_spec.rb +2 -1
- data/spec/support/integration.rb +14 -2
- metadata +79 -94
- data/lib/engineyard-serverside/shell.rb +0 -102
- data/lib/engineyard-serverside/shell/formatter.rb +0 -73
- data/lib/engineyard-serverside/shell/helpers.rb +0 -29
- data/lib/vendor/open4/lib/open4.rb +0 -432
- data/spec/shell_spec.rb +0 -50
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -17,10 +17,24 @@ module EY | |
| 17 17 | 
             
                  @node = nil
         | 
| 18 18 | 
             
                end
         | 
| 19 19 |  | 
| 20 | 
            -
                 | 
| 21 | 
            -
                  def  | 
| 22 | 
            -
                     | 
| 23 | 
            -
             | 
| 20 | 
            +
                module LoggedOutput
         | 
| 21 | 
            +
                  def self.enable_actual_info!
         | 
| 22 | 
            +
                    @use_actual_info = true
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def self.disable_actual_info!
         | 
| 26 | 
            +
                    @use_actual_info = false
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def self.use_actual_info?
         | 
| 30 | 
            +
                    @use_actual_info
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  alias old_info info
         | 
| 34 | 
            +
                  def info(*args)
         | 
| 35 | 
            +
                    if EY::Serverside::LoggedOutput.use_actual_info?
         | 
| 36 | 
            +
                      old_info(*args)
         | 
| 37 | 
            +
                    end
         | 
| 24 38 | 
             
                  end
         | 
| 25 39 | 
             
                end
         | 
| 26 40 |  | 
| @@ -37,7 +51,8 @@ FileUtils.rm_rf GITREPO_DIR if File.exists? GITREPO_DIR | |
| 37 51 | 
             
            Kernel.system "tar xzf #{GITREPO_DIR}.tar.gz -C #{FIXTURES_DIR}"
         | 
| 38 52 |  | 
| 39 53 | 
             
            Spec::Runner.configure do |config|
         | 
| 40 | 
            -
               | 
| 54 | 
            +
              `which npm 2>&1`
         | 
| 55 | 
            +
              $NPM_INSTALLED = ($? == 0)
         | 
| 41 56 | 
             
              unless $NPM_INSTALLED
         | 
| 42 57 | 
             
                $stderr.puts "npm not found; skipping Node.js specs."
         | 
| 43 58 | 
             
              end
         | 
| @@ -48,46 +63,10 @@ Spec::Runner.configure do |config| | |
| 48 63 | 
             
                EY::Serverside.dna_json = {}.to_json
         | 
| 49 64 | 
             
              end
         | 
| 50 65 |  | 
| 51 | 
            -
              class VerboseStringIO < StringIO
         | 
| 52 | 
            -
                def <<(str)
         | 
| 53 | 
            -
                  if ENV['VERBOSE'] || ENV['DEBUG']
         | 
| 54 | 
            -
                    $stderr << str
         | 
| 55 | 
            -
                  end
         | 
| 56 | 
            -
                  super
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
             | 
| 60 | 
            -
              def stdout
         | 
| 61 | 
            -
                @stdout ||= VerboseStringIO.new
         | 
| 62 | 
            -
              end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
              def stderr
         | 
| 65 | 
            -
                @stderr ||= VerboseStringIO.new
         | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
              def read_stdout
         | 
| 69 | 
            -
                stdout.rewind
         | 
| 70 | 
            -
                stdout.read
         | 
| 71 | 
            -
              end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
              def read_stderr
         | 
| 74 | 
            -
                stderr.rewind
         | 
| 75 | 
            -
                stderr.read
         | 
| 76 | 
            -
              end
         | 
| 77 | 
            -
             | 
| 78 | 
            -
              def read_output
         | 
| 79 | 
            -
                read_stdout + "\n" + read_stderr
         | 
| 80 | 
            -
              end
         | 
| 81 | 
            -
             | 
| 82 | 
            -
              def test_shell
         | 
| 83 | 
            -
                log_path =  Pathname.new(Dir.tmpdir).join("serverside-deploy-#{Time.now.to_i}-#{$$}.log")
         | 
| 84 | 
            -
                EY::Serverside::Shell.new(:verbose => true, :log_path => log_path, :stdout => stdout, :stderr => stderr)
         | 
| 85 | 
            -
              end
         | 
| 86 | 
            -
             | 
| 87 66 | 
             
              def deploy_test_application(assets_enabled = true, &block)
         | 
| 88 67 | 
             
                $DISABLE_GEMFILE = false
         | 
| 89 68 | 
             
                $DISABLE_LOCKFILE = false
         | 
| 90 | 
            -
                @deploy_dir =  | 
| 69 | 
            +
                @deploy_dir = File.join(Dir.tmpdir, "serverside-deploy-#{Time.now.to_i}-#{$$}")
         | 
| 91 70 |  | 
| 92 71 | 
             
                # set up EY::Serverside::Server like we're on a solo
         | 
| 93 72 | 
             
                EY::Serverside::Server.reset
         | 
| @@ -96,27 +75,25 @@ Spec::Runner.configure do |config| | |
| 96 75 | 
             
                # run a deploy
         | 
| 97 76 | 
             
                @config = EY::Serverside::Deploy::Configuration.new({
         | 
| 98 77 | 
             
                  "strategy"      => "IntegrationSpec",
         | 
| 99 | 
            -
                  "deploy_to"     => @deploy_dir | 
| 78 | 
            +
                  "deploy_to"     => @deploy_dir,
         | 
| 100 79 | 
             
                  "group"         => `id -gn`.strip,
         | 
| 101 80 | 
             
                  "stack"         => 'nginx_passenger',
         | 
| 102 81 | 
             
                  "migrate"       => "ruby -e 'puts ENV[\"PATH\"]' > #{@deploy_dir}/path-when-migrating",
         | 
| 103 82 | 
             
                  'app'           => 'rails31',
         | 
| 104 | 
            -
                  'environment'   => 'env',
         | 
| 105 | 
            -
                  'account'       => 'acc',
         | 
| 106 83 | 
             
                  'framework_env' => 'staging'
         | 
| 107 84 | 
             
                })
         | 
| 108 85 |  | 
| 109 86 | 
             
                # pretend there is a shared bundled_gems directory
         | 
| 110 | 
            -
                 | 
| 87 | 
            +
                FileUtils.mkdir_p(File.join(@deploy_dir, 'shared', 'bundled_gems'))
         | 
| 111 88 | 
             
                %w(RUBY_VERSION SYSTEM_VERSION).each do |name|
         | 
| 112 | 
            -
                   | 
| 89 | 
            +
                  File.open(File.join(@deploy_dir, 'shared', 'bundled_gems', name), "w") { |f| f.write("old\n") }
         | 
| 113 90 | 
             
                end
         | 
| 114 91 |  | 
| 115 92 | 
             
                # Set up the application directory to have the requested asset options.
         | 
| 116 93 | 
             
                prepare_rails31_app(assets_enabled)
         | 
| 117 94 |  | 
| 118 95 | 
             
                @binpath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'bin', 'engineyard-serverside'))
         | 
| 119 | 
            -
                @deployer = FullTestDeploy.new(@config | 
| 96 | 
            +
                @deployer = FullTestDeploy.new(@config)
         | 
| 120 97 | 
             
                @deployer.deploy(&block)
         | 
| 121 98 | 
             
              end
         | 
| 122 99 |  | 
    
        data/spec/sqlite3_deploy_spec.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe "Deploying an application with sqlite3 as the only DB adapter in the Gemfile.lock" do
         | 
| 4 | 
            -
              before | 
| 4 | 
            +
              before do
         | 
| 5 5 | 
             
                @release_path  = nil
         | 
| 6 6 | 
             
                @shared_path   = nil
         | 
| 7 7 | 
             
                @framework_env = nil
         | 
| @@ -17,6 +17,7 @@ describe "Deploying an application with sqlite3 as the only DB adapter in the Ge | |
| 17 17 | 
             
                  @framework_env             = deployer.framework_env
         | 
| 18 18 | 
             
                end
         | 
| 19 19 | 
             
              end
         | 
| 20 | 
            +
                
         | 
| 20 21 |  | 
| 21 22 | 
             
              it 'should symlink database.sqlite3.yml' do
         | 
| 22 23 | 
             
                File.exist?(File.join(@release_path, 'config', 'database.yml')).should be_true
         | 
    
        data/spec/support/integration.rb
    CHANGED
    
    | @@ -1,13 +1,25 @@ | |
| 1 1 | 
             
            class FullTestDeploy < EY::Serverside::Deploy
         | 
| 2 | 
            -
              attr_reader :commands
         | 
| 2 | 
            +
              attr_reader :infos, :debugs, :commands
         | 
| 3 3 |  | 
| 4 4 | 
             
              def initialize(*)
         | 
| 5 5 | 
             
                super
         | 
| 6 | 
            +
                @infos = []
         | 
| 7 | 
            +
                @debugs = []
         | 
| 6 8 | 
             
                @commands = []
         | 
| 7 9 | 
             
                @gemfile_contents = nil
         | 
| 8 10 | 
             
                @lockfile_contents = nil
         | 
| 9 11 | 
             
              end
         | 
| 10 12 |  | 
| 13 | 
            +
              # stfu
         | 
| 14 | 
            +
              def info(msg)
         | 
| 15 | 
            +
                @infos << msg
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              # no really, stfu
         | 
| 19 | 
            +
              def debug(msg)
         | 
| 20 | 
            +
                @debugs << msg
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 11 23 | 
             
              # passwordless sudo is neither guaranteed nor desired
         | 
| 12 24 | 
             
              def sudo(cmd)
         | 
| 13 25 | 
             
                run(cmd)
         | 
| @@ -201,7 +213,7 @@ module EY::Serverside::Strategies::NodeIntegrationSpec | |
| 201 213 | 
             
              "name": "node-example",
         | 
| 202 214 | 
             
              "version": "0.0.1",
         | 
| 203 215 | 
             
              "dependencies": {
         | 
| 204 | 
            -
                "express": "2. | 
| 216 | 
            +
                "express": "2.5.8"
         | 
| 205 217 | 
             
              }
         | 
| 206 218 | 
             
            }
         | 
| 207 219 | 
             
            EOF
         | 
    
        metadata
    CHANGED
    
    | @@ -1,94 +1,87 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: engineyard-serverside
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
              prerelease:  | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 1
         | 
| 8 | 
            -
              - 6
         | 
| 9 | 
            -
              - 0
         | 
| 10 | 
            -
              - pre
         | 
| 11 | 
            -
              - 5
         | 
| 12 | 
            -
              version: 1.6.0.pre5
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 1.6.3
         | 
| 5 | 
            +
              prerelease: 
         | 
| 13 6 | 
             
            platform: ruby
         | 
| 14 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 15 8 | 
             
            - EY Cloud Team
         | 
| 16 9 | 
             
            autorequire: 
         | 
| 17 10 | 
             
            bindir: bin
         | 
| 18 11 | 
             
            cert_chain: []
         | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 12 | 
            +
            date: 2012-03-26 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 23 15 | 
             
              name: rspec
         | 
| 24 | 
            -
               | 
| 25 | 
            -
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 16 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 26 17 | 
             
                none: false
         | 
| 27 | 
            -
                requirements: | 
| 28 | 
            -
                - -  | 
| 29 | 
            -
                  - !ruby/object:Gem::Version | 
| 30 | 
            -
                    hash: 31
         | 
| 31 | 
            -
                    segments: 
         | 
| 32 | 
            -
                    - 1
         | 
| 33 | 
            -
                    - 3
         | 
| 34 | 
            -
                    - 2
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - '='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 35 21 | 
             
                    version: 1.3.2
         | 
| 36 22 | 
             
              type: :development
         | 
| 37 | 
            -
              version_requirements: *id001
         | 
| 38 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 39 | 
            -
              name: rake
         | 
| 40 23 | 
             
              prerelease: false
         | 
| 41 | 
            -
               | 
| 24 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 42 25 | 
             
                none: false
         | 
| 43 | 
            -
                requirements: | 
| 44 | 
            -
                - -  | 
| 45 | 
            -
                  - !ruby/object:Gem::Version | 
| 46 | 
            -
                     | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 26 | 
            +
                requirements:
         | 
| 27 | 
            +
                - - '='
         | 
| 28 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 29 | 
            +
                    version: 1.3.2
         | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 31 | 
            +
              name: rake
         | 
| 32 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            +
                none: false
         | 
| 34 | 
            +
                requirements:
         | 
| 35 | 
            +
                - - ! '>='
         | 
| 36 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 52 37 | 
             
                    version: 0.9.2.2
         | 
| 53 38 | 
             
              type: :development
         | 
| 54 | 
            -
              version_requirements: *id002
         | 
| 55 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 56 | 
            -
              name: rdoc
         | 
| 57 39 | 
             
              prerelease: false
         | 
| 58 | 
            -
               | 
| 40 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            +
                none: false
         | 
| 42 | 
            +
                requirements:
         | 
| 43 | 
            +
                - - ! '>='
         | 
| 44 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            +
                    version: 0.9.2.2
         | 
| 46 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 47 | 
            +
              name: rdoc
         | 
| 48 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 59 49 | 
             
                none: false
         | 
| 60 | 
            -
                requirements: | 
| 61 | 
            -
                - -  | 
| 62 | 
            -
                  - !ruby/object:Gem::Version | 
| 63 | 
            -
                     | 
| 64 | 
            -
                    segments: 
         | 
| 65 | 
            -
                    - 0
         | 
| 66 | 
            -
                    version: "0"
         | 
| 50 | 
            +
                requirements:
         | 
| 51 | 
            +
                - - ! '>='
         | 
| 52 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            +
                    version: '0'
         | 
| 67 54 | 
             
              type: :development
         | 
| 68 | 
            -
              version_requirements: *id003
         | 
| 69 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 70 | 
            -
              name: timecop
         | 
| 71 55 | 
             
              prerelease: false
         | 
| 72 | 
            -
               | 
| 56 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 57 | 
             
                none: false
         | 
| 74 | 
            -
                requirements: | 
| 75 | 
            -
                - -  | 
| 76 | 
            -
                  - !ruby/object:Gem::Version | 
| 77 | 
            -
                     | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ! '>='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 63 | 
            +
              name: timecop
         | 
| 64 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                none: false
         | 
| 66 | 
            +
                requirements:
         | 
| 67 | 
            +
                - - ! '>='
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                    version: '0'
         | 
| 81 70 | 
             
              type: :development
         | 
| 82 | 
            -
               | 
| 71 | 
            +
              prerelease: false
         | 
| 72 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            +
                none: false
         | 
| 74 | 
            +
                requirements:
         | 
| 75 | 
            +
                - - ! '>='
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 77 | 
            +
                    version: '0'
         | 
| 83 78 | 
             
            description: 
         | 
| 84 79 | 
             
            email: cloud@engineyard.com
         | 
| 85 | 
            -
            executables: | 
| 80 | 
            +
            executables:
         | 
| 86 81 | 
             
            - engineyard-serverside
         | 
| 87 82 | 
             
            extensions: []
         | 
| 88 | 
            -
             | 
| 89 83 | 
             
            extra_rdoc_files: []
         | 
| 90 | 
            -
             | 
| 91 | 
            -
            files: 
         | 
| 84 | 
            +
            files:
         | 
| 92 85 | 
             
            - bin/engineyard-serverside
         | 
| 93 86 | 
             
            - lib/engineyard-serverside/cli.rb
         | 
| 94 87 | 
             
            - lib/engineyard-serverside/configuration.rb
         | 
| @@ -100,11 +93,9 @@ files: | |
| 100 93 | 
             
            - lib/engineyard-serverside/futures/celluloid.rb
         | 
| 101 94 | 
             
            - lib/engineyard-serverside/futures/dataflow.rb
         | 
| 102 95 | 
             
            - lib/engineyard-serverside/lockfile_parser.rb
         | 
| 96 | 
            +
            - lib/engineyard-serverside/logged_output.rb
         | 
| 103 97 | 
             
            - lib/engineyard-serverside/rails_asset_support.rb
         | 
| 104 98 | 
             
            - lib/engineyard-serverside/server.rb
         | 
| 105 | 
            -
            - lib/engineyard-serverside/shell/formatter.rb
         | 
| 106 | 
            -
            - lib/engineyard-serverside/shell/helpers.rb
         | 
| 107 | 
            -
            - lib/engineyard-serverside/shell.rb
         | 
| 108 99 | 
             
            - lib/engineyard-serverside/strategies/git.rb
         | 
| 109 100 | 
             
            - lib/engineyard-serverside/task.rb
         | 
| 110 101 | 
             
            - lib/engineyard-serverside/version.rb
         | 
| @@ -288,7 +279,9 @@ files: | |
| 288 279 | 
             
            - lib/vendor/json_pure/tools/fuzz.rb
         | 
| 289 280 | 
             
            - lib/vendor/json_pure/tools/server.rb
         | 
| 290 281 | 
             
            - lib/vendor/json_pure/VERSION
         | 
| 291 | 
            -
            - lib/vendor/ | 
| 282 | 
            +
            - lib/vendor/systemu/lib/systemu.rb
         | 
| 283 | 
            +
            - lib/vendor/systemu/LICENSE
         | 
| 284 | 
            +
            - lib/vendor/systemu/systemu.gemspec
         | 
| 292 285 | 
             
            - lib/vendor/thor/bin/rake2thor
         | 
| 293 286 | 
             
            - lib/vendor/thor/bin/thor
         | 
| 294 287 | 
             
            - lib/vendor/thor/CHANGELOG.rdoc
         | 
| @@ -351,51 +344,43 @@ files: | |
| 351 344 | 
             
            - spec/fixtures/valid_hook.rb
         | 
| 352 345 | 
             
            - spec/git_strategy_spec.rb
         | 
| 353 346 | 
             
            - spec/lockfile_parser_spec.rb
         | 
| 347 | 
            +
            - spec/logged_output_spec.rb
         | 
| 354 348 | 
             
            - spec/nodejs_deploy_spec.rb
         | 
| 355 349 | 
             
            - spec/rails31_deploy_spec.rb
         | 
| 356 350 | 
             
            - spec/restart_spec.rb
         | 
| 357 351 | 
             
            - spec/server_spec.rb
         | 
| 358 352 | 
             
            - spec/services_deploy_spec.rb
         | 
| 359 | 
            -
            - spec/shell_spec.rb
         | 
| 360 353 | 
             
            - spec/spec_helper.rb
         | 
| 361 354 | 
             
            - spec/sqlite3_deploy_spec.rb
         | 
| 362 355 | 
             
            - spec/support/integration.rb
         | 
| 363 356 | 
             
            homepage: http://github.com/engineyard/engineyard-serverside
         | 
| 364 357 | 
             
            licenses: []
         | 
| 365 | 
            -
             | 
| 366 358 | 
             
            post_install_message: 
         | 
| 367 359 | 
             
            rdoc_options: []
         | 
| 368 | 
            -
             | 
| 369 | 
            -
            require_paths: 
         | 
| 360 | 
            +
            require_paths:
         | 
| 370 361 | 
             
            - lib
         | 
| 371 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 362 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 372 363 | 
             
              none: false
         | 
| 373 | 
            -
              requirements: | 
| 374 | 
            -
              - -  | 
| 375 | 
            -
                - !ruby/object:Gem::Version | 
| 376 | 
            -
                   | 
| 377 | 
            -
                  segments: | 
| 364 | 
            +
              requirements:
         | 
| 365 | 
            +
              - - ! '>='
         | 
| 366 | 
            +
                - !ruby/object:Gem::Version
         | 
| 367 | 
            +
                  version: '0'
         | 
| 368 | 
            +
                  segments:
         | 
| 378 369 | 
             
                  - 0
         | 
| 379 | 
            -
                   | 
| 380 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 370 | 
            +
                  hash: -2108879952767088363
         | 
| 371 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 381 372 | 
             
              none: false
         | 
| 382 | 
            -
              requirements: | 
| 383 | 
            -
              - -  | 
| 384 | 
            -
                - !ruby/object:Gem::Version | 
| 385 | 
            -
                  hash: 23
         | 
| 386 | 
            -
                  segments: 
         | 
| 387 | 
            -
                  - 1
         | 
| 388 | 
            -
                  - 3
         | 
| 389 | 
            -
                  - 6
         | 
| 373 | 
            +
              requirements:
         | 
| 374 | 
            +
              - - ! '>='
         | 
| 375 | 
            +
                - !ruby/object:Gem::Version
         | 
| 390 376 | 
             
                  version: 1.3.6
         | 
| 391 377 | 
             
            requirements: []
         | 
| 392 | 
            -
             | 
| 393 378 | 
             
            rubyforge_project: 
         | 
| 394 | 
            -
            rubygems_version: 1.8. | 
| 379 | 
            +
            rubygems_version: 1.8.19
         | 
| 395 380 | 
             
            signing_key: 
         | 
| 396 381 | 
             
            specification_version: 3
         | 
| 397 382 | 
             
            summary: A gem that deploys ruby applications on EY Cloud instances
         | 
| 398 | 
            -
            test_files: | 
| 383 | 
            +
            test_files:
         | 
| 399 384 | 
             
            - spec/basic_deploy_spec.rb
         | 
| 400 385 | 
             
            - spec/bundler_deploy_spec.rb
         | 
| 401 386 | 
             
            - spec/custom_deploy_spec.rb
         | 
| @@ -423,12 +408,12 @@ test_files: | |
| 423 408 | 
             
            - spec/fixtures/valid_hook.rb
         | 
| 424 409 | 
             
            - spec/git_strategy_spec.rb
         | 
| 425 410 | 
             
            - spec/lockfile_parser_spec.rb
         | 
| 411 | 
            +
            - spec/logged_output_spec.rb
         | 
| 426 412 | 
             
            - spec/nodejs_deploy_spec.rb
         | 
| 427 413 | 
             
            - spec/rails31_deploy_spec.rb
         | 
| 428 414 | 
             
            - spec/restart_spec.rb
         | 
| 429 415 | 
             
            - spec/server_spec.rb
         | 
| 430 416 | 
             
            - spec/services_deploy_spec.rb
         | 
| 431 | 
            -
            - spec/shell_spec.rb
         | 
| 432 417 | 
             
            - spec/spec_helper.rb
         | 
| 433 418 | 
             
            - spec/sqlite3_deploy_spec.rb
         | 
| 434 419 | 
             
            - spec/support/integration.rb
         | 
| @@ -1,102 +0,0 @@ | |
| 1 | 
            -
            require 'logger'
         | 
| 2 | 
            -
            require 'pathname'
         | 
| 3 | 
            -
            require 'open4'
         | 
| 4 | 
            -
            require 'engineyard-serverside/shell/formatter'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            module EY
         | 
| 7 | 
            -
              module Serverside
         | 
| 8 | 
            -
                class Shell
         | 
| 9 | 
            -
                  class YieldIO
         | 
| 10 | 
            -
                    def initialize(&block)
         | 
| 11 | 
            -
                      @block = block
         | 
| 12 | 
            -
                    end
         | 
| 13 | 
            -
                    def <<(str)
         | 
| 14 | 
            -
                      @block.call str
         | 
| 15 | 
            -
                    end
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                  attr_reader :logger
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  def initialize(options)
         | 
| 21 | 
            -
                    @start_time = options[:start_time]
         | 
| 22 | 
            -
                    @verbose    = options[:verbose]
         | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
                    @stdout = options[:stdout] || $stdout
         | 
| 26 | 
            -
                    @stderr = options[:stderr] || $stderr
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                    log_pathname = Pathname.new(options[:log_path])
         | 
| 29 | 
            -
                    log_pathname.unlink if log_pathname.exist? # start fresh
         | 
| 30 | 
            -
                    @logger = Logger.new(log_pathname.to_s)
         | 
| 31 | 
            -
                    @logger.level = Logger::DEBUG # Always log to the file at debug, formatter hides debug for non-verbose
         | 
| 32 | 
            -
                    @logger.formatter = EY::Serverside::Shell::Formatter.new(@stdout, @stderr, start_time, @verbose)
         | 
| 33 | 
            -
                  end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                  def start_time
         | 
| 36 | 
            -
                    @start_time ||= Time.now
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  # a nice info outputter that prepends spermy operators for some reason.
         | 
| 40 | 
            -
                  def status(msg)
         | 
| 41 | 
            -
                    info msg.gsub(/^/, '~> ')
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                  def substatus(msg)
         | 
| 45 | 
            -
                    debug msg.gsub(/^/, ' ~ ')
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                  # a debug outputter that displays a command being run
         | 
| 49 | 
            -
                  # Formatis like this:
         | 
| 50 | 
            -
                  #   $ cmd blah do \
         | 
| 51 | 
            -
                  #   > something more
         | 
| 52 | 
            -
                  #   > end
         | 
| 53 | 
            -
                  def show_command(cmd)
         | 
| 54 | 
            -
                    debug cmd.gsub(/^/, '   > ').sub(/>/, '$')
         | 
| 55 | 
            -
                  end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                  def command_stdout(msg)
         | 
| 58 | 
            -
                    debug msg.gsub(/^/,'     ')
         | 
| 59 | 
            -
                  end
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                  def command_stderr(msg)
         | 
| 62 | 
            -
                    unknown msg.gsub(/^/,'     ')
         | 
| 63 | 
            -
                  end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                  def fatal(msg)   logger.fatal   "FATAL: #{msg}"   end
         | 
| 66 | 
            -
                  def error(msg)   logger.error   "ERROR: #{msg}"   end
         | 
| 67 | 
            -
                  def warning(msg) logger.warn    "WARNING: #{msg}" end
         | 
| 68 | 
            -
                  def notice(msg)  logger.warn    msg end
         | 
| 69 | 
            -
                  def info(msg)    logger.info    msg end
         | 
| 70 | 
            -
                  def debug(msg)   logger.debug   msg end
         | 
| 71 | 
            -
                  def unknown(msg) logger.unknown msg end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                  # Return an IO that outputs to stdout or not according to the verbosity settings
         | 
| 74 | 
            -
                  # debug is hidden in non-verbose mode
         | 
| 75 | 
            -
                  def out
         | 
| 76 | 
            -
                    YieldIO.new { |msg| command_stdout(msg) }
         | 
| 77 | 
            -
                  end
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                  # Return an IO that outputs to stderr
         | 
| 80 | 
            -
                  # unknown always shows, but without a severity title
         | 
| 81 | 
            -
                  def err
         | 
| 82 | 
            -
                    YieldIO.new { |msg| command_stderr(msg) }
         | 
| 83 | 
            -
                  end
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                  def logged_system(cmd)
         | 
| 86 | 
            -
                    show_command(cmd)
         | 
| 87 | 
            -
                    spawn_process(cmd, out, err)
         | 
| 88 | 
            -
                  end
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                  protected
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                  # spawn_process is a separate utility method so tests can override just the meat
         | 
| 93 | 
            -
                  # of the process spawning and not couple the tests too tightly with the implementation.
         | 
| 94 | 
            -
                  # we do this because Open4 LOVES to segfault in CI. FUN!
         | 
| 95 | 
            -
                  def spawn_process(cmd, cmd_stdout, cmd_stderr)
         | 
| 96 | 
            -
                    # :quiet means don't raise an error on nonzero exit status
         | 
| 97 | 
            -
                    result = Open4.spawn cmd, 0 => '', 1 => cmd_stdout, 2 => cmd_stderr, :quiet => true
         | 
| 98 | 
            -
                    result.exitstatus == 0
         | 
| 99 | 
            -
                  end
         | 
| 100 | 
            -
                end
         | 
| 101 | 
            -
              end
         | 
| 102 | 
            -
            end
         |