Sha256: 7a9285f80a436fbea515f310b8a3848eca5a4ab0e1633932f7e01098fdff5c36

Contents?: true

Size: 1.73 KB

Versions: 19

Compression:

Stored size: 1.73 KB

Contents

# frozen_string_literal: true

require 'avm/scms/commit'
require 'eac_ruby_utils/core_ext'

module Avm
  module Git
    module Scms
      class Git < ::Avm::Scms::Base
        class Commit < ::Avm::Scms::Commit
          require_sub __FILE__, include_modules: true
          common_constructor :git_scm, :git_commit do
            git_commit.assert_argument(::EacGit::Local::Commit, 'git_commit')
          end
          delegate :git_repo, to: :git_scm
          delegate :id, to: :git_commit

          # @return [Array<Pathname>]
          def changed_files
            git_commit.changed_files.map { |cf| cf.path.to_pathname }
          end

          # @param other [Avm::Git::Scms::Git::Commit]
          # @return [Avm::Git::Scms::Git::Commit]
          def merge_with(other)
            validate_clean_and_head
            raise 'Implemented for only if other is parent' unless
            other.git_commit == git_commit.parent

            git_scm.reset_and_commit(other.git_commit.parent, other.git_commit.raw_body)
          end

          def reword(new_message)
            validate_clean_and_head

            git_repo.command('commit', '--amend', '-m', new_message).execute!
            self.class.new(git_scm, git_repo.head)
          end

          # @param path [Pathname]
          # @return [TrueClass,FalseClass]
          def scm_file?(path)
            %w[.gitrepo .gitmodules].any? { |file| file.include?(path.basename.to_path) }
          end

          private

          def validate_clean_and_head
            raise 'Implemented for only if repository is no dirty' if git_repo.dirty?
            raise 'Implemented for only if self is HEAD' unless
            git_commit == git_repo.head
          end
        end
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 2 rubygems

Version Path
eac_tools-0.49.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.48.1 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.48.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.47.2 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.47.1 sub/avm-git/lib/avm/git/scms/git/commit.rb
avm-git-0.10.1 lib/avm/git/scms/git/commit.rb
eac_tools-0.47.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.46.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.45.2 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.45.1 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.45.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.44.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.43.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.42.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
avm-git-0.10.0 lib/avm/git/scms/git/commit.rb
eac_tools-0.41.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
eac_tools-0.40.0 sub/avm-git/lib/avm/git/scms/git/commit.rb
avm-git-0.9.0 lib/avm/git/scms/git/commit.rb
eac_tools-0.39.0 sub/avm-git/lib/avm/git/scms/git/commit.rb