dapp 0.10.4 → 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/dapp.rb +1 -0
- data/lib/dapp/dapp/deps/base.rb +2 -2
- data/lib/dapp/dimg/build/stage/artifact_default.rb +23 -35
- data/lib/dapp/dimg/build/stage/base.rb +1 -1
- data/lib/dapp/dimg/build/stage/before_setup.rb +2 -0
- data/lib/dapp/dimg/build/stage/build_artifact.rb +2 -0
- data/lib/dapp/dimg/build/stage/install/install.rb +1 -0
- data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +23 -0
- data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -0
- data/lib/dapp/dimg/git_artifact.rb +13 -29
- data/lib/dapp/dimg/git_repo/base.rb +1 -13
- data/lib/dapp/dimg/git_repo/own.rb +1 -9
- data/lib/dapp/version.rb +2 -2
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b9bde6d6e0a2f2f7d9d630dfd5307d87900aefba
         | 
| 4 | 
            +
              data.tar.gz: 4cfa173162595e257a8e5e0f0c8fbd70dba8c576
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0a5fcb98d67e9d4111b22d4252623e661c348dfdb1bc0d7ff4404a2db8d9f1ba164782aa0953c8186edd641363f067261d251ecf8f505805daa18add74f5088e
         | 
| 7 | 
            +
              data.tar.gz: 7d001567b2075340f756334d281c23d7eb4bff6331d34299e23203d79a04fb0e0730217f2c8ccf424b52862d30adf65c4f07f0046424e0046c557ae4fff0f333
         | 
    
        data/lib/dapp.rb
    CHANGED
    
    | @@ -64,6 +64,7 @@ require 'dapp/dimg/builder/shell' | |
| 64 64 | 
             
            require 'dapp/dimg/builder/none'
         | 
| 65 65 | 
             
            require 'dapp/dimg/build/stage/mod/logging'
         | 
| 66 66 | 
             
            require 'dapp/dimg/build/stage/mod/group'
         | 
| 67 | 
            +
            require 'dapp/dimg/build/stage/mod/git_artifact_dependencies'
         | 
| 67 68 | 
             
            require 'dapp/dimg/build/stage/base'
         | 
| 68 69 | 
             
            require 'dapp/dimg/build/stage/ga_base'
         | 
| 69 70 | 
             
            require 'dapp/dimg/build/stage/ga_dependencies_base'
         | 
    
        data/lib/dapp/dapp/deps/base.rb
    CHANGED
    
    | @@ -24,8 +24,8 @@ module Dapp | |
| 24 24 | 
             
                    end
         | 
| 25 25 |  | 
| 26 26 | 
             
                    %w(rm rsync diff date cat
         | 
| 27 | 
            -
                       stat  | 
| 28 | 
            -
                       install sed cp true | 
| 27 | 
            +
                       stat test sleep mkdir find
         | 
| 28 | 
            +
                       install sed cp true
         | 
| 29 29 | 
             
                       bash tar sudo).each do |cmd|
         | 
| 30 30 | 
             
                      define_method("#{cmd}_bin") { "/.dapp/deps/base/#{BASE_VERSION}/bin/#{cmd}" }
         | 
| 31 31 | 
             
                    end
         | 
| @@ -30,44 +30,32 @@ module Dapp | |
| 30 30 |  | 
| 31 31 | 
             
                      # rubocop:disable Metrics/ParameterLists
         | 
| 32 32 | 
             
                      def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
         | 
| 33 | 
            -
                        '' | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
                              cmd << " --filter='-/ #{File.join(from, p)}'"
         | 
| 46 | 
            -
                            end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                            include_paths.each do |p|
         | 
| 49 | 
            -
                              # * На данный момент не знаем директорию или файл имел в виду пользователь,
         | 
| 50 | 
            -
                              #   поэтому подставляем фильтры для обоих возможных случаев.
         | 
| 51 | 
            -
                              # * Автоматом подставляем паттерн ** для включения файлов, содержащихся в
         | 
| 52 | 
            -
                              #   директории, которую пользователь указал в include_paths.
         | 
| 53 | 
            -
                              cmd << " --filter='+/ #{File.join(from, p)}'"
         | 
| 54 | 
            -
                              cmd << " --filter='+/ #{File.join(from, p, '**')}'"
         | 
| 55 | 
            -
                            end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                            # Все что не подошло по include — исключается
         | 
| 58 | 
            -
                            cmd << " --filter='-/ #{File.join(from, '**')}'"
         | 
| 59 | 
            -
                          else
         | 
| 60 | 
            -
                            exclude_paths.each do |p|
         | 
| 61 | 
            -
                              cmd << " --filter='-/ #{File.join(from, p)}'"
         | 
| 62 | 
            -
                            end
         | 
| 63 | 
            -
                          end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                          # Слэш после from — это инструкция rsync'у для копирования
         | 
| 66 | 
            -
                          # содержимого директории from, а не самой директории.
         | 
| 67 | 
            -
                          cmd << " #{from}/ #{to}"
         | 
| 33 | 
            +
                        credentials = ''
         | 
| 34 | 
            +
                        credentials += "-o #{owner} " if owner
         | 
| 35 | 
            +
                        credentials += "-g #{group} " if group
         | 
| 36 | 
            +
                        excludes = find_command_excludes(from, exclude_paths).join(' ')
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                        copy_files = proc do |from_, path_ = ''|
         | 
| 39 | 
            +
                          "if [[ -d #{File.join(from_, path_)} ]] || [[ -f #{File.join(from_, path_)} ]]; then " \
         | 
| 40 | 
            +
                          "#{dimg.dapp.find_bin} #{File.join(from_, path_)} #{excludes} -type f -exec " \
         | 
| 41 | 
            +
                          "#{dimg.dapp.bash_bin} -ec '#{dimg.dapp.install_bin} -D #{credentials} \"{}\" " \
         | 
| 42 | 
            +
                          "\"#{File.join(to, '$(echo "{}" | ' \
         | 
| 43 | 
            +
                          "#{dimg.dapp.sed_bin} -e \"s/^#{from_.gsub('/', '\\/')}\\///g\")")}\"' \\; ;" \
         | 
| 44 | 
            +
                          'fi'
         | 
| 68 45 | 
             
                        end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                        commands = []
         | 
| 48 | 
            +
                        commands << [dimg.dapp.install_bin, credentials, '-d', to].join(' ')
         | 
| 49 | 
            +
                        commands.concat(include_paths.empty? ? Array(copy_files.call(from)) : include_paths.map { |path| copy_files.call(from, path) })
         | 
| 50 | 
            +
                        commands << "#{dimg.dapp.find_bin} #{to} -type d -exec " \
         | 
| 51 | 
            +
                                    "#{dimg.dapp.bash_bin} -ec '#{dimg.dapp.install_bin} -d #{credentials} {}' \\;"
         | 
| 52 | 
            +
                        commands.join(' && ')
         | 
| 69 53 | 
             
                      end
         | 
| 70 54 | 
             
                      # rubocop:enable Metrics/ParameterLists
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                      def find_command_excludes(from, exclude_paths)
         | 
| 57 | 
            +
                        exclude_paths.map { |path| "-not \\( -path #{File.join(from, path)} -prune \\)" }
         | 
| 58 | 
            +
                      end
         | 
| 71 59 | 
             
                    end # ArtifactDefault
         | 
| 72 60 | 
             
                  end # Stage
         | 
| 73 61 | 
             
                end # Build
         | 
| @@ -168,7 +168,7 @@ module Dapp | |
| 168 168 | 
             
                      end
         | 
| 169 169 |  | 
| 170 170 | 
             
                      def default_git_artifacts_dependencies(git_artifacts)
         | 
| 171 | 
            -
                        git_artifacts.map { |git_artifact| git_artifact. | 
| 171 | 
            +
                        git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksums(self) }
         | 
| 172 172 | 
             
                      end
         | 
| 173 173 |  | 
| 174 174 | 
             
                      def dependencies
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            module Dapp
         | 
| 2 | 
            +
              module Dimg
         | 
| 3 | 
            +
                module Build
         | 
| 4 | 
            +
                  module Stage
         | 
| 5 | 
            +
                    module Mod
         | 
| 6 | 
            +
                      module GitArtifactsDependencies
         | 
| 7 | 
            +
                        def local_git_artifacts_dependencies
         | 
| 8 | 
            +
                          dimg.local_git_artifacts.map do |git_artifact|
         | 
| 9 | 
            +
                            args = []
         | 
| 10 | 
            +
                            args << self
         | 
| 11 | 
            +
                            if dimg.dev_mode?
         | 
| 12 | 
            +
                              args << git_artifact.latest_commit
         | 
| 13 | 
            +
                              args << nil
         | 
| 14 | 
            +
                            end
         | 
| 15 | 
            +
                            git_artifact.stage_dependencies_checksums(*args)
         | 
| 16 | 
            +
                          end
         | 
| 17 | 
            +
                        end
         | 
| 18 | 
            +
                      end
         | 
| 19 | 
            +
                    end # Mod
         | 
| 20 | 
            +
                  end # Stage
         | 
| 21 | 
            +
                end # Build
         | 
| 22 | 
            +
              end # Dimg
         | 
| 23 | 
            +
            end # Dapp
         | 
