clockout 0.5 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/clock +12 -5
  3. data/lib/clockout.rb +16 -14
  4. data/lib/record.rb +0 -1
  5. metadata +12 -19
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7699cc7de9299eb18655d2f48767232a773519f3
4
+ data.tar.gz: 33ae0150ea39fbf0df5057f2ecb82582619fb3a7
5
+ SHA512:
6
+ metadata.gz: f74da6e936aae0e648d6821be438b3aa0f4738dd6c9419e3e320ffaee8a34e90d0f7e8bbf384a0c3301b4cbdeef6f1ba9fc660d693e6153a32f6d81a6578ca57
7
+ data.tar.gz: 5bc55a18b4f7211fd1f78b03eb329a075668eeaa2315f52856e53ec7a597f9633f4142b299bfb1dead4b5f2cc7197b5a149c326f9bbfd86ed8d02263063af902
data/bin/clock CHANGED
@@ -162,9 +162,11 @@ if (ARGV[0] == "in" || ARGV[0] == "out")
162
162
  file << "\n#{seek_line}\n#{time_line}" if !mod
163
163
  end
164
164
  elsif (ARGV[0] == "last")
165
- print "[clockout] ".green if (ARGV[1] == "--hook")
166
- clock = Clockout.new(path, nil, 2)
167
- clock.print_last
165
+ #need a decent amount of commits so we can get a good estimation of diffs rate (for pioneer commits),
166
+ #but we don't want the hook to take too long
167
+ num = 150
168
+ last = Clockout.new(path, nil, num).last
169
+ puts "[clockout] ".green + "#{last.minutes.round(2)} minutes logged" if last
168
170
  else
169
171
  opts = parse_options(ARGV)
170
172
 
@@ -182,7 +184,7 @@ else
182
184
  end
183
185
  elsif opts[:generate] == "hook"
184
186
  hook_path = root+"/.git/hooks/post-commit"
185
- hook_txt = "#clockout\nclock last --hook"
187
+ hook_txt = "#clockout\nclock last"
186
188
  if File.exist? hook_path
187
189
  contents = File.open(hook_path).read
188
190
  if (contents[hook_txt])
@@ -211,7 +213,8 @@ else
211
213
  puts "Showing hours for #{user}"
212
214
  end
213
215
 
214
- clock = Clockout.new(path, user)
216
+ max = 500
217
+ clock = Clockout.new(path, user, max)
215
218
  printer = Printer.new(clock)
216
219
 
217
220
  if (opts[:estimations])
@@ -219,4 +222,8 @@ else
219
222
  else
220
223
  printer.print_chart(opts[:condensed])
221
224
  end
225
+
226
+ if (clock.maxed_out)
227
+ puts "** only showing the #{max} most recent commits **"
228
+ end
222
229
  end
data/lib/clockout.rb CHANGED
@@ -8,13 +8,14 @@ COLS = 80
8
8
  DAY_FORMAT = '%B %e, %Y'
9
9
 
10
10
  class Clockout
11
- attr_accessor :blocks, :time_per_day
11
+ attr_accessor :blocks, :time_per_day, :maxed_out
12
12
 
13
- def commits_to_records(grit_commits)
13
+ def commits_to_records(grit_commits, commit_stats)
14
14
  my_files = eval($opts[:my_files])
15
15
  not_my_files = eval($opts[:not_my_files] || "")
16
- grit_commits.map do |commit|
17
- c = Commit.new(commit)
16
+ grit_commits.each_with_index.map do |commit, i|
17
+ c = Commit.new(commit)
18
+ c.stats = commit_stats[i][1]
18
19
  c.calculate_diffs(my_files, not_my_files)
19
20
  c
20
21
  end
@@ -143,7 +144,7 @@ class Clockout
143
144
  if !first.minutes
144
145
  first.estimated = true
145
146
  if diffs_per_min.nan? || diffs_per_min.infinite?
146
- first.minutes = 0
147
+ first.minutes = first.addition
147
148
  else
