Sha256: b5b4615c8d2d0942367e8d1044121a46ce68621137e93911ebfccc2fc47095be

Contents?: true

Size: 1.75 KB

Versions: 5

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

require 'avm/scms/base'
require 'eac_ruby_utils/core_ext'

module Avm
  module Git
    module Scms
      class Git < ::Avm::Scms::Base
        require_sub __FILE__
        include ::Comparable

        COMMIT_DIRTY_DEFAULT_MESSAGE = 'Dirty files.'

        def <=>(other)
          git_repo <=> other.git_repo
        end

        # @return [Avm::Git::Scms::Git::Commit,nil]
        def commitize(source)
          if source.is_a?(::Avm::Git::Scms::Git::Commit)
            return source if source.git_repo == self

            raise 'Not same Git repository'
          end
          git_repo.commitize(source).if_present do |v|
            ::Avm::Git::Scms::Git::Commit.new(self, v)
          end
        end

        # @return [Avm::Git::Scms::Git::Commit,nil]
        def commit_dirty(message = nil)
          return nil unless git_repo.dirty?

          git_repo.command('add', '.').execute!
          git_repo.command('commit', '-m',
                           message.call_if_proc.if_present(COMMIT_DIRTY_DEFAULT_MESSAGE)).execute!
          commitize(git_repo.head)
        end

        # @return [Avm::Git::Scms::Git::Commit,nil]
        def commit_if_change(message = nil)
          tracker = ::Avm::Git::Scms::Git::ChangeTracker.new(self, message)
          tracker.start
          yield
          tracker.stop
        end

        def git_repo
          @git_repo ||= ::EacGit::Local.new(path)
        end

        # @return [Avm::Git::Scms::Git::Commit]
        def reset_and_commit(commit_to_reset, message)
          git_repo.command('reset', '--soft', commitize(commit_to_reset).git_commit.id).execute!
          commit_dirty(message)
        end

        def valid?
          path.join('.git').exist?
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
avm-git-0.2.0 lib/avm/git/scms/git.rb
avm-tools-0.110.0 vendor/avm-git/lib/avm/git/scms/git.rb
avm-tools-0.109.1 vendor/avm-git/lib/avm/git/scms/git.rb
avm-git-0.1.0 lib/avm/git/scms/git.rb
avm-tools-0.109.0 vendor/avm-git/lib/avm/git/scms/git.rb