Sha256: 598721c2caf33fd37365fbb26d0ecca6309261378bc428d617cf5dceebeb7d6d

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

require "obst/git_log"

module Obst
  class PackLog
    include Enumerable

    def initialize(**opts, &block)
      @commits = GitLog.new(**opts).commits
      @time_fix = block
    end

    class Statuses
      def <<(st)
        @arr ||= []
        @arr << st if @arr.last != st
      end

      def inspect
        @arr
      end
    end

    Record = Struct.new(:time, :statuses)

    def each(&block)
      current_time = nil
      renames = {}
      files_in_one_day = Hash.new{ |files, name| files[name] = Statuses.new }

      @commits.each do |commit|
        committed_at = @time_fix.call(commit.committed_at)
        current_time ||= committed_at

        if current_time != committed_at
          block.call(Record.new(current_time, files_in_one_day.dup))
          current_time = committed_at
          files_in_one_day.clear
        end

        commit.file_statuses.each do |file_status|
          renames[file_status.old_name] = file_status.name if file_status.old_name
          newest_name = renames[file_status.name] || file_status.name
          files_in_one_day[newest_name] << file_status.status
        end
      end

      block.call(Record.new(current_time, files_in_one_day.dup))
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
obst-0.1.2 lib/obst/pack_log.rb
obst-0.1.1 lib/obst/pack_log.rb
obst-0.1.0 lib/obst/pack_log.rb