mortar 0.10.1 → 0.11.0
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.
- checksums.yaml +4 -4
- data/lib/mortar/command/plugins.rb +9 -3
- data/lib/mortar/local/pig.rb +66 -10
- data/lib/mortar/plugin.rb +18 -3
- data/lib/mortar/templates/script/runpig.sh +4 -4
- data/lib/mortar/version.rb +1 -1
- data/spec/mortar/command/local_spec.rb +4 -2
- data/spec/mortar/local/pig_spec.rb +15 -5
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 890d6f0f6d9f9171abb6ebafd62d23c70912eca5
         | 
| 4 | 
            +
              data.tar.gz: 89ff5f77688e7e4b49d1c5215f3e7186c0f22759
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 924bc9cafb357195565616fbf77bc91b8aa3b58b9271ff09d7365ad44f2c8e8ebef718180c2d6df77bf7280ea3c1834159d555f52effa5d419a06cff136946a2
         | 
| 7 | 
            +
              data.tar.gz: 63812c555e2a84345d3d1b82779dcaac9a4c4d67a18004cfb38e43c17a8263944f1c8bc8a4b04567d2248b313a4dc35fa65147b1b3c1117e5dfda8fe5b93faf7
         | 
| @@ -31,11 +31,13 @@ module Mortar::Command | |
| 31 31 | 
             
                  end
         | 
| 32 32 | 
             
                end
         | 
| 33 33 |  | 
| 34 | 
            -
                # plugins:install  | 
| 34 | 
            +
                # plugins:install GIT_URL
         | 
| 35 35 | 
             
                #
         | 
| 36 36 | 
             
                # install a plugin
         | 
| 37 37 | 
             
                #
         | 
| 38 | 
            -
                # | 
| 38 | 
            +
                # -b, --branchname BRANCHNAME   # Install plugin from a specific branch.
         | 
| 39 | 
            +
                #
         | 
| 40 | 
            +
                # Examples:
         | 
| 39 41 | 
             
                #
         | 
| 40 42 | 
             
                # $ mortar plugins:install https://github.com/mortardata/watchtower.git
         | 
| 41 43 | 
             
                # Installing watchtower... done
         | 
| @@ -47,7 +49,11 @@ module Mortar::Command | |
| 47 49 | 
             
                  action("Installing #{plugin.name}") do
         | 
| 48 50 | 
             
                    begin
         | 
| 49 51 | 
             
                      record_usage("plugin_install", plugin.name)
         | 
| 50 | 
            -
                       | 
| 52 | 
            +
                      if options[:branchname]
         | 
| 53 | 
            +
                        plugin.install(options[:branchname])
         | 
| 54 | 
            +
                      else
         | 
| 55 | 
            +
                        plugin.install
         | 
| 56 | 
            +
                      end
         | 
| 51 57 | 
             
                      Mortar::Plugin.load_plugin(plugin.name)
         | 
| 52 58 | 
             
                    rescue StandardError => e
         | 
| 53 59 | 
             
                      error e.message
         | 
    
        data/lib/mortar/local/pig.rb
    CHANGED
    
    | @@ -23,8 +23,17 @@ class Mortar::Local::Pig | |
| 23 23 | 
             
              include Mortar::Local::InstallUtil
         | 
| 24 24 |  | 
| 25 25 | 
             
              PIG_LOG_FORMAT = "humanreadable"
         | 
| 26 | 
            -
              PIG_TGZ_NAME = "pig. | 
| 27 | 
            -
              PIG_TGZ_DEFAULT_URL_PATH = "resource/ | 
| 26 | 
            +
              PIG_TGZ_NAME = "pig-0.9.tar.gz"
         | 
| 27 | 
            +
              PIG_TGZ_DEFAULT_URL_PATH = "resource/pig_0_9"
         | 
| 28 | 
            +
              LIB_TGZ_NAME = "lib-common.tar.gz"
         | 
| 29 | 
            +
              PIG_COMMON_LIB_URL_PATH = "resource/lib_common"
         | 
| 30 | 
            +
             | 
| 31 | 
            +
             | 
| 32 | 
            +
              #This needs to be defined for watchtower.
         | 
| 33 | 
            +
              DEFAULT_PIGOPTS_FILES = %w(
         | 
| 34 | 
            +
                  /lib-common/conf/pig-hawk-global.properties
         | 
| 35 | 
            +
                  /lib-common/conf/pig-cli-local-dev.properties
         | 
| 36 | 
            +
              )
         | 
