omglog 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/lib/linux.rb +18 -0
  2. data/lib/omglog.rb +49 -0
  3. data/lib/osx.rb +12 -0
  4. metadata +8 -5
data/lib/linux.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rb-inotify'
2
+
3
+ module Omglog
4
+ class Linux
5
+ def self.on_change &block
6
+ INotify::Notifier.new.tap do |notifier|
7
+ notifier.watch('.git', :modify, :recursive, &block)
8
+ ['TERM', 'INT', 'QUIT'].each do |signal|
9
+ trap(signal) do
10
+ notifier.stop
11
+ exit(0)
12
+ end
13
+ end
14
+ notifier.run
15
+ end
16
+ end
17
+ end
18
+ end
data/lib/omglog.rb ADDED
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+
3
+ module Omglog
4
+ VERSION = '0.0.3'
5
+
6
+ def run_on system
7
+ Omglog::Base.run
8
+ system.on_change { Omglog::Base.run }
9
+ end
10
+ module_function :run_on
11
+
12
+ class Base
13
+ CLEAR = "\n----\n"
14
+ YELLOW, BLUE, GREY, HIGHLIGHT = '0;33', '0;34', '0;90', '1;30;47'
15
+ SHORTEST_MESSAGE = 12
16
+ LOG_CMD = %{git log --all --date-order --graph --color --pretty="format: \2%h\3\2%d\3\2 %an, %ar\3\2 %s\3"}
17
+ LOG_REGEX = /(.*)\u0002(.*)\u0003\u0002(.*)\u0003\u0002(.*)\u0003\u0002(.*)\u0003/
18
+
19
+ def self.run
20
+ rows, cols = `tput lines; tput cols`.scan(/\d+/).map(&:to_i)
21
+ `#{LOG_CMD} -#{rows}`.tap {|log|
22
+ print CLEAR + log.split("\n")[0...(rows - 1)].map {|l|
23
+ commit = l.scan(LOG_REGEX).flatten.map(&:to_s)
24
+ commit.any? ? render_commit(commit, cols) : l
25
+ }.join("\n") + "\n" + "\e[#{GREY}mupdated #{Time.now.strftime("%a %H:%M:%S")}\e[m ".rjust(cols + 8)
26
+ }
27
+ end
28
+
29
+ def self.render_commit commit, cols
30
+ row_highlight = commit[2][/[^\/]HEAD\b/] ? HIGHLIGHT : YELLOW
31
+ [nil, row_highlight, BLUE, '', GREY].map {|c| "\e[#{c}m" if c }.zip(
32
+ arrange_commit(commit, cols)
33
+ ).join + "\e[m"
34
+ end
35
+
36
+ def self.arrange_commit commit, cols
37
+ commit[0].chomp!(' ')
38
+ commit[-2].sub!(/(\d+)\s(\w)[^\s]+ ago/, '\1\2 ago')
39
+ room = [cols - [commit[0].gsub(/\e\[[\d;]*m/, ''), commit[1..-2]].flatten.map(&:length).inject(&:+), SHORTEST_MESSAGE].max
40
+ commit.tap {|commit|
41
+ commit[-1, 0] = if commit[-1].length > room
42
+ commit.pop[0...(room - 1)] + '…'
43
+ else
44
+ commit.pop.ljust(room)
45
+ end
46
+ }
47
+ end
48
+ end
49
+ end
data/lib/osx.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'rb-fsevent'
2
+
3
+ module Omglog
4
+ class OSX
5
+ def self.on_change &block
6
+ FSEvent.new.tap {|fsevent|
7
+ fsevent.watch('.git', &block)
8
+ fsevent.run
9
+ }
10
+ end
11
+ end
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omglog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rb-fsevent
16
- requirement: &70104722537000 !ruby/object:Gem::Requirement
16
+ requirement: &70352988124480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.3
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70104722537000
24
+ version_requirements: *70352988124480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rb-inotify
27
- requirement: &70104722536420 !ruby/object:Gem::Requirement
27
+ requirement: &70352988123920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70104722536420
35
+ version_requirements: *70352988123920
36
36
  description: Realtime git logging using fseventsd. omg!
37
37
  email: ben@hoskings.net
38
38
  executables:
@@ -41,6 +41,9 @@ extensions: []
41
41
  extra_rdoc_files: []
42
42
  files:
43
43
  - bin/omglog
44
+ - lib/linux.rb
45
+ - lib/omglog.rb
46
+ - lib/osx.rb
44
47
  homepage: http://github.com/benhoskings/omglog
45
48
  licenses: []
46
49
  post_install_message: