Sha256: b5d898a824aecfc9616318c3d46558f20537a6fc6e155406266634546658bf3e

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

module GitWakaTime
  ##
  # Cache git commit and correlate it's children
  #
  class Commit < Sequel::Model
    one_to_many :commited_files
    def after_create
      extract_changed_files if GitWakaTime.config.git
    end

    def to_s
      format('        %-8s %8s %-30s %-80s'.green,
             sha[0..8],
             date,
             ChronicDuration.output(time_in_seconds.to_i),
             message
            )
    end

    def oldest_dependent
      @files.sort { |f| f.commit.date }.first
    end

    def time_in_seconds
      commited_files.map(&:time_in_seconds).compact.inject(:+)
    end

    def date
      self[:date].localtime
    end

    private

    def extract_changed_files
      @raw_commit = GitWakaTime.config.git.gcommit(sha)
      # TODO: Assume gap time to lookup time prior to first commit.
      return unless @raw_commit.parent
      update(parent_sha: @raw_commit.parent.sha)

      @raw_commit.diff_parent.stats[:files].keys.map do |file|
        CommitedFile.find_or_create(commit_id: id, name: file) do |c|
          c.update(sha: sha, project: project)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gitwakatime-0.4.0 lib/gitwakatime/commit.rb