| 28 37 |  | 
| 29 38 | 
             
              # Tempfile objects have a hook to delete the file when the object is
         | 
| 30 39 | 
             
              # destroyed by the garbage collector.  In practice this means that a
         | 
| @@ -74,7 +83,11 @@ class Mortar::Local::Pig | |
| 74 83 | 
             
              end
         | 
| 75 84 |  | 
| 76 85 | 
             
              def pig_directory
         | 
| 77 | 
            -
                return File.join(local_install_directory, "pig")
         | 
| 86 | 
            +
                return File.join(local_install_directory, "pig-0.9")
         | 
| 87 | 
            +
              end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
              def lib_directory
         | 
| 90 | 
            +
                return File.join(local_install_directory, "lib-common")
         | 
| 78 91 | 
             
              end
         | 
| 79 92 |  | 
| 80 93 | 
             
              def pig_archive_url
         | 
| @@ -83,31 +96,55 @@ class Mortar::Local::Pig | |
| 83 96 | 
             
                ENV.fetch('PIG_DISTRO_URL', default_url)
         | 
| 84 97 | 
             
              end
         | 
| 85 98 |  | 
| 99 | 
            +
              def lib_archive_url
         | 
| 100 | 
            +
                full_host  = (host =~ /^http/) ? host : "https://api.#{host}"
         | 
| 101 | 
            +
                default_url = full_host + "/" + PIG_COMMON_LIB_URL_PATH
         | 
| 102 | 
            +
                ENV.fetch('COMMON_LIB_DISTRO_URL', default_url)
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 86 105 | 
             
              # Determines if a pig install needs to occur, true if no pig install present
         | 
| 87 106 | 
             
              def should_do_pig_install?
         | 
| 88 107 | 
             
                not (File.exists?(pig_directory))
         | 
| 89 108 | 
             
              end
         | 
| 90 109 |  | 
| 110 | 
            +
              def should_do_lib_install?
         | 
| 111 | 
            +
                not (File.exists?(lib_directory))
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
             | 
| 91 114 | 
             
              # Determines if a pig install needs to occur, true if server side
         | 
| 92 115 | 
             
              # pig tgz is newer than date of the existing install
         | 
| 93 116 | 
             
              def should_do_pig_update?
         | 
| 94 | 
            -
                return is_newer_version('pig', pig_archive_url)
         | 
| 117 | 
            +
                return is_newer_version('pig-0.9', pig_archive_url)
         | 
| 118 | 
            +
              end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
              def should_do_lib_update?
         | 
| 121 | 
            +
                return is_newer_version('lib-common', lib_archive_url)
         | 
| 95 122 | 
             
              end
         | 
| 96 123 |  | 
| 97 124 | 
             
              def install_or_update()
         | 
| 98 125 | 
             
                if should_do_pig_install?
         | 
| 99 126 | 
             
                  action "Installing pig to #{local_install_directory_name}" do
         | 
| 100 | 
            -
                     | 
| 127 | 
            +
                    install_pig()
         | 
| 101 128 | 
             
                  end
         | 
| 102 129 | 
             
                elsif should_do_pig_update?
         | 
| 103 130 | 
             
                  action "Updating to latest pig in #{local_install_directory_name}" do
         | 
| 104 | 
            -
                     | 
| 131 | 
            +
                    install_pig()
         | 
| 132 | 
            +
                  end
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                if should_do_lib_install?
         | 
| 136 | 
            +
                  action "Installing pig dependencies to #{local_install_directory_name}" do
         | 
| 137 | 
            +
                    install_lib()
         | 
| 138 | 
            +
                  end
         | 
| 139 | 
            +
                elsif should_do_lib_update?
         | 
| 140 | 
            +
                  action "Updating to latest pig dependencies in #{local_install_directory_name}" do
         | 
| 141 | 
            +
                    install_lib()
         | 
| 105 142 | 
             
                  end
         | 
| 106 143 | 
             
                end
         | 
| 107 144 | 
             
              end
         | 
| 108 145 |  | 
| 109 146 | 
             
              # Installs pig for this project if it is not already present
         | 
| 110 | 
            -
              def  | 
| 147 | 
            +
              def install_pig
         | 
| 111 148 | 
             
                FileUtils.mkdir_p(local_install_directory)
         | 
| 112 149 | 
             
                local_tgz = File.join(local_install_directory, PIG_TGZ_NAME)
         | 
| 113 150 | 
             
                download_file(pig_archive_url, local_tgz)
         | 
| @@ -118,7 +155,17 @@ class Mortar::Local::Pig | |
| 118 155 | 
             
                FileUtils.chmod(0755, command)
         | 
| 119 156 |  | 
| 120 157 | 
             
                File.delete(local_tgz)
         | 
| 121 | 
            -
                note_install("pig")
         | 
| 158 | 
            +
                note_install("pig-0.9")
         | 
| 159 | 
            +
              end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
              def install_lib
         | 
| 162 | 
            +
                FileUtils.mkdir_p(local_install_directory)
         | 
| 163 | 
            +
                local_tgz = File.join(local_install_directory, LIB_TGZ_NAME)
         | 
| 164 | 
            +
                download_file(lib_archive_url, local_tgz)
         | 
| 165 | 
            +
                extract_tgz(local_tgz, local_install_directory)
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                File.delete(local_tgz)
         | 
| 168 | 
            +
                note_install("lib-common")
         | 
| 122 169 | 
             
              end
         | 
| 123 170 |  | 
| 124 171 | 
             
              def validate_script(pig_script, pig_parameters)
         | 
| @@ -275,13 +322,22 @@ class Mortar::Local::Pig | |
| 275 322 | 
             
                File.expand_path("../../templates/script/runpig.sh", __FILE__)
         | 
| 276 323 | 
             
              end
         | 
| 277 324 |  | 
| 325 | 
            +
              def template_params_classpath
         | 
| 326 | 
            +
                "#{pig_directory}/*:#{pig_directory}/lib-local/*:#{pig_directory}/lib-pig/*:#{pig_directory}/lib-cluster/*:#{lib_directory}/lib-pig/*:#{lib_directory}/lib-cluster/*:#{jython_directory}/jython.jar:#{lib_directory}/conf/jets3t.properties"
         | 
| 327 | 
            +
              end
         | 
| 328 | 
            +
             | 
| 329 | 
            +
              def log4j_conf
         | 
| 330 | 
            +
               "#{lib_directory}/conf/log4j-cli-local-dev.properties"
         | 
| 331 | 
            +
              end
         | 
| 332 | 
            +
             | 
| 278 333 | 
             
              # Parameters necessary for rendering the bash script template
         | 
| 279 334 | 
             
              def pig_command_script_template_parameters(cmd, pig_parameters)
         | 
| 280 335 | 
             
                template_params = {}
         | 
| 281 336 | 
             
                template_params['pig_params_file'] = make_pig_param_file(pig_parameters)
         | 
| 282 337 | 
             
                template_params['pig_home'] = pig_directory
         | 
| 283 | 
            -
                template_params['pig_classpath'] = "#{pig_directory}/lib-pig/*:#{jython_directory}/jython.jar"
         | 
| 284 | 
            -
                template_params['classpath'] =  | 
| 338 | 
            +
                template_params['pig_classpath'] = "#{pig_directory}/lib-local/*:#{pig_directory}/lib-pig/*:#{pig_directory}/lib-cluster/*:#{lib_directory}/lib-pig/*:#{lib_directory}/lib-cluster/*:#{jython_directory}/jython.jar"
         | 
| 339 | 
            +
                template_params['classpath'] = template_params_classpath
         | 
| 340 | 
            +
                template_params['log4j_conf'] = log4j_conf
         | 
| 285 341 | 
             
                template_params['project_home'] = File.expand_path("..", local_install_directory)
         | 
| 286 342 | 
             
                template_params['local_install_dir'] = local_install_directory
         | 
| 287 343 | 
             
                template_params['pig_sub_command'] = cmd
         | 
    
        data/lib/mortar/plugin.rb
    CHANGED
    
    | @@ -151,20 +151,35 @@ ERROR | |
| 151 151 | 
             
                  "#{self.class.directory}/#{name}"
         | 
| 152 152 | 
             
                end
         | 
| 153 153 |  | 
| 154 | 
            -
                def install
         | 
| 154 | 
            +
                def install(branch = nil)
         | 
| 155 155 | 
             
                  if File.directory?(path)
         | 
| 156 156 | 
             
                    uninstall
         | 
| 157 157 | 
             
                  end
         | 