148
149
  first.minutes = first.diffs/diffs_per_min * $opts[:estimation_factor] + first.addition
149
150
  end
@@ -154,13 +155,13 @@ class Clockout
154
155
  blocks
155
156
  end
156
157
 
157
- def prepare_blocks(commits_in, author)
158
+ def prepare_blocks(commits_in, commit_stats, author)
158
159
  clockins = $opts[:in] || {}
159
160
  clockouts = $opts[:out] || {}
160
161
 
161
162
  # Convert clock-in/-outs into Clock objs & commits into Commit objs
162
163
  clocks = clocks_to_records(clockins, :in) + clocks_to_records(clockouts, :out)
163
- commits = commits_to_records(commits_in)
164
+ commits = commits_to_records(commits_in, commit_stats)
164
165
 
165
166
  # Merge & sort everything by date
166
167
  data = (commits + clocks).sort { |a,b| a.date <=> b.date }
@@ -171,9 +172,8 @@ class Clockout
171
172
  @blocks = run(data)
172
173
  end
173
174
 
174
- def print_last
175
- last = @blocks.last.last
176
- puts "#{last.minutes.round(2)} minutes logged" if last
175
+ def last
176
+ @blocks.last.last
177
177
  end
178
178
 
179
179
  def self.get_repo(path, original_path = nil)
@@ -225,7 +225,7 @@ class Clockout
225
225
  root_path
226
226
  end
227
227
 
228
- def initialize(path = nil, author = nil, num=500)
228
+ def initialize(path = nil, author = nil, num = 1)
229
229
  @time_per_day = Hash.new(0)
230
230
 
231
231
  # Default options
@@ -240,10 +240,12 @@ class Clockout
240
240
  # Merge with config override options
241
241
  $opts.merge!(clock_opts) if clock_opts
242
242
 
243
- commits = repo.commits('master', num)
244
- commits.reverse!
243
+ commits = repo.commits('master', num).reverse
244
+ commit_stats = repo.commit_stats('master', num).reverse #much faster if retrieved in batch
245
+
246
+ @maxed_out = (commits.size == num)
245
247
 
246
- prepare_blocks(commits, author)
248
+ prepare_blocks(commits, commit_stats, author)
247
249
  end
248
250
  end
249
251
  end
data/lib/record.rb CHANGED
@@ -18,7 +18,6 @@ class Commit < Record
18
18
  @date = commit.committed_date
19
19
  @message = commit.message.gsub("\n",' ')
20
20
  @sha = commit.id
21
- @stats = commit.stats
22
21
  end
23
22
  end
24
23
 
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clockout
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.5'
5
- prerelease:
4
+ version: 0.5.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Dan Hassin
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-13 00:00:00.000000000 Z
11
+ date: 2013-10-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: grit
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Sort of an extension to Git to support clocking hours worked on a project.
@@ -54,30 +49,28 @@ files:
54
49
  - lib/record.rb
55
50
  - lib/clockout.rb
56
51
  - lib/printer.rb
57
- - !binary |-
58
- YmluL2Nsb2Nr
52
+ - bin/clock
59
53
  homepage: http://rubygems.org/gems/clockout
60
54
  licenses: []
55
+ metadata: {}
61
56
  post_install_message:
62
57
  rdoc_options: []
63
58
  require_paths:
64
59
  - lib
65
60
  required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
61
  requirements:
68
- - - ! '>='
62
+ - - '>='
69
63
  - !ruby/object:Gem::Version
70
64
  version: '0'
71
65
  required_rubygems_version: !ruby/object:Gem::Requirement
72
- none: false
73
66
  requirements:
74
- - - ! '>='
67
+ - - '>='
75
68
  - !ruby/object:Gem::Version
76
69
  version: '0'
77
70
  requirements: []
78
71
  rubyforge_project:
79
- rubygems_version: 1.8.24
72
+ rubygems_version: 2.0.6
80
73
  signing_key:
81
- specification_version: 3
74
+ specification_version: 4
82
75
  summary: Clock your hours worked using Git
83
76
  test_files: []