File: log.rb

package info (click to toggle)
ruby-git 1.13.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 4,124 kB
  • sloc: ruby: 5,385; sh: 507; perl: 64; makefile: 6
file content (135 lines) | stat: -rw-r--r-- 2,412 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
module Git
  
  # object that holds the last X commits on given branch
  class Log
    include Enumerable
    
    def initialize(base, count = 30)
      dirty_log
      @base = base
      @count = count
 
      @commits = nil
      @author = nil
      @grep = nil
      @object = nil
      @path = nil
      @since = nil
      @skip = nil
      @until = nil
      @between = nil
      @cherry = nil
    end

    def object(objectish)
      dirty_log
      @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
      @path = path
      return self
    end
    
    def skip(num)
      dirty_log
      @skip = num
      return self
    end
    
    def since(date)
      dirty_log
      @since = date
      return self
    end
    
    def until(date)
      dirty_log
      @until = date
      return self
    end
    
    def between(sha1, sha2 = nil)
      dirty_log
      @between = [sha1, sha2]
      return self
    end

    def cherry
      dirty_log
      @cherry = true
      return self
    end
    
    def to_s
      self.map { |c| c.to_s }.join("\n")
    end
    

    # forces git log to run
    
    def size
      check_log
      @commits.size rescue nil
    end
    
    def each(&block)
      check_log
      @commits.each(&block)
    end
    
    def first
      check_log
      @commits.first rescue nil
    end

    def last
      check_log
      @commits.last rescue nil
    end

    def [](index)
      check_log
      @commits[index] rescue nil
    end

    
    private 
    
      def dirty_log
        @dirty_flag = true
      end
      
      def check_log
        if @dirty_flag
          run_log
          @dirty_flag = false
        end
      end
      
      # actually run the 'git log' command
      def run_log      
        log = @base.lib.full_log_commits(:count => @count, :object => @object, 
                                    :path_limiter => @path, :since => @since, 
                                    :author => @author, :grep => @grep, :skip => @skip,
                                    :until => @until, :between => @between, :cherry => @cherry)
        @commits = log.map { |c| Git::Object::Commit.new(@base, c['sha'], c) }
      end
      
  end
  
end