Sha256: 0cac3ea4764cd82e48b0ae9fa491a4f90e21029e8647dbf1d377b94c082ef3d5

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 KB

Contents

#!/usr/bin/env ruby

require 'utils/markdown'
include Utils::Markdown
require 'utils/pager'
require 'term/ansicolor'
include Term::ANSIColor
require 'shellwords'

cmd = %{git log --color=always --pretty=format:"commit %H%C(auto)%d%nDate:   %Cgreen%cD (%cr)%Creset%nAuthor: %Cblue%an <%ae>%Creset%n%nMARKUP%n%s%n%n%b%nMARKDOWN%n"}

core_pager     = `git config get core.pager`.chomp.full?
git_pager      = ENV['GIT_PAGER'].full?
default_pager  = ENV['PAGER'].full?
if fallback_pager = `which less`.chomp.full? || `which more`.chomp.full?
  fallback_pager << ' -r'
end
my_pager = git_pager || core_pager || default_pager || fallback_pager

repo_url = case git_origin_url = `git remote get-url origin`.chomp
           when %r(\Ahttps://)
             u = git_origin_url.sub(%r(\.git\z), '')
             u << '/commit/'
           when %r(\Agit@github.com:([^.]+))
             "https://github.com/#$1/commit/"
           end

Utils::Pager.pager(command: my_pager) do |output|
  IO.popen("#{cmd} #{Shellwords.join(ARGV)}") do |log|
    until log.eof?
      message = nil
      log.each do |line|
        case line
        when /^MARKUP$/
          message =  ''
        when /^MARKDOWN$/
          output.puts markdown(message + "\n---\n")
          message = nil
        else
          if message
            message << line
          else
            output.puts line.sub(/(?<=^commit )(\h{40})/) {
              yellow { repo_url ? hyperlink(repo_url + $1) { $1 }  : $1 }
            }
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
utils-0.59.2 bin/git-md
utils-0.59.1 bin/git-md
utils-0.59.0 bin/git-md
utils-0.58.0 bin/git-md