Sha256: 787da0d56cf7f0aed5f762675988f8f7034cbc7561500b0dfcea500ff306058f

Contents?: true

Size: 906 Bytes

Versions: 271

Compression:

Stored size: 906 Bytes

Contents

# frozen_string_literal: true

module Avm
  module Git
    class Commit
      class DiffTreeLine
        DIFF_TREE_PATTERN = /\A:(\d{6}) (\d{6}) (\S+) (\S+) (\S+)\t(\S.*)\z/.freeze
        FIELDS = %w[src_mode dst_mode src_sha1 dst_sha1 status path].freeze
        GIT_COMMAND_ARGS = %w[-c core.quotepath=off diff-tree --no-commit-id -r --full-index].freeze

        attr_reader(*FIELDS)

        # line: a line of command "git [GIT_COMMAND_ARGS]"'s output.
        # Reference: https://git-scm.com/docs/git-diff-tree
        def initialize(line)
          m = DIFF_TREE_PATTERN.match(line.strip)
          raise "\"#{line}\" did not match pattern" unless m

          FIELDS.count.times { |i| send("#{FIELDS[i]}=", m[i + 1]) }
        end

        def fields
          FIELDS.map { |field| [field, send(field)] }.to_h
        end

        private

        attr_writer(*FIELDS)
      end
    end
  end
end

Version data entries

271 entries across 271 versions & 4 rubygems

Version Path
eac_tools-0.75.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.75.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.74.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.74.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.73.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.72.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.70.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.70.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.69.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.69.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.68.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
avm-git-0.13.3 lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.67.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.67.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.66.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.65.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.65.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.64.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.63.0 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb
eac_tools-0.62.1 sub/avm-git/lib/avm/git/commit/diff_tree_line.rb