obst 0.1.7 → 0.1.8
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 +4 -4
- data/README.md +15 -0
- data/exe/obst +8 -3
- data/lib/obst/chart.rb +4 -2
- data/lib/obst/config.rb +27 -0
- data/lib/obst/git_log.rb +4 -0
- data/lib/obst/long_time_no_see.rb +3 -0
- data/lib/obst/touched_files.rb +9 -3
- data/lib/obst/version.rb +1 -1
- data/lib/obst.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 33dbda872356a5eaec6905a2054093af4a49555183ad517160a8bcb27f0b7ddd
|
4
|
+
data.tar.gz: 77d38fa97ae8e8319b05f85c3106e3fda15a7c14bb3b737a9ecae874c0a81599
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e22696c10025df791b9d11e4b6dac10e3deb965d093bb1b511d8d12cfa22019dee5f8794f0f129da60be3782ed7585afc585880f1dbd5ec49ae5f175cb03cf4d
|
7
|
+
data.tar.gz: 85721a438531b6028efc7f1680e47a9be127fe199196371cf8459cfd95091bbe1e6d957f39048574575b98a6b826d9cdd09a26e4c4f5cfb0c1b2341fe0d4ab6e
|
data/README.md
CHANGED
@@ -38,6 +38,21 @@ Group by Days
|
|
38
38
|
Obst::GroupByDays.new(C: '/path/to/local/git/repo', after: '2022-10-20T00:00:00', days: 7)
|
39
39
|
```
|
40
40
|
|
41
|
+
## Config
|
42
|
+
|
43
|
+
Place .obst.json under dir where you run obst. Content for example:
|
44
|
+
|
45
|
+
```json
|
46
|
+
{
|
47
|
+
// for all stats
|
48
|
+
"pathspec": [":!.obsidian", ":!calendar"],
|
49
|
+
// for specific stats
|
50
|
+
"long_time_no_see": {
|
51
|
+
"pathspec": [":!.obsidian", ":!calendar"]
|
52
|
+
}
|
53
|
+
}
|
54
|
+
```
|
55
|
+
|
41
56
|
## Development
|
42
57
|
|
43
58
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/exe/obst
CHANGED
@@ -4,18 +4,23 @@ require "obst"
|
|
4
4
|
|
5
5
|
path = ARGV[0] || '.'
|
6
6
|
|
7
|
+
# setup .gitignore
|
7
8
|
gitignore = File.join(path, '.gitignore')
|
8
9
|
File.open(gitignore, 'a+') do |f|
|
9
10
|
f.puts("# Obst\nobst.md") unless f.read =~ /# Obst/
|
10
11
|
end
|
11
12
|
|
13
|
+
# read config
|
14
|
+
cfg = Obst::Config.new(path)
|
15
|
+
|
16
|
+
# print stats
|
12
17
|
obst_md = File.join(path, 'obst.md')
|
13
18
|
File.open(obst_md, 'w') do |f|
|
14
19
|
f.puts Obst::Chart::DailyCount.new(C: path).to_s
|
15
20
|
f.puts "\n"
|
16
|
-
f.puts Obst::Chart::DailyChange.new(C: path).to_s
|
21
|
+
f.puts Obst::Chart::DailyChange.new(C: path, cfg: cfg).to_s
|
17
22
|
f.puts "\n"
|
18
|
-
f.puts Obst::LongTimeNoSee.new(C: path).to_s
|
23
|
+
f.puts Obst::LongTimeNoSee.new(C: path, cfg: cfg).to_s
|
19
24
|
f.puts "\n"
|
20
|
-
f.puts Obst::TouchedFiles.new(C: path).to_s
|
25
|
+
f.puts Obst::TouchedFiles.new(C: path, cfg: cfg).to_s
|
21
26
|
end
|
data/lib/obst/chart.rb
CHANGED
@@ -2,7 +2,8 @@ module Obst
|
|
2
2
|
class Chart
|
3
3
|
class DailyCount
|
4
4
|
def initialize(**opts)
|
5
|
-
|
5
|
+
pathspec = opts[:cfg]&.dig_any(['pathspec'], ['chart_daily_count', 'pathspec'])
|
6
|
+
@daily_gauge = Obst::DailyGauge.new(C: opts[:C], pathspec: pathspec).lazy
|
6
7
|
end
|
7
8
|
|
8
9
|
def to_s
|
@@ -30,7 +31,8 @@ module Obst
|
|
30
31
|
|
31
32
|
class DailyChange
|
32
33
|
def initialize(**opts)
|
33
|
-
|
34
|
+
pathspec = opts[:cfg]&.dig_any(['pathspec'], ['chart_daily_change', 'pathspec'])
|
35
|
+
@daily = Obst::GroupByDays.new(C: opts[:C], pathspec: pathspec).lazy
|
34
36
|
end
|
35
37
|
|
36
38
|
def to_s
|
data/lib/obst/config.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Obst
|
4
|
+
class Config
|
5
|
+
def initialize(dir)
|
6
|
+
@cfg = nil
|
7
|
+
location = File.join(dir, '.obst.json')
|
8
|
+
return @cfg = {} unless File.exist?(location)
|
9
|
+
|
10
|
+
File.open(location) do |f|
|
11
|
+
@cfg = JSON.parse(f.read)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def dig(*path)
|
16
|
+
@cfg.dig(*path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def dig_any(*paths)
|
20
|
+
paths.each do |path|
|
21
|
+
v = dig(*path)
|
22
|
+
return v if v
|
23
|
+
end
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/obst/git_log.rb
CHANGED
@@ -7,6 +7,7 @@ module Obst
|
|
7
7
|
@cmd = ['git', '-C', path, 'log', '--name-status', '--pretty=format:%ad', "--date=format:'%Y-%m-%dT%H:%M:%S'"]
|
8
8
|
@cmd << '--after' << opts[:after] if opts[:after]
|
9
9
|
@cmd << '--before' << opts[:before] if opts[:before]
|
10
|
+
Array(opts[:pathspec]).each{ |s| @cmd << s }
|
10
11
|
end
|
11
12
|
|
12
13
|
def to_s
|
@@ -58,6 +59,9 @@ module Obst
|
|
58
59
|
raise 'fail to loop git log' unless status_thread.value.success?
|
59
60
|
end
|
60
61
|
y << Commit.new(batch)
|
62
|
+
rescue => e
|
63
|
+
puts @cmd
|
64
|
+
raise e
|
61
65
|
end
|
62
66
|
end
|
63
67
|
end
|
data/lib/obst/touched_files.rb
CHANGED
@@ -4,6 +4,12 @@ module Obst
|
|
4
4
|
class TouchedFiles
|
5
5
|
def initialize(**opts)
|
6
6
|
@path = opts[:C]
|
7
|
+
|
8
|
+
@pathspec =
|
9
|
+
if cfg = opts[:cfg]
|
10
|
+
opts[:pathspec] ||= cfg.dig_any(['pathspec'], ['touched_files', 'pathspec'])
|
11
|
+
end
|
12
|
+
|
7
13
|
@buffer = ["# Touch files in periods\n"]
|
8
14
|
end
|
9
15
|
|
@@ -17,7 +23,7 @@ module Obst
|
|
17
23
|
def last_7_days
|
18
24
|
@buffer << "- Last 7 days"
|
19
25
|
|
20
|
-
GroupByDays.new(C: @path).take(7).each do |record|
|
26
|
+
GroupByDays.new(C: @path, pathspec: @pathspec).take(7).each do |record|
|
21
27
|
@buffer << "\t- #{record.date_wday} (#{record.file_changes.count})"
|
22
28
|
list_files(record)
|
23
29
|
end
|
@@ -28,7 +34,7 @@ module Obst
|
|
28
34
|
|
29
35
|
@buffer << "- 1 week ago"
|
30
36
|
|
31
|
-
GroupByDays.new(C: @path, before: before, days: 7).take(3).each_with_index do |record, i|
|
37
|
+
GroupByDays.new(C: @path, before: before, days: 7, pathspec: @pathspec).take(3).each_with_index do |record, i|
|
32
38
|
@buffer << "\t- #{record.time} is #{1+i}.week#{suffix_s(i)}.ago (#{record.file_changes.count})"
|
33
39
|
list_files(record)
|
34
40
|
end
|
@@ -39,7 +45,7 @@ module Obst
|
|
39
45
|
|
40
46
|
@buffer << "- 1 month ago"
|
41
47
|
|
42
|
-
GroupByDays.new(C: @path, before: before, days: 28).take(2).each_with_index do |record, i|
|
48
|
+
GroupByDays.new(C: @path, before: before, days: 28, pathspec: @pathspec).take(2).each_with_index do |record, i|
|
43
49
|
@buffer << "\t- #{record.time} is #{1+i}.month#{suffix_s(i)}.ago (#{record.file_changes.count})"
|
44
50
|
list_files(record)
|
45
51
|
end
|
data/lib/obst/version.rb
CHANGED
data/lib/obst.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ken
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -30,6 +30,7 @@ files:
|
|
30
30
|
- exe/obst
|
31
31
|
- lib/obst.rb
|
32
32
|
- lib/obst/chart.rb
|
33
|
+
- lib/obst/config.rb
|
33
34
|
- lib/obst/daily_gauge.rb
|
34
35
|
- lib/obst/daily_increment.rb
|
35
36
|
- lib/obst/git_log.rb
|