| 158 158 | 
             
                  FileUtils.mkdir_p(self.class.directory)
         | 
| 159 159 | 
             
                  Dir.chdir(self.class.directory) do
         | 
| 160 | 
            -
                     | 
| 161 | 
            -
             | 
| 160 | 
            +
                    begin
         | 
| 161 | 
            +
                      git.git("clone #{uri}", check_success=true, check_git_directory=false)
         | 
| 162 | 
            +
                    rescue Mortar::Git::GitError
         | 
| 162 163 | 
             
                      FileUtils.rm_rf path
         | 
| 163 164 | 
             
                      raise Mortar::Plugin::ErrorInstallingPlugin, <<-ERROR
         | 
| 164 165 | 
             
            Unable to install plugin #{name}.
         | 
| 165 166 | 
             
            Please check the URL and try again.
         | 
| 166 167 | 
             
            ERROR
         | 
| 167 168 | 
             
                    end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                    if !!branch
         | 
| 171 | 
            +
                      Dir.chdir(name) do
         | 
| 172 | 
            +
                        begin
         | 
| 173 | 
            +
                          git.git("checkout #{branch}", check_success=true, check_git_directory=true)
         | 
| 174 | 
            +
                        rescue Mortar::Git::GitError
         | 
| 175 | 
            +
                          FileUtils.rm_rf path
         | 
| 176 | 
            +
                          raise Mortar::Plugin::ErrorInstallingPlugin, <<-ERROR
         | 
| 177 | 
            +
            Unable to checkout branch #{branch} for plugin #{name}.
         | 
| 178 | 
            +
            Please check the URL and branch and try again.
         | 
| 179 | 
            +
            ERROR
         | 
| 180 | 
            +
                        end
         | 
| 181 | 
            +
                      end
         | 
| 182 | 
            +
                    end
         | 
| 168 183 | 
             
                  end
         | 
| 169 184 | 
             
                  install_dependencies
         | 
| 170 185 | 
             
                  return true
         | 
| @@ -15,9 +15,9 @@ cd <%= @project_home %>/pigscripts | |
| 15 15 | 
             
            source <%= @local_install_dir %>/pythonenv/bin/activate
         | 
| 16 16 |  | 
| 17 17 | 
             
            # Run Pig
         | 
| 18 | 
            -
            <%= @local_install_dir %>/pig/bin/pig -exectype local \
         | 
| 19 | 
            -
                -log4jconf <%= @ | 
| 20 | 
            -
                -propertyFile <%= @local_install_dir %>/ | 
| 21 | 
            -
                -propertyFile <%= @local_install_dir %>/ | 
| 18 | 
            +
            <%= @local_install_dir %>/pig-0.9/bin/pig -exectype local \
         | 
| 19 | 
            +
                -log4jconf <%= @log4j_conf %> \
         | 
| 20 | 
            +
                -propertyFile <%= @local_install_dir %>/lib-common/conf/pig-hawk-global.properties \
         | 
| 21 | 
            +
                -propertyFile <%= @local_install_dir %>/lib-common/conf/pig-cli-local-dev.properties \
         | 
| 22 22 | 
             
                -param_file <%= @pig_params_file %> \
         | 
| 23 23 | 
             
                <%= @pig_sub_command %>
         | 
    
        data/lib/mortar/version.rb
    CHANGED
    
    
| @@ -152,7 +152,8 @@ PARAMS | |
| 152 152 | 
             
                      stub(j).check_install.returns(true)
         | 
| 153 153 | 
             
                    end
         | 
| 154 154 | 
             
                    any_instance_of(Mortar::Local::Pig) do |j|
         | 
| 155 | 
            -
                      stub(j). | 
| 155 | 
            +
                      stub(j).install_pig.returns(true)
         | 
| 156 | 
            +
                      stub(j).install_lib.returns(true)
         | 
| 156 157 | 
             
                    end
         | 
| 157 158 | 
             
                    any_instance_of(Mortar::Local::Python) do |j|
         | 
| 158 159 | 
             
                      stub(j).check_or_install.returns(false)
         | 
| @@ -166,7 +167,8 @@ PARAMS | |
| 166 167 | 
             
                      mock(j).check_install.returns(true)
         | 
| 167 168 | 
             
                    end
         | 
| 168 169 | 
             
                    any_instance_of(Mortar::Local::Pig) do |j|
         | 
| 169 | 
            -
                      mock(j). | 
| 170 | 
            +
                      mock(j).install_pig.returns(true)
         | 
| 171 | 
            +
                      stub(j).install_lib.returns(true)
         | 
| 170 172 | 
             
                    end
         | 
| 171 173 | 
             
                    any_instance_of(Mortar::Local::Python) do |j|
         | 
| 172 174 | 
             
                      mock(j).check_or_install.returns(true)
         | 
| @@ -41,10 +41,10 @@ module Mortar::Local | |
| 41 41 | 
             
                        FileUtils.touch(local_pig_archive)
         | 
| 42 42 | 
             
                      end
         | 
| 43 43 | 
             
                      mock(pig).extract_tgz(local_pig_archive, pig.local_install_directory)
         | 
| 44 | 
            -
                      mock(pig).note_install("pig")
         | 
| 44 | 
            +
                      mock(pig).note_install("pig-0.9")
         | 
| 45 45 | 
             
                      begin
         | 
| 46 46 | 
             
                        previous_stdout, $stdout = $stdout, StringIO.new
         | 
| 47 | 
            -
                        pig. | 
| 47 | 
            +
                        pig.install_pig
         | 
| 48 48 | 
             
                      ensure
         | 
| 49 49 | 
             
                        $stdout = previous_stdout
         | 
| 50 50 | 
             
                      end
         | 
| @@ -60,18 +60,25 @@ module Mortar::Local | |
| 60 60 | 
             
                    pig = Mortar::Local::Pig.new
         | 
| 61 61 | 
             
                    mock(pig).should_do_pig_install?.returns(false)
         | 
| 62 62 | 
             
                    mock(pig).should_do_pig_update?.returns(false)
         | 
| 63 | 
            +
                    mock(pig).should_do_lib_install?.returns(false)
         | 
| 64 | 
            +
                    mock(pig).should_do_lib_update?.returns(false)
         | 
| 63 65 | 
             
                    FakeFS do
         | 
| 64 66 | 
             
                      FileUtils.mkdir_p(File.dirname(pig.local_install_directory))
         | 
| 65 67 | 
             
                      FileUtils.rm_rf(pig.local_install_directory, :force => true)
         | 
| 66 68 | 
             
                      pig.install_or_update
         | 
| 67 | 
            -
                      expect(File.exists?(pig. | 
| 69 | 
            +
                      expect(File.exists?(pig.pig_directory)).to be_false
         | 
| 70 | 
            +
                      expect(File.exists?(pig.lib_directory)).to be_false
         | 
| 71 | 
            +
             | 
| 68 72 | 
             
                    end
         | 
| 69 73 | 
             
                  end
         | 
| 70 74 |  | 
| 71 75 | 
             
                  it "does install if none has been done before" do
         | 
| 72 76 | 
             
                    pig = Mortar::Local::Pig.new
         | 
| 73 77 | 
             
                    mock(pig).should_do_pig_install?.returns(true)
         | 
| 74 | 
            -
                    mock(pig). | 
| 78 | 
            +
                    mock(pig).should_do_lib_install?.returns(true)
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    mock(pig).install_pig
         | 
| 81 | 
            +
                    mock(pig).install_lib
         | 
| 75 82 | 
             
                    capture_stdout do
         | 
| 76 83 | 
             
                      pig.install_or_update
         | 
| 77 84 | 
             
                    end
         | 
| @@ -81,7 +88,10 @@ module Mortar::Local | |
| 81 88 | 
             
                    pig = Mortar::Local::Pig.new
         | 
| 82 89 | 
             
                    mock(pig).should_do_pig_install?.returns(false)
         | 
| 83 90 | 
             
                    mock(pig).should_do_pig_update?.returns(true)
         | 
| 84 | 
            -
                    mock(pig). | 
| 91 | 
            +
                    mock(pig).should_do_lib_install?.returns(false)
         | 
| 92 | 
            +
                    mock(pig).should_do_lib_update?.returns(true)
         | 
| 93 | 
            +
                    mock(pig).install_pig
         | 
| 94 | 
            +
                    mock(pig).install_lib
         | 
| 85 95 | 
             
                    capture_stdout do
         | 
| 86 96 | 
             
                      pig.install_or_update
         | 
| 87 97 | 
             
                    end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: mortar
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mortar Data
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2013-10- | 
| 11 | 
            +
            date: 2013-10-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rdoc
         |