From bceadeb7d377b6ba36de4f5de5a5f5034f89bee6 Mon Sep 17 00:00:00 2001 From: Scott Chacon Date: Tue, 27 May 2008 12:36:07 -0700 Subject: added grep and author searching to logs --- lib/git/lib.rb | 4 ++++ lib/git/log.rb | 16 +++++++++++++++- tests/units/test_log.rb | 12 ++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/git/lib.rb b/lib/git/lib.rb index 5e597ad..1aaf131 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -68,6 +68,8 @@ module Git arr_opts << "-#{opts[:count]}" if opts[:count] arr_opts << "--since=\"#{opts[:since]}\"" if opts[:since].is_a? String arr_opts << "--until=\"#{opts[:until]}\"" if opts[:until].is_a? String + arr_opts << "--grep=\"#{opts[:grep]}\"" if opts[:grep].is_a? String + arr_opts << "--author=\"#{opts[:author]}\"" if opts[:author].is_a? String arr_opts << "#{opts[:between][0].to_s}..#{opts[:between][1].to_s}" if (opts[:between] && opts[:between].size == 2) arr_opts << opts[:object] if opts[:object].is_a? String arr_opts << '-- ' + opts[:path_limiter] if opts[:path_limiter].is_a? String @@ -80,6 +82,8 @@ module Git arr_opts << "-#{opts[:count]}" if opts[:count] arr_opts << "--since=\"#{opts[:since]}\"" if opts[:since].is_a? String arr_opts << "--until=\"#{opts[:until]}\"" if opts[:until].is_a? String + arr_opts << "--grep=\"#{opts[:grep]}\"" if opts[:grep].is_a? String + arr_opts << "--author=\"#{opts[:author]}\"" if opts[:author].is_a? String arr_opts << "#{opts[:between][0].to_s}..#{opts[:between][1].to_s}" if (opts[:between] && opts[:between].size == 2) arr_opts << opts[:object] if opts[:object].is_a? String arr_opts << '-- ' + opts[:path_limiter] if opts[:path_limiter].is_a? String diff --git a/lib/git/log.rb b/lib/git/log.rb index d620652..87a78a1 100644 --- a/lib/git/log.rb +++ b/lib/git/log.rb @@ -27,6 +27,18 @@ module Git @object = objectish return self end + + def author(regex) + dirty_log + @author = regex + return self + end + + def grep(regex) + dirty_log + @grep = regex + return self + end def path(path) dirty_log @@ -92,7 +104,9 @@ module Git # actually run the 'git log' command def run_log log = @base.lib.full_log_commits(:count => @count, :object => @object, - :path_limiter => @path, :since => @since, :until => @until, :between => @between) + :path_limiter => @path, :since => @since, + :author => @author, :grep => @grep, + :until => @until, :between => @between) @commits = log.map { |c| Git::Object::Commit.new(@base, c['sha'], c) } end diff --git a/tests/units/test_log.rb b/tests/units/test_log.rb index 7bcd83b..2d4b0d5 100644 --- a/tests/units/test_log.rb +++ b/tests/units/test_log.rb @@ -32,6 +32,18 @@ class TestLog < Test::Unit::TestCase assert_equal(30, l.size) end + def test_get_log_grep + l = @git.log.grep("search") + assert_equal(2, l.size) + end + + def test_get_log_author + l = @git.log(5).author("chacon") + assert_equal(5, l.size) + l = @git.log(5).author("lazySusan") + assert_equal(0, l.size) + end + def test_get_log_since_file l = @git.log.object('example.txt') assert_equal(30, l.size) -- cgit