gitwakatime 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c1c9bcc647f411393c85c1a67bf26d883b8d6d31
4
- data.tar.gz: cb344b96d438e4a9b102bfb6828f9bb183977599
3
+ metadata.gz: 87b1a52859dcdf8ad54d5be75e5c981961e56fab
4
+ data.tar.gz: e8c3f862a72c6e6717eaaa553624e51cce2b9d4c
5
5
  SHA512:
6
- metadata.gz: ea8350ae2cbbe3e36bc1759a0031c4ff3d25c9e234e459cb54c39f071a93d9485a6751219b2542fe1e64f16e43a6cc3e82bce8bb5e930e1634d1f7f66c294d17
7
- data.tar.gz: 988380175f02e9d7c91a0b4b925a4f0be432f6fc3923c1d38c2c989248941380af90ef1b5e478aab8497b00a6f4f5b0e8abedbba0ea37f9bd58133c761733153
6
+ metadata.gz: 92157e1509a6f4f05b3ce58b86df8a13c0f4ffd9788204ad82b69b2cdb4850952723cc997ccb9c592702d9144c5872b5a32c02656a498bab6410d03df8b47d54
7
+ data.tar.gz: 44b4acdc179a5d4d976e56bd43758d52f09320fa6c12b62d6e6907f81c617051de062f36803c4dab86eb1726f2ed3637e784848cd51d55447693bc02d3b2fb4c
data/README.md CHANGED
@@ -39,6 +39,11 @@ Hard reset of the local cache database, if you are getting odd numbers
39
39
 
40
40
  $ gitwakatime reset
41
41
 
42
+ ## Assumptions
43
+
44
+ There a currently a few limitations with this model
45
+
46
+ * Merges are free, (no time is attributed a merge). This is true for most merges but conflict resolution will be attributed to git parent commit of that file for that merge.
42
47
 
43
48
  ## Output
44
49
  Total Recorded time 1 day 9 hrs 13 mins 32 secs
@@ -50,9 +50,11 @@ module GitWakaTime
50
50
  GitWakaTime.config.load_config_yaml
51
51
  GitWakaTime.config.git = Git.open(path)
52
52
  @git_map = Mapper.new(start_at: date)
53
- @actions = Query.new(Commit.where('date > ?', date).all, File.basename(path)).get
53
+ @project = File.basename(GitWakaTime.config.git.dir.path)
54
+ @relevant_commits = Commit.where('date > ? and project = ?', date, @project).all
55
+ @actions = Query.new(@relevant_commits, File.basename(path)).get
54
56
 
55
- @timer = Timer.new(Commit.where('date > ?', date).all, @actions, File.basename(path)).process
57
+ @timer = Timer.new(@relevant_commits, @actions, File.basename(path)).process
56
58
 
57
59
  @timer.each do |date, commits|