| @@ -52,27 +52,15 @@ module Dapp | |
| 52 52 | 
             
                    patch_command(stage.prev_g_a_stage.layer_commit(self), nil)
         | 
| 53 53 | 
             
                  end
         | 
| 54 54 |  | 
| 55 | 
            -
                  def  | 
| 55 | 
            +
                  def stage_dependencies_checksums(stage, from_commit = nil, to_commit = latest_commit)
         | 
| 56 56 | 
             
                    return [] if (stage_dependencies = stages_dependencies[stage.name]).empty?
         | 
| 57 57 |  | 
| 58 | 
            -
                    paths =  | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
                       | 
| 62 | 
            -
             | 
| 63 | 
            -
                      latest_commit
         | 
| 58 | 
            +
                    paths = include_paths(true) + base_paths(stage_dependencies, true)
         | 
| 59 | 
            +
                    diff_patches(from_commit, to_commit, paths: paths).map do |patch|
         | 
| 60 | 
            +
                      delta_new_file = patch.delta.new_file
         | 
| 61 | 
            +
                      content = patch.hunks.map { |h| h.lines.select { |l| l.line_origin == :context }.map(&:content).join }.join
         | 
| 62 | 
            +
                      Digest::SHA256.hexdigest [delta_new_file[:path], content].join(':::')
         | 
| 64 63 | 
             
                    end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                    diff_patches(nil, to_commit, paths: paths)
         | 
| 67 | 
            -
                      .sort_by {|patch| patch.delta.new_file[:path]}
         | 
| 68 | 
            -
                      .reduce(nil) {|prev_hash, patch|
         | 
| 69 | 
            -
                        Digest::SHA256.hexdigest [
         | 
| 70 | 
            -
                          prev_hash,
         | 
| 71 | 
            -
                          patch.delta.new_file[:path],
         | 
| 72 | 
            -
                          patch.delta.new_file[:mode].to_s,
         | 
| 73 | 
            -
                          patch.to_s
         | 
| 74 | 
            -
                        ].compact.join(':::')
         | 
| 75 | 
            -
                      }
         | 
| 76 64 | 
             
                  end
         | 
| 77 65 |  | 
| 78 66 | 
             
                  def patch_size(from, to)
         | 
| @@ -97,7 +85,7 @@ module Dapp | |
| 97 85 | 
             
                  end
         | 
| 98 86 |  | 
| 99 87 | 
             
                  def latest_commit
         | 
| 100 | 
            -
                    @latest_commit ||=  | 
| 88 | 
            +
                    @latest_commit ||= commit || repo.latest_commit(branch)
         | 
| 101 89 | 
             
                  end
         | 
| 102 90 |  | 
| 103 91 | 
             
                  def paramshash
         | 
| @@ -140,12 +128,8 @@ module Dapp | |
| 140 128 | 
             
                      Gem::Package::TarWriter.new(f) do |tar|
         | 
| 141 129 | 
             
                        diff_patches(nil, to_commit).each do |patch|
         | 
| 142 130 | 
             
                          entry = patch.delta.new_file
         | 
| 143 | 
            -
                           | 
| 144 | 
            -
                             | 
| 145 | 
            -
                          else
         | 
| 146 | 
            -
                            tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
         | 
| 147 | 
            -
                              tf.write repo.lookup_object(entry[:oid]).content
         | 
| 148 | 
            -
                            end
         | 
| 131 | 
            +
                          tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
         | 
| 132 | 
            +
                            tf.write repo.lookup_object(entry[:oid]).content
         | 
| 149 133 | 
             
                          end
         | 
| 150 134 | 
             
                        end
         | 
| 151 135 | 
             
                      end
         | 
| @@ -229,10 +213,10 @@ module Dapp | |
| 229 213 | 
             
                  end
         | 
| 230 214 |  | 
| 231 215 | 
             
                  def diff_patches(from, to, paths: include_paths_or_cwd)
         | 
| 232 | 
            -
                    (@diff_patches ||= {})[[from, to, paths]]  | 
| 233 | 
            -
             | 
| 234 | 
            -
             | 
| 235 | 
            -
             | 
| 216 | 
            +
                    (@diff_patches ||= {})[[from, to, paths]] = repo.patches(from, to,
         | 
| 217 | 
            +
                                                                             paths: paths,
         | 
| 218 | 
            +
                                                                             exclude_paths: exclude_paths(true),
         | 
| 219 | 
            +
                                                                             force_text: true)
         | 
| 236 220 | 
             
                  end
         | 
| 237 221 |  | 
| 238 222 | 
             
                  def include_paths_or_cwd
         | 
| @@ -15,16 +15,6 @@ module Dapp | |
| 15 15 | 
             
                      []
         | 
| 16 16 | 
             
                    end
         | 
| 17 17 |  | 
| 18 | 
            -
                    # FIXME: Убрать логику исключения путей exclude_paths из данного класса,
         | 
| 19 | 
            -
                    # FIXME: т.к. большинство методов не поддерживают инвариант
         | 
| 20 | 
            -
                    # FIXME "всегда выдавать данные с исключенными путями".
         | 
| 21 | 
            -
                    # FIXME: Например, метод diff выдает данные без учета exclude_paths.
         | 
| 22 | 
            -
                    # FIXME: Лучше перенести фильтрацию в GitArtifact::diff_patches.
         | 
| 23 | 
            -
                    # FIXME: ИЛИ обеспечить этот инвариант, но это ограничит в возможностях
         | 
| 24 | 
            -
                    # FIXME: использование Rugged извне этого класса и это более сложный путь.
         | 
| 25 | 
            -
                    # FIXME: Лучше сейчас убрать фильтрацию, а добавить ее когда наберется достаточно
         | 
| 26 | 
            -
                    # FIXME: примеров использования.
         | 
| 27 | 
            -
             | 
| 28 18 | 
             
                    def patches(from, to, exclude_paths: [], **kwargs)
         | 
| 29 19 | 
             
                      diff(from, to, **kwargs).patches.select do |patch|
         | 
| 30 20 | 
             
                        !exclude_paths.any? { |p| check_path?(patch.delta.new_file[:path], p) }
         | 
| @@ -32,9 +22,7 @@ module Dapp | |
| 32 22 | 
             
                    end
         | 
| 33 23 |  | 
| 34 24 | 
             
                    def diff(from, to, **kwargs)
         | 
| 35 | 
            -
                      if  | 
| 36 | 
            -
                        raise "Workdir diff not supported for #{self.class}"
         | 
| 37 | 
            -
                      elsif from.nil?
         | 
| 25 | 
            +
                      if from.nil?
         | 
| 38 26 | 
             
                        Rugged::Tree.diff(git, nil, to, **kwargs)
         | 
| 39 27 | 
             
                      else
         | 
| 40 28 | 
             
                        lookup_commit(from).diff(lookup_commit(to), **kwargs)
         | 
| @@ -16,16 +16,8 @@ module Dapp | |
| 16 16 | 
             
                      raise Error::Rugged, code: :local_git_repository_does_not_exist
         | 
| 17 17 | 
             
                    end
         | 
| 18 18 |  | 
| 19 | 
            -
                    # NOTICE: Параметры {from: nil, to: nil} можно указать только для Own repo.
         | 
| 20 | 
            -
                    # NOTICE: Для Remote repo такой вызов не имеет смысла и это ошибка пользователя класса Remote.
         | 
| 21 | 
            -
             | 
| 22 19 | 
             
                    def diff(from, to, **kwargs)
         | 
| 23 | 
            -
                      if  | 
| 24 | 
            -
                        mid_commit = latest_commit
         | 
| 25 | 
            -
                        diff_obj = super(nil, mid_commit, **kwargs)
         | 
| 26 | 
            -
                        diff_obj.merge! git.lookup(mid_commit).diff_workdir(**kwargs)
         | 
| 27 | 
            -
                        diff_obj
         | 
| 28 | 
            -
                      elsif to.nil?
         | 
| 20 | 
            +
                      if to.nil?
         | 
| 29 21 | 
             
                        git.lookup(from).diff_workdir(**kwargs)
         | 
| 30 22 | 
             
                      else
         | 
| 31 23 | 
             
                        super
         | 
    
        data/lib/dapp/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: dapp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Dmitry Stolyarov
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017-04- | 
| 11 | 
            +
            date: 2017-04-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: mixlib-shellout
         | 
| @@ -449,6 +449,7 @@ files: | |
| 449 449 | 
             
            - lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb
         | 
| 450 450 | 
             
            - lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb
         | 
| 451 451 | 
             
            - lib/dapp/dimg/build/stage/install/install.rb
         | 
| 452 | 
            +
            - lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb
         | 
| 452 453 | 
             
            - lib/dapp/dimg/build/stage/mod/group.rb
         | 
| 453 454 | 
             
            - lib/dapp/dimg/build/stage/mod/logging.rb
         | 
| 454 455 | 
             
            - lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb
         | 
| @@ -592,7 +593,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 592 593 | 
             
              requirements:
         | 
| 593 594 | 
             
              - - ">="
         | 
| 594 595 | 
             
                - !ruby/object:Gem::Version
         | 
| 595 | 
            -
                  version:  | 
| 596 | 
            +
                  version: '0'
         | 
| 596 597 | 
             
            requirements: []
         | 
| 597 598 | 
             
            rubyforge_project: 
         | 
| 598 599 | 
             
            rubygems_version: 2.4.8
         |