clockout 0.5 → 0.5.1

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.
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: []