grog 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +2 -0
- data/VERSION +1 -1
- data/bin/grog +1 -5
- data/features/grog.feature +4 -9
- data/features/step_definitions/git_steps.rb +37 -6
- data/features/step_definitions/grog_steps.rb +7 -1
- data/lib/grog/git_log.rb +34 -10
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -21,6 +21,8 @@ A wrapper script for git-log - shows subject, time and author of each commit plu
|
|
21
21
|
* Accept a commit range as a command line parameter
|
22
22
|
* Fix tag/branch ambiguity issues
|
23
23
|
* Show 'shadows' or remote branches (commit that is the latest in common with a remote branch)
|
24
|
+
* Distinguish commits by user with different color
|
25
|
+
* Read user default options from a .grog file
|
24
26
|
|
25
27
|
== Copyright
|
26
28
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/grog
CHANGED
@@ -1,8 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'grog'
|
4
|
-
|
5
|
-
# puts `git log --pretty=format:"%x1b[33m%h%Creset %s %Cgreen(%an)%Creset"`
|
6
|
-
options = Grog::Options.parse(ARGV)
|
7
|
-
Grog::GitLog.print(:number_of_commits_to_show => options.number_of_commits_to_show,
|
8
|
-
:show_datetimes => options.show_datetimes)
|
4
|
+
puts Grog::GitLog.generate_parsing_arguments
|
data/features/grog.feature
CHANGED
@@ -4,16 +4,11 @@ Feature: default output of grog
|
|
4
4
|
I want to see an overview of my recent commits
|
5
5
|
|
6
6
|
Scenario: running grog with no options
|
7
|
-
Given a test git repo
|
8
|
-
And the test git repo has a file called "file_a" containing "I am A"
|
9
|
-
And a commit of all changes to the test git repo with message "Commit A"
|
10
|
-
And a checkout in the git repo with new branch called "branch_a"
|
11
|
-
And the test git repo has a file called "file_b" containing "I am B"
|
12
|
-
And a commit of all changes to the test git repo with message "Commit B"
|
7
|
+
Given a test git repo extracted from the "test_git_repo" tarball
|
13
8
|
When I run grog on the test git repo
|
14
|
-
Then the output should be
|
9
|
+
Then the output ignoring colour codes should be
|
15
10
|
"""
|
16
|
-
Commit B
|
17
|
-
Commit A
|
11
|
+
6165a67 Commit B (Tom ten Thij) B(branch_b master) T(foo v2)
|
12
|
+
bf5b520 Commit A (Tom ten Thij) B(branch_a foo) T(v1)
|
18
13
|
|
19
14
|
"""
|
@@ -1,14 +1,43 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module GitHelpers
|
2
|
+
def set_root_path_variable
|
3
|
+
@root_dir ||= File.expand_path(File.dirname(__FILE__) + '/../..')
|
4
|
+
end
|
5
|
+
|
6
|
+
def set_repo_path_variable(name)
|
7
|
+
set_root_path_variable
|
8
|
+
unless @tmp_git_repo_dir
|
9
|
+
@features_dir = File.expand_path(File.dirname(__FILE__) + '/..')
|
10
|
+
@tmp_git_repo_dir = File.join(@features_dir, 'tmp', name)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete_temporary_test_repo
|
15
|
+
if File.exists?(@tmp_git_repo_dir)
|
16
|
+
`rm -rf #{@tmp_git_repo_dir}`
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def untar_tarball_to_test_repo_location(tarball_name)
|
21
|
+
tarball_path = File.join(@root_dir, 'spec', tarball_name + '.tgz')
|
22
|
+
Dir.chdir(File.join(@features_dir, 'tmp'))
|
23
|
+
`tar zxf #{tarball_path}`
|
7
24
|
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Given /^a test git repo$/ do
|
28
|
+
name = 'git_repo'
|
29
|
+
set_repo_path_variable(name)
|
30
|
+
delete_temporary_test_repo(name)
|
8
31
|
`mkdir #{@tmp_git_repo_dir}`
|
9
32
|
`git init #{@tmp_git_repo_dir}`
|
10
33
|
end
|
11
34
|
|
35
|
+
Given /^a test git repo extracted from the "([^\"]*)" tarball$/ do |tarball_name|
|
36
|
+
set_repo_path_variable(tarball_name)
|
37
|
+
delete_temporary_test_repo
|
38
|
+
untar_tarball_to_test_repo_location(tarball_name)
|
39
|
+
end
|
40
|
+
|
12
41
|
Given /^the test git repo has a file called "([^\"]*)" containing "([^\"]*)"$/ do |filename, content|
|
13
42
|
File.open(File.join(@tmp_git_repo_dir, filename), 'w') do |file|
|
14
43
|
file.puts content
|
@@ -25,3 +54,5 @@ Given /^a checkout in the git repo with new branch called "([^\"]*)"$/ do |branc
|
|
25
54
|
Dir.chdir(@tmp_git_repo_dir)
|
26
55
|
`git checkout -b #{branch_name} 2> /dev/null`
|
27
56
|
end
|
57
|
+
|
58
|
+
World(GitHelpers)
|
@@ -1,9 +1,15 @@
|
|
1
1
|
When /^I run grog on the test git repo$/ do
|
2
2
|
Dir.chdir(@tmp_git_repo_dir)
|
3
3
|
grog_bin = File.join(@root_dir, 'bin', 'grog')
|
4
|
-
@grog_output =
|
4
|
+
@grog_output = Grog::GitLog.generate_parsing_arguments
|
5
5
|
end
|
6
6
|
|
7
7
|
Then /^the output should be$/ do |expected_output|
|
8
8
|
@grog_output.should == expected_output
|
9
9
|
end
|
10
|
+
|
11
|
+
Then /^the output ignoring colour codes should be$/ do |expected_output|
|
12
|
+
colourless_output = @grog_output.gsub(/\e\[\d+m/, '')
|
13
|
+
colourless_output.should == expected_output
|
14
|
+
end
|
15
|
+
|
data/lib/grog/git_log.rb
CHANGED
@@ -8,8 +8,14 @@ module Grog
|
|
8
8
|
fetch_log
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
12
|
-
|
11
|
+
def self.generate_parsing_arguments
|
12
|
+
options = Grog::Options.parse(ARGV)
|
13
|
+
generate(:number_of_commits_to_show => options.number_of_commits_to_show,
|
14
|
+
:show_datetimes => options.show_datetimes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.generate(options)
|
18
|
+
self.new(options).to_s
|
13
19
|
end
|
14
20
|
|
15
21
|
def to_s
|
@@ -43,8 +49,8 @@ module Grog
|
|
43
49
|
line += " T(" + Term::ANSIColor.cyan + tags.join(' ') + Term::ANSIColor.reset + ")"
|
44
50
|
end
|
45
51
|
|
46
|
-
line
|
47
|
-
end
|
52
|
+
line + "\n"
|
53
|
+
end.join
|
48
54
|
end
|
49
55
|
|
50
56
|
protected
|
@@ -78,24 +84,42 @@ module Grog
|
|
78
84
|
'git log --pretty=format:"%s" -n %d' % [format, @options[:number_of_commits_to_show]]
|
79
85
|
end
|
80
86
|
|
81
|
-
def self.hash_from_rev_names(rev_names)
|
87
|
+
def self.hash_from_rev_names(rev_names, ref_root)
|
82
88
|
hash = Hash.new { |hash, key| hash[key] = [] }
|
89
|
+
# Instead of running the command for each rev, it should run the
|
90
|
+
# command with all of them
|
83
91
|
rev_names.each do |rev_name|
|
84
|
-
sha1 = GitLog.first_line_of_command("git rev-parse #{rev_name}")
|
92
|
+
sha1 = GitLog.first_line_of_command("git rev-parse #{ref_root}/#{rev_name}")
|
85
93
|
hash[sha1] << rev_name
|
86
94
|
end
|
87
95
|
hash
|
88
96
|
end
|
89
97
|
|
90
|
-
def
|
91
|
-
|
98
|
+
def branch_names_from_branch_command(type = :local)
|
99
|
+
case type
|
100
|
+
when :local
|
101
|
+
option = ''
|
102
|
+
ref = 'refs/heads'
|
103
|
+
when :remote
|
104
|
+
option = '-r '
|
105
|
+
ref = 'refs/remotes'
|
106
|
+
else
|
107
|
+
raise "Unknown type of branch: %s" % type
|
108
|
+
end
|
109
|
+
branch_names = GitLog.lines_of_command("git branch #{option}--no-color").
|
92
110
|
map { |line| line[2..-1].split(' -> ').first }
|
93
|
-
|
111
|
+
GitLog.hash_from_rev_names(branch_names, ref)
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_all_branches
|
115
|
+
local_branches = branch_names_from_branch_command(:local)
|
116
|
+
remote_branches = branch_names_from_branch_command(:remote)
|
117
|
+
@branches = local_branches.merge(remote_branches)
|
94
118
|
end
|
95
119
|
|
96
120
|
def get_all_tags
|
97
121
|
tag_names = GitLog.lines_of_command("git tag")
|
98
|
-
@tags = GitLog.hash_from_rev_names(tag_names)
|
122
|
+
@tags = GitLog.hash_from_rev_names(tag_names, 'refs/tags')
|
99
123
|
end
|
100
124
|
|
101
125
|
def fetch_log
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom ten Thij
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-16 00:00:00 +00:00
|
13
13
|
default_executable: grog
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|