blastr 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +5 -5
- data/bin/blastr +1 -37
- data/lib/blastr.rb +47 -3
- data/lib/{blastr → scm}/git.rb +0 -0
- data/lib/{blastr → scm}/scm.rb +0 -0
- data/lib/{blastr → scm}/svn.rb +4 -3
- data/lib/{blastr → tts}/tts.rb +1 -1
- data/test/test_tts.rb +9 -0
- metadata +7 -7
- data/test/test_blastr.rb +0 -11
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -5,12 +5,12 @@ README.rdoc
|
|
5
5
|
Rakefile
|
6
6
|
bin/blastr
|
7
7
|
lib/blastr.rb
|
8
|
-
lib/
|
9
|
-
lib/
|
10
|
-
lib/
|
11
|
-
lib/
|
8
|
+
lib/scm/git.rb
|
9
|
+
lib/scm/scm.rb
|
10
|
+
lib/scm/svn.rb
|
11
|
+
lib/tts/tts.rb
|
12
12
|
script/console
|
13
13
|
script/destroy
|
14
14
|
script/generate
|
15
|
-
test/test_blastr.rb
|
16
15
|
test/test_helper.rb
|
16
|
+
test/test_tts.rb
|
data/bin/blastr
CHANGED
@@ -1,42 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require 'yaml'
|
5
4
|
require "#{File.dirname(__FILE__)}/../lib/blastr.rb"
|
6
|
-
require "#{File.dirname(__FILE__)}/../lib/blastr/tts.rb"
|
7
5
|
|
8
|
-
|
9
|
-
scm = Blastr.scm(scm_url)
|
10
|
-
since_revision = scm.as_revision(ARGV[1]) if ARGV.size > 1
|
11
|
-
since_revision = scm.latest_revision unless ARGV.size > 1
|
12
|
-
|
13
|
-
class Author
|
14
|
-
PEOPLE_FILE = File.expand_path("~/.blastr/people")
|
15
|
-
def self.people
|
16
|
-
if File.file?(PEOPLE_FILE)
|
17
|
-
yaml = YAML.load_file(PEOPLE_FILE)
|
18
|
-
return yaml unless yaml == false
|
19
|
-
end
|
20
|
-
{ }
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.full_name_of(username)
|
24
|
-
people[username] ||= username
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def announce(commit)
|
29
|
-
puts "[#{commit.revision}] Commit by #{commit.author}: #{commit.comment}"
|
30
|
-
Blastr::TTS.speak("Commit by #{Author.full_name_of(commit.author)}: #{commit.comment}")
|
31
|
-
end
|
32
|
-
|
33
|
-
puts "Polling for #{scm.name} commits since revision #{since_revision}..."
|
34
|
-
while true
|
35
|
-
scm.commits_since(since_revision.to_s).each do |commit|
|
36
|
-
if since_revision.before?(commit.revision)
|
37
|
-
announce(commit)
|
38
|
-
since_revision = commit.revision
|
39
|
-
end
|
40
|
-
end
|
41
|
-
sleep 30
|
42
|
-
end
|
6
|
+
Blastr::Process.new(ARGV).run
|
data/lib/blastr.rb
CHANGED
@@ -1,11 +1,55 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
+
require 'yaml'
|
5
|
+
require 'scm/git.rb'
|
6
|
+
require 'scm/svn.rb'
|
7
|
+
require 'tts/tts.rb'
|
8
|
+
|
4
9
|
module Blastr
|
5
|
-
VERSION = '0.0.
|
10
|
+
VERSION = '0.0.6'
|
11
|
+
|
12
|
+
class Author
|
13
|
+
PEOPLE_FILE = File.expand_path("~/.blastr/people")
|
14
|
+
def self.people
|
15
|
+
if File.file?(PEOPLE_FILE)
|
16
|
+
yaml = YAML.load_file(PEOPLE_FILE)
|
17
|
+
return yaml unless yaml == false
|
18
|
+
end
|
19
|
+
{ }
|
20
|
+
end
|
6
21
|
|
7
|
-
|
8
|
-
|
22
|
+
def self.full_name_of(username)
|
23
|
+
people[username] ||= username
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Process
|
28
|
+
def initialize(args=[])
|
29
|
+
scm_url = ARGV[0]
|
30
|
+
@scm = Blastr.scm(scm_url)
|
31
|
+
@since_revision = @scm.as_revision(ARGV[1]) if ARGV.size > 1
|
32
|
+
@since_revision = @scm.latest_revision unless ARGV.size > 1
|
33
|
+
end
|
34
|
+
|
35
|
+
def announce(commit)
|
36
|
+
puts "[#{commit.revision}] Commit by #{commit.author}: #{commit.comment}"
|
37
|
+
Blastr::TTS.speak("Commit by #{Author.full_name_of(commit.author)}: #{commit.comment}")
|
38
|
+
end
|
39
|
+
|
40
|
+
def run
|
41
|
+
puts "Polling #{@scm.name} commits since revision #{@since_revision}..."
|
42
|
+
while true
|
43
|
+
@scm.commits_since(@since_revision.to_s).each do |commit|
|
44
|
+
if @since_revision.before?(commit.revision)
|
45
|
+
announce(commit)
|
46
|
+
@since_revision = commit.revision
|
47
|
+
end
|
48
|
+
end
|
49
|
+
sleep 30
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
9
53
|
|
10
54
|
def Blastr::temp_dir
|
11
55
|
temp_file = Tempfile.new("tmp")
|
data/lib/{blastr → scm}/git.rb
RENAMED
File without changes
|
data/lib/{blastr → scm}/scm.rb
RENAMED
File without changes
|
data/lib/{blastr → scm}/svn.rb
RENAMED
@@ -25,7 +25,7 @@ module Blastr
|
|
25
25
|
def name; "Subversion"; end
|
26
26
|
|
27
27
|
def self.understands_url?(url)
|
28
|
-
not url.match(/(https?|svn):\/\/.+/).nil?
|
28
|
+
not url.match(/(https?|svn):\/\/.+/u).nil?
|
29
29
|
end
|
30
30
|
|
31
31
|
def initialize(svn_url)
|
@@ -44,11 +44,12 @@ module Blastr
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def commits_since(since_revision = 1)
|
47
|
+
nonascii = /([^a-zA-Z0-9\.,:;\-_\?!"'\s]+?)/u
|
47
48
|
entries = []
|
48
|
-
svn_log(since_revision).scan(/r(\d+)\s\|\s(.*?)\s\|.*?\n\n(.*)\n-+/).each do |entry|
|
49
|
+
svn_log(since_revision).scan(/r(\d+)\s\|\s(.*?)\s\|.*?\n\n(.*)\n-+/u).each do |entry|
|
49
50
|
revision = as_revision(entry[0])
|
50
51
|
author = entry[1]
|
51
|
-
comment = entry[2]
|
52
|
+
comment = entry[2].gsub(nonascii, 'X ')
|
52
53
|
entries << LogEntry.new(revision, author, comment)
|
53
54
|
end
|
54
55
|
entries
|
data/lib/{blastr → tts}/tts.rb
RENAMED
data/test/test_tts.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestTTSImplementation < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_availability_depends_on_binary_existing_in_PATH
|
6
|
+
assert Blastr::TTS::TTSImplementation.new("nosuchbinaryexists").available? == false
|
7
|
+
assert Blastr::TTS::TTSImplementation.new("echo").available? == true
|
8
|
+
end
|
9
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blastr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lasse Koskela
|
@@ -62,15 +62,15 @@ files:
|
|
62
62
|
- Rakefile
|
63
63
|
- bin/blastr
|
64
64
|
- lib/blastr.rb
|
65
|
-
- lib/
|
66
|
-
- lib/
|
67
|
-
- lib/
|
68
|
-
- lib/
|
65
|
+
- lib/scm/git.rb
|
66
|
+
- lib/scm/scm.rb
|
67
|
+
- lib/scm/svn.rb
|
68
|
+
- lib/tts/tts.rb
|
69
69
|
- script/console
|
70
70
|
- script/destroy
|
71
71
|
- script/generate
|
72
|
-
- test/test_blastr.rb
|
73
72
|
- test/test_helper.rb
|
73
|
+
- test/test_tts.rb
|
74
74
|
has_rdoc: true
|
75
75
|
homepage: http://blastr.rubyforge.org
|
76
76
|
post_install_message:
|
@@ -99,5 +99,5 @@ signing_key:
|
|
99
99
|
specification_version: 2
|
100
100
|
summary: Blastr observes a version control repository for commits and makes audible announcements out of the commit messages
|
101
101
|
test_files:
|
102
|
-
- test/test_blastr.rb
|
103
102
|
- test/test_helper.rb
|
103
|
+
- test/test_tts.rb
|