Sha256: 024c6ad36cbf6ff0d490829465505ce278c0ecbc1bcb58304c92296e385c4c30

Contents?: true

Size: 910 Bytes

Versions: 174

Compression:

Stored size: 910 Bytes

Contents

# frozen_string_literal: true

module EacGit
  class Local
    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

174 entries across 174 versions & 3 rubygems

Version Path
eac_tools-0.84.1 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.84.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.83.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.82.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.81.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.80.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.79.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.78.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.77.1 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.77.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.76.1 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.76.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.75.2 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.75.1 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.75.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.74.1 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.74.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.73.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.72.0 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb
eac_tools-0.70.1 sub/eac_git/lib/eac_git/local/commit/diff_tree_line.rb