mirror of https://github.com/tomgi/git_stats.git
[closes #11] using highline to parse command line options
This commit is contained in:
parent
8f67bcdc64
commit
8448cda8ba
|
@ -20,8 +20,8 @@ It browses the repository and outputs html page with statistics.
|
||||||
|
|
||||||
### Generator
|
### Generator
|
||||||
|
|
||||||
$ git_stats repo_path output_directory language_code first_commit_sha last_commit_sha
|
$ git_stats
|
||||||
$ favorite_browser output_directory/index.html
|
<follow instructions on the screen>
|
||||||
|
|
||||||
### API usage example
|
### API usage example
|
||||||
|
|
||||||
|
|
|
@ -8,4 +8,4 @@ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
||||||
require "git_stats/cli"
|
require "git_stats/cli"
|
||||||
|
|
||||||
cli = GitStats::CLI.new
|
cli = GitStats::CLI.new
|
||||||
cli.start(*ARGV)
|
cli.start
|
||||||
|
|
|
@ -25,4 +25,5 @@ Gem::Specification.new do |gem|
|
||||||
gem.add_dependency('haml')
|
gem.add_dependency('haml')
|
||||||
gem.add_dependency('lazy_high_charts')
|
gem.add_dependency('lazy_high_charts')
|
||||||
gem.add_dependency('i18n')
|
gem.add_dependency('i18n')
|
||||||
|
gem.add_dependency('highline')
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,6 +8,7 @@ require 'git_stats/i18n'
|
||||||
require 'git_stats/by_field_finder'
|
require 'git_stats/by_field_finder'
|
||||||
require 'git_stats/cli'
|
require 'git_stats/cli'
|
||||||
require 'git_stats/generator'
|
require 'git_stats/generator'
|
||||||
|
require 'git_stats/validator'
|
||||||
|
|
||||||
require 'git_stats/git_data/activity'
|
require 'git_stats/git_data/activity'
|
||||||
require 'git_stats/git_data/author'
|
require 'git_stats/git_data/author'
|
||||||
|
|
|
@ -1,13 +1,25 @@
|
||||||
# -*- encoding : utf-8 -*-
|
# -*- encoding : utf-8 -*-
|
||||||
require "git_stats"
|
require "git_stats"
|
||||||
|
require "highline/import"
|
||||||
|
|
||||||
class GitStats::CLI
|
class GitStats::CLI
|
||||||
|
|
||||||
def start(*args)
|
def start
|
||||||
raise "Wrong number of arguments\nUsage: git_stats repo_path output_path <output_lang>" unless [2, 3, 4, 5].include? args.size
|
|
||||||
|
|
||||||
repo_path, out_path, lang, first_commit_sha, last_commit_sha = args
|
repo_path = ask("Repo path? ") { |q|
|
||||||
I18n.locale = lang || :en
|
q.default = "."
|
||||||
|
q.validate = lambda { |p| GitStats::Validator.new.valid_repo_path?(p) }
|
||||||
|
q.responses[:not_valid] = "Given path is not a git repository, try again"
|
||||||
|
}
|
||||||
|
|
||||||
|
out_path = ask("Output dir? ") { |q| q.default = "./git_stats" }
|
||||||
|
I18n.locale = ask("Language? ") { |q| q.default = "en"; q.answer_type = Symbol }
|
||||||
|
specify_range = agree("Want to specify commits range? ") { |q| q.default = "no" }
|
||||||
|
|
||||||
|
if specify_range
|
||||||
|
first_commit_sha = ask("Starting commit sha? ") { |q| q.default = nil }
|
||||||
|
last_commit_sha = ask("Ending commit sha? ") { |q| q.default = "HEAD" }
|
||||||
|
end
|
||||||
|
|
||||||
GitStats::Generator.new(repo_path, out_path, first_commit_sha, last_commit_sha) { |g|
|
GitStats::Generator.new(repo_path, out_path, first_commit_sha, last_commit_sha) { |g|
|
||||||
g.add_command_observer { |command, result| puts "#{command}" }
|
g.add_command_observer { |command, result| puts "#{command}" }
|
||||||
|
|
|
@ -4,7 +4,7 @@ module GitStats
|
||||||
delegate :add_command_observer, to: :@repo
|
delegate :add_command_observer, to: :@repo
|
||||||
delegate :render_all, to: :@view
|
delegate :render_all, to: :@view
|
||||||
|
|
||||||
def initialize(repo_path, out_path, first_commit_sha, last_commit_sha)
|
def initialize(repo_path, out_path, first_commit_sha = nil, last_commit_sha = "HEAD")
|
||||||
validate_repo_path(repo_path)
|
validate_repo_path(repo_path)
|
||||||
|
|
||||||
@repo = GitData::Repo.new(path: repo_path, first_commit_sha: first_commit_sha, last_commit_sha: last_commit_sha)
|
@repo = GitData::Repo.new(path: repo_path, first_commit_sha: first_commit_sha, last_commit_sha: last_commit_sha)
|
||||||
|
@ -18,7 +18,7 @@ module GitStats
|
||||||
|
|
||||||
|
|
||||||
def validate_repo_path(repo_path)
|
def validate_repo_path(repo_path)
|
||||||
raise ArgumentError, "#{repo_path} is not a git repository" unless (Dir.exists?("#{repo_path}/.git") || File.exists?("#{repo_path}/HEAD"))
|
raise ArgumentError, "#{repo_path} is not a git repository" unless Validator.new.valid_repo_path?(repo_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -68,7 +68,7 @@ module GitStats
|
||||||
end
|
end
|
||||||
|
|
||||||
def commit_range
|
def commit_range
|
||||||
@first_commit_sha ? "#@first_commit_sha..#{last_commit_sha}" : last_commit_sha
|
@first_commit_sha.blank? ? last_commit_sha : "#@first_commit_sha..#{last_commit_sha}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_commit_sha
|
def last_commit_sha
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
# -*- encoding : utf-8 -*-
|
||||||
|
module GitStats
|
||||||
|
class Validator
|
||||||
|
|
||||||
|
def valid_repo_path?(repo_path)
|
||||||
|
Dir.exists?("#{repo_path}/.git") || File.exists?("#{repo_path}/HEAD")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,20 +0,0 @@
|
||||||
# -*- encoding : utf-8 -*-
|
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe GitStats::CLI do
|
|
||||||
let(:repo_path) { 'repo_path' }
|
|
||||||
let(:out_path) { 'out_path' }
|
|
||||||
|
|
||||||
it 'should invoke generator with console arguments given' do
|
|
||||||
generator = double('generator')
|
|
||||||
GitStats::Generator.should_receive(:new).with(repo_path, out_path).and_return(generator)
|
|
||||||
generator.should_receive(:render_all)
|
|
||||||
|
|
||||||
subject.start(repo_path, out_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should raise error when 2 arguments are not given' do
|
|
||||||
expect { subject.start("only one argument") }.to raise_error
|
|
||||||
expect { subject.start("too", "much", "arguments") }.to raise_error
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -15,7 +15,7 @@ describe GitStats::Generator do
|
||||||
|
|
||||||
it 'should pass command observer to repo' do
|
it 'should pass command observer to repo' do
|
||||||
repo = double('repo')
|
repo = double('repo')
|
||||||
GitStats::GitData::Repo.should_receive(:new).with(path: repo_path).and_return(repo)
|
GitStats::GitData::Repo.should_receive(:new).with(path: repo_path, first_commit_sha: nil, last_commit_sha: "HEAD").and_return(repo)
|
||||||
|
|
||||||
generator = GitStats::Generator.new(repo_path, out_path)
|
generator = GitStats::Generator.new(repo_path, out_path)
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ describe GitStats::Generator do
|
||||||
|
|
||||||
it 'should render all templates with view data for this repo' do
|
it 'should render all templates with view data for this repo' do
|
||||||
repo = double('repo')
|
repo = double('repo')
|
||||||
GitStats::GitData::Repo.should_receive(:new).with(path: repo_path).and_return(repo)
|
GitStats::GitData::Repo.should_receive(:new).with(path: repo_path, first_commit_sha: nil, last_commit_sha: "HEAD").and_return(repo)
|
||||||
|
|
||||||
view_data = double('view_data')
|
view_data = double('view_data')
|
||||||
GitStats::StatsView::ViewData.should_receive(:new).with(repo).and_return(view_data)
|
GitStats::StatsView::ViewData.should_receive(:new).with(repo).and_return(view_data)
|
||||||
|
|
Loading…
Reference in New Issue