58
60
  Log.new format('%-40s %-40s'.blue,
@@ -19,7 +19,7 @@ module GitWakaTime
19
19
  end
20
20
 
21
21
  def time_in_seconds
22
- commited_files.collect {|f| f.time_in_seconds}.inject(:+)
22
+ commited_files.map(&:time_in_seconds).inject(:+)
23
23
  end
24
24
 
25
25
  private
@@ -13,7 +13,7 @@ module GitWakaTime
13
13
  end
14
14
 
15
15
  def load_actions
16
- unless cached?(@args)
16
+ unless cached?
17
17
 
18
18
  Log.new "querying WakaTime actions for #{@project}"
19
19
  time = Benchmark.realtime do
@@ -27,34 +27,40 @@ module GitWakaTime
27
27
 
28
28
  Log.new "API took #{time}s"
29
29
  persist_actions_localy(@actions)
30
- end
30
+ end
31
31
  true
32
32
  end
33
33
 
34
34
  def persist_actions_localy(actions)
35
- actions.each do |action|
36
-
37
- Action.find_or_create(uuid: action['id']) do |c|
35
+ sterile_actions = actions.map do |action|
38
36
  action['uuid'] = action['id']
39
37
  action['time'] = Time.at(action['time'])
40
38
  action.delete('id')
41
- c.update(action)
42
- end
43
-
39
+ Action.find_or_create(uuid: action['uuid']) do |a|
40
+ a.update(action)
41
+ end
44
42
  end
43
+
45
44
  end
46
45
 
47
- def cached?(params)
46
+ def cached?
48
47
  # Check to see if this date range might be stale?
49
- max_local_timetamp = Action.max(:time)
50
- max_local_timetamp = (Time.parse(max_local_timetamp) + 3.day).to_date if max_local_timetamp
51
- !(params[:start].to_date..params[:end].to_date).include?(max_local_timetamp) if max_local_timetamp
48
+ if cached_actions.count > 0
49
+ max_local_timetamp = (Time.parse(cached_actions.max(:time)) + 3.day).to_date
50
+ !(@args[:start].to_date..@args[:end].to_date).include?(max_local_timetamp)
51
+ else
52
+ false
53
+ end
54
+ end
55
+
56
+ def cached_actions
57
+ Action.where('time >= ?',@args[:end]).where(project: @project)
52
58
  end
53
59
 
54
60
  def actions_to_durations(_project = nil, timeout = 15)
55
61
  durations = []
56
62
  current = nil
57
-
63
+
58
64
  @actions.each do | action |
59
65
  # the first action just sets state and does nothing
60
66
  unless current.nil?
@@ -10,8 +10,8 @@ module GitWakaTime
10
10
  logs = g.log(commits).since(start_at).until(Date.today)
11
11
 
12
12
  @commits = logs.map do |git_c|
13
-
14
13
  next if git_c.author.name != GitWakaTime.config.user_name
14
+ next if git_c.parents.size > 1
15
15
  Commit.find_or_create(
16
16
  sha: git_c.sha,
17
17
  project: project
@@ -19,7 +19,7 @@ module GitWakaTime
19
19
  c.update(
20
20
  author: git_c.author.name,
21
21
  message: git_c.message,
22
- date: git_c.date
22
+ date: git_c.date.utc
23
23
  )
24
24
  end
25
25
  end.compact
@@ -7,7 +7,7 @@ module GitWakaTime
7
7
  class Query
8
8
  def initialize(commits, project, _path = nil)
9
9
  @commits = commits
10
- @api_limit = 15
10
+ @api_limit = 35
11
11
  @project = project
12
12
  @requests = time_params
13
13
  end
@@ -29,17 +29,20 @@ module GitWakaTime
29
29
  commits = @commits.map(&:date)
30
30
  d_commits = CommitedFile.select(:dependent_date).all.map { |f| f.values[:dependent_date] }.compact
31
31
  timestamps = (commits + d_commits.flatten).uniq.sort
32
- @start_at = timestamps.first
32
+
33
+ # Don't query before the Wakatime Epoch
34
+ @start_at = timestamps.first >= Time.new(2013, 5, 1) ? timestamps.first : Time.new(2013, 5, 1)
33
35
  @end_at = timestamps.last
36
+
34
37
  # Always have a date range great than 1 as the num request will be 0/1 otherwise
35
- num_requests = ((timestamps.last.to_date + 1) - timestamps.first.to_date) / @api_limit
38
+ num_requests = ((@end_at.to_date + 1) - @start_at.to_date) / @api_limit
36
39
  i = 0
37
40
 
38
41
  request_params = num_requests.to_f.ceil.times.map do
39
42
 
40
43
  params = {
41
- start: (timestamps.first.to_date + (i * @api_limit)).to_time.beginning_of_day,
42
- end: (timestamps.first.to_date + ((i + 1) * @api_limit)).to_time.end_of_day,
44
+ start: (@start_at.to_date + (i * @api_limit)).to_time.beginning_of_day,
45
+ end: (@start_at.to_date + ((i + 1) * @api_limit)).to_time.end_of_day,
43
46
  project: @project,
44
47
  show: 'file,branch,project,time,id'
45
48
  }
@@ -1,4 +1,4 @@
1
1
  # Version Number Definition
2
2
  module GitWakaTime
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'description' do
4
+ # let (:git) { Git.open(@wdir) }
5
+ before(:each) do
6
+ # GitWakaTime.config.git = git
7
+ # GitWakaTime::Mapper.new(start_at: Date.new(2015, 1, 28))
8
+ end
9
+
10
+ it 'checks cached state' do
11
+ pending
12
+ end
13
+
14
+ it 'calculates durations of actions' do
15
+ pending
16
+ end
17
+
18
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitwakatime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Russell Osborne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-05 00:00:00.000000000 Z
11
+ date: 2015-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -271,6 +271,7 @@ files:
271
271
  - spec/dummy/dot_git/sourcetreeconfig
272
272
  - spec/dummy/hi
273
273
  - spec/dummy/readme
274
+ - spec/durations_spec.rb
274
275
  - spec/fixtures/actions.json
275
276
  - spec/mapper_spec.rb
276
277
  - spec/query_spec.rb
@@ -352,9 +353,9 @@ test_files:
352
353
  - spec/dummy/dot_git/sourcetreeconfig
353
354
  - spec/dummy/hi
354
355
  - spec/dummy/readme
356
+ - spec/durations_spec.rb
355
357
  - spec/fixtures/actions.json
356
358
  - spec/mapper_spec.rb
357
359
  - spec/query_spec.rb
358
360
  - spec/spec_helper.rb
359
361
  - spec/timer_spec.rb
360
- has_rdoc: