require "inch/utils/shell_helper" module Inch module CLI module Command module Options class Diff < BaseObject include Utils::ShellHelper def initialize @before_rev = "HEAD" @after_rev = nil end def descriptions [ "", "Shows changes in documentation between two revisions " \ "(defaults to last commit against current)", "", "Example: " + "$ inch diff HEAD^..HEAD".color(:cyan), "", description_hint_grades, description_hint_arrows ] end def set_options(opts) diff_options(opts) common_options(opts) end # @return [Array] the revisions to be diffed # nil meaning the current working dir, including untracked files # since these are later parsed via `git rev-parse`, we can support # notations like "HEAD" or "HEAD^^" # # @example # revisions # => ["HEAD", nil] def revisions if object_names.empty? [@before_rev, @after_rev] else object_names.first.split("..") end end def since_last_commit? revisions == ["HEAD", nil] end def since_last_push? @since_last_push == true end private def diff_options(opts) opts.separator "" opts.separator "Diff options:" opts.on("--since-last-commit", "Run diff against last commit (default)") do @before_rev = "HEAD" end opts.on("-p", "--since-last-push", "Run diff against last pushed commit") do @before_rev = pushed_rev @since_last_push = true end end # @return [String] the reference for the pushed revision # # @example # pushed_rev # => "origin/master" def pushed_rev "#{remote}/#{current_branch}" end def current_branch git Dir.pwd, "rev-parse --abbrev-ref HEAD" end def remote "origin" end end end end end end