Sha256: 9feb4daf52b83ba04c7aefa32543702a91de92f78a83ea2fd525ae5f77108d2a

Contents?: true

Size: 1.34 KB

Versions: 170

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module Avm
  module Git
    class Commit
      require_sub __FILE__, include_modules: true
      enable_simple_cache

      FIELDS = {
        author_name: '%an', author_email: '%ae', author_date: '%ai',
        subject: '%s',
        author_all: '%an <%ae>, %ai',
        commiter_name: '%cn', commiter_email: '%ce', commiter_date: '%ci',
        commiter_all: '%cn <%ce>, %ci'
      }.freeze

      attr_reader :git, :sha1

      # @param git [EacGit::Local]
      def initialize(git, sha1)
        @git = git
        @sha1 = sha1
      end

      def format(format)
        git.command('--no-pager', 'log', '-1', "--pretty=format:#{format}", sha1).execute!.strip
      end

      FIELDS.each do |field, format|
        define_method field do
          format(format)
        end
      end

      def files_uncached
        diff_tree_execute.each_line.map { |line| ::Avm::Git::Commit::File.new(git, line) }
      end

      def files_size_uncached
        files.inject(0) { |a, e| a + e.dst_size }
      end

      def root_child?
        format('%P').blank?
      end

      private

      def diff_tree_execute
        args = []
        args << '--root' if root_child?
        args << sha1
        git.command(*::Avm::Git::Commit::DiffTreeLine::GIT_COMMAND_ARGS, *args).execute!
      end
    end
  end
end

Version data entries

170 entries across 170 versions & 4 rubygems

Version Path
avm-git-0.18.0 lib/avm/git/commit.rb
eac_tools-0.94.0 sub/avm-git/lib/avm/git/commit.rb
avm-git-0.17.0 lib/avm/git/commit.rb
eac_tools-0.86.5 sub/avm-git/lib/avm/git/commit.rb
avm-git-0.16.0 lib/avm/git/commit.rb
eac_tools-0.86.4 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.86.3 sub/avm-git/lib/avm/git/commit.rb
avm-git-0.15.0 lib/avm/git/commit.rb
eac_tools-0.86.2 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.84.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.83.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.82.0 sub/avm-git/lib/avm/git/commit.rb
avm-git-0.14.0 lib/avm/git/commit.rb
eac_tools-0.81.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.80.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.79.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.78.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.77.1 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.77.0 sub/avm-git/lib/avm/git/commit.rb
eac_tools-0.76.1 sub/avm-git/lib/avm/git/commit.rb