blastr 0.0.9 → 0.0.10

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.
@@ -1,3 +1,10 @@
1
+ == 0.0.10 2009-01-18
2
+
3
+ * Added support for Mercurial
4
+ - The URL for Mercurial repositories needs to be prefixed with "hg:" when
5
+ invoking Blastr because you can't tell by looking at a URL whether it's
6
+ a Mercurial repository or a Subversion repository.
7
+
1
8
  == 0.0.9 2009-01-17
2
9
 
3
10
  * Added usage instructions.
@@ -4,17 +4,23 @@ PostInstall.txt
4
4
  README.rdoc
5
5
  Rakefile
6
6
  bin/blastr
7
+ config/website.yml
7
8
  lib/blastr.rb
8
9
  lib/people/people.rb
9
10
  lib/scm/git.rb
11
+ lib/scm/hg.rb
10
12
  lib/scm/scm.rb
11
13
  lib/scm/svn.rb
12
14
  lib/tts/tts.rb
13
15
  script/console
14
16
  script/destroy
15
17
  script/generate
18
+ test/test_blastr.rb
16
19
  test/test_git_log_entry.rb
17
20
  test/test_git_revision.rb
18
21
  test/test_helper.rb
22
+ test/test_mercurial_revision.rb
23
+ test/test_scm_url_matching.rb
19
24
  test/test_svn_revision.rb
20
25
  test/test_tts.rb
26
+ website/index.html
@@ -1,10 +1,8 @@
1
- = blastr
1
+ = DESCRIPTION:
2
2
 
3
- * http://blastr.rubyforge.org
4
-
5
- == DESCRIPTION:
6
-
7
- Blastr observes a version control repository for commits and makes audible announcements out of the commit messages. It currently supports Subversion and Git on Linux and OS X, possibly on other UNIX-like operating systems as well.
3
+ Blastr observes a version control repository for commits and makes audible
4
+ announcements out of the commit messages. It currently supports Subversion
5
+ and Git on Linux and OS X, possibly on other UNIX-like operating systems as well.
8
6
 
9
7
  == FEATURES:
10
8
 
@@ -12,32 +10,57 @@ Blastr watches for incoming commits to a source repository and voices the commit
12
10
  messages out loud.
13
11
 
14
12
  The supported version control systems include:
15
- * Subversion (http://subversion.tigris.org)
16
- * Git (http://git-scm.com)
13
+
14
+ * Subversion[http://subversion.tigris.org]
15
+ * Git[http://git-scm.com]
16
+ * Mercurial[http://www.selenic.com/mercurial]
17
17
 
18
18
  The supported operating systems (for running Blastr) include:
19
- * Mac OS X
20
- * Linux (requires the 'espeak' or 'festival' text-to-speech utility)
19
+
20
+ * Mac OS X
21
+ * Linux (requires the eSpeak[http://espeak.sourceforge.net/] or Festival[http://www.cstr.ed.ac.uk/projects/festival/] text-to-speech utility)
21
22
 
22
23
  == SYNOPSIS:
23
24
 
24
- sudo gem install blastr
25
- blastr http://svn.acme.com/foo/trunk
26
- blastr http://svn.acme.com/foo/trunk
27
- blastr git://github.com/lkoskela/blastr.git
25
+ Subversion:
26
+
27
+ blastr http://svn.acme.com/foo/trunk
28
+
29
+ blastr http://svn.acme.com/foo/trunk 123
30
+
31
+ Git:
32
+
33
+ blastr git://github.com/lkoskela/blastr.git
34
+
35
+ blastr git://github.com/lkoskela/blastr.git e528509fddd57194f1c497ce6583f6869e8ed62c
36
+
37
+ Mercurial:
38
+
39
+ blastr hg:http://hg.serpentine.com/tutorial/hello
40
+
41
+ blastr hg:http://hg.serpentine.com/tutorial/hello 2
28
42
 
29
43
  == REQUIREMENTS:
30
44
 
31
- Blastr depends on the "git" gem (>= 1.0.5) and the "svn" command line client
32
- being in the user's PATH.
45
+ Blastr depends on the git[http://git.rubyforge.org/] gem (>= 1.0.5).
46
+ This dependency should be installed automatically when you install
47
+ Blastr with <tt>gem install blastr</tt>.
48
+
49
+ Blastr also depends on the standard command line client for the source
50
+ repository in question being in the user's PATH. For example, in order
51
+ to observe a Subversion repository the "svn" executable needs to be in
52
+ PATH. For Git, the "git" executable needs to be in PATH. For Mercurial,
53
+ "hg" needs to be in PATH.
33
54
 
34
55
  == INSTALL:
35
56
 
36
- sudo gem install blastr
57
+ sudo gem install blastr
37
58
 
38
59
  == KNOWN PROBLEMS AND GOTCHAS:
39
60
 
40
- * Blastr doesn't provide any kind of online help, there's no "--help" option, etc.
61
+ Blastr doesn't treat non-ASCII characters in commit messages too well.
62
+ In other words, the developers make no promises whatsoever regarding
63
+ Blastr's behavior when encountering weird Norwegian scribble.
41
64
 
42
65
  == LICENSE:
43
66
 
@@ -0,0 +1,2 @@
1
+ host: lkoskela@rubyforge.org
2
+ remote_dir: /var/www/gforge-projects/blastr
@@ -6,7 +6,7 @@ module Blastr
6
6
  require 'tts/tts.rb'
7
7
  require 'people/people.rb'
8
8
 
9
- VERSION = '0.0.9'
9
+ VERSION = '0.0.10'
10
10
 
11
11
  class UsageError < ArgumentError
12
12
 
@@ -38,7 +38,7 @@ EOS
38
38
  end
39
39
 
40
40
  class Process
41
- def initialize(args=[])
41
+ def initialize(args)
42
42
  validate(args)
43
43
  scm_url = args[0]
44
44
  @scm = Blastr::SourceControl.implementation_for(scm_url)
@@ -68,7 +68,7 @@ EOS
68
68
  end
69
69
  end
70
70
  end
71
- def validate(args)
71
+ def validate(args=[])
72
72
  raise UsageError.new if args.size == 0 or args.size > 2
73
73
  end
74
74
  end
@@ -0,0 +1,92 @@
1
+ require 'fileutils'
2
+ require File.dirname(__FILE__) + '/scm.rb'
3
+
4
+ module Blastr::SourceControl
5
+
6
+ class MercurialRevision
7
+ attr_accessor :name
8
+
9
+ def initialize(name)
10
+ @name = name
11
+ end
12
+
13
+ def to_s
14
+ @name
15
+ end
16
+
17
+ def before?(revision)
18
+ return false if @name == "tip"
19
+ return true if revision.name == "tip"
20
+ @name.to_i < revision.name.to_i
21
+ end
22
+ end
23
+
24
+ class Mercurial
25
+ def name; "Mercurial"; end
26
+
27
+ def self.understands_url?(url)
28
+ url.index("hg:http") == 0
29
+ end
30
+
31
+ def initialize(repo_url)
32
+ @repo_url = $1 if repo_url =~ /hg:(.*)/
33
+ end
34
+
35
+ def as_revision(arg)
36
+ raise "Invalid revision: #{arg}" unless arg =~ /^(tip)|([\d\w:-]+)$/
37
+ MercurialRevision.new(arg)
38
+ end
39
+
40
+ def latest_revision
41
+ commits = commits_since(as_revision("tip"))
42
+ return as_revision("tip") unless commits.size > 0
43
+ MercurialRevision.new(commits.last.revision.to_s)
44
+ end
45
+
46
+ def commits_since(revision)
47
+ with_clone do
48
+ hg_log(revision.to_s)
49
+ end
50
+ end
51
+
52
+ private
53
+ def hg_log(revision = 0)
54
+ nonascii = /([^a-zA-Z0-9\.,:;\-_\?!"'\s]+?)/u
55
+ entries = []
56
+ current_changeset = {}
57
+ %x[hg log -r #{revision}:].each_line do |line|
58
+ if line =~ /^changeset:\s+(.+?):(.+?)$/
59
+ entries << current_changeset unless current_changeset.empty?
60
+ current_changeset = { :revision => $1, :hash => $2 }
61
+ elsif line =~ /^user:\s+(.+?)(\s<(.+?)@(.+?)>)?$/
62
+ current_changeset[:author] = $1
63
+ elsif line =~ /^summary:\s+(.+?)$/
64
+ current_changeset[:comment] = $1.strip
65
+ elsif current_changeset.key? :comment
66
+ current_changeset[:comment] = "#{current_changeset[:comment]} #{line.strip}"
67
+ end
68
+ end
69
+ entries << current_changeset unless current_changeset.empty?
70
+
71
+ entries.collect do |map|
72
+ LogEntry.new(as_revision(map[:revision]), map[:author], map[:comment].gsub(nonascii, 'X '))
73
+ end
74
+ end
75
+
76
+ def with_clone
77
+ clone_dir = Blastr::temp_dir
78
+ %x[hg clone #{@repo_url} #{clone_dir}]
79
+ current_dir = Dir.pwd
80
+ Dir.chdir(clone_dir)
81
+ begin
82
+ yield
83
+ ensure
84
+ Dir.chdir(current_dir)
85
+ FileUtils.remove_dir(clone_dir, :force => true)
86
+ end
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ Blastr::SourceControl.register_implementation(Blastr::SourceControl::Mercurial)
@@ -31,3 +31,4 @@ end
31
31
 
32
32
  require File.dirname(__FILE__) + '/svn.rb'
33
33
  require File.dirname(__FILE__) + '/git.rb'
34
+ require File.dirname(__FILE__) + '/hg.rb'
@@ -25,7 +25,7 @@ module Blastr::SourceControl
25
25
  def name; "Subversion"; end
26
26
 
27
27
  def self.understands_url?(url)
28
- not url.match(/(https?|svn):\/\/.+/u).nil?
28
+ not url.match(/^(https?|svn):\/\/.+$/u).nil?
29
29
  end
30
30
 
31
31
  def initialize(svn_url)
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestBlastrProcess < Test::Unit::TestCase
4
+ def test_command_line_arguments_are_validated
5
+ assert_raise Blastr::UsageError do
6
+ Blastr::Process.new([])
7
+ end
8
+ assert_raise Blastr::UsageError do
9
+ Blastr::Process.new(["http://svn.com", "123", "too-much"])
10
+ end
11
+ assert_nothing_raised do
12
+ Blastr::Process.new(["http://svn.com", "123"])
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestMercurialRevision < Test::Unit::TestCase
4
+
5
+ def test_to_s
6
+ rev = Blastr::SourceControl::MercurialRevision.new("123")
7
+ assert rev.to_s == "123"
8
+ end
9
+
10
+ def test_before_comparison_between_revisions
11
+ rev123 = Blastr::SourceControl::MercurialRevision.new("123")
12
+ rev456 = Blastr::SourceControl::MercurialRevision.new("456")
13
+ assert rev123.before?(rev456) == true
14
+ assert rev456.before?(rev123) == false
15
+ end
16
+
17
+ def test_before_comparison_with_tip
18
+ rev = Blastr::SourceControl::MercurialRevision.new("100")
19
+ tip = Blastr::SourceControl::MercurialRevision.new("tip")
20
+ assert rev.before?(tip) == true
21
+ assert tip.before?(rev) == false
22
+ end
23
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestScmURLMatching < Test::Unit::TestCase
4
+ GIT_URL = "git://foo.com/bar.git"
5
+ MERCURIAL_URL = "hg:http://foo.com/svn"
6
+ SVN_HTTP_URL = "http://foo.com/svn"
7
+ SVN_HTTPS_URL = "https://foo.com/svn"
8
+ SVN_NATIVE_URL = "svn://foo.com/svn"
9
+ SVN_URLS = [ SVN_HTTP_URL, SVN_HTTPS_URL, SVN_NATIVE_URL ]
10
+ ALL_URLS = [ SVN_URLS, GIT_URL, MERCURIAL_URL ].flatten
11
+
12
+ def test_subversion
13
+ SVN_URLS.each do |url|
14
+ assert Blastr::SourceControl::Subversion.understands_url?(url), "#{url} should be a Subversion URL!"
15
+ end
16
+ ALL_URLS.reject {|url| SVN_URLS.include?(url) }.each do |url|
17
+ assert Blastr::SourceControl::Subversion.understands_url?(url) == false, "#{url} should not be a Subversion URL!"
18
+ end
19
+ end
20
+
21
+ def test_git
22
+ assert Blastr::SourceControl::Git.understands_url?(GIT_URL)
23
+ ALL_URLS.reject {|url| url == GIT_URL }.each do |url|
24
+ assert Blastr::SourceControl::Git.understands_url?(url) == false, "#{url} should not be a Git URL!"
25
+ end
26
+ end
27
+
28
+ def test_mercurial
29
+ assert Blastr::SourceControl::Mercurial.understands_url?(MERCURIAL_URL)
30
+ ALL_URLS.reject {|url| url == MERCURIAL_URL }.each do |url|
31
+ assert Blastr::SourceControl::Mercurial.understands_url?(url) == false, "#{url} should not be a Mercurial URL!"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
2
+ <html>
3
+ <head>
4
+ <title>Blastr</title>
5
+ <meta HTTP-EQUIV="REFRESH" content="0; url=http://blastr.rubyforge.org/rdoc">
6
+ </head>
7
+ <body>
8
+ <p>Redirecting to <a href="rdoc">Blastr documentation</a>...
9
+ </body>
10
+ </html>
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.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lasse Koskela
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-17 00:00:00 +02:00
12
+ date: 2009-01-18 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -42,7 +42,7 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.8.0
44
44
  version:
45
- description: Blastr observes a version control repository for commits and makes audible announcements out of the commit messages. It currently supports Subversion and Git on Linux and OS X, possibly on other UNIX-like operating systems as well.
45
+ description: Blastr observes a version control repository for commits and makes audible announcements out of the commit messages. It currently supports Subversion and Git on Linux and OS X, possibly on other UNIX-like operating systems as well.
46
46
  email:
47
47
  - lasse.koskela@gmail.com
48
48
  executables:
@@ -61,22 +61,28 @@ files:
61
61
  - README.rdoc
62
62
  - Rakefile
63
63
  - bin/blastr
64
+ - config/website.yml
64
65
  - lib/blastr.rb
65
66
  - lib/people/people.rb
66
67
  - lib/scm/git.rb
68
+ - lib/scm/hg.rb
67
69
  - lib/scm/scm.rb
68
70
  - lib/scm/svn.rb
69
71
  - lib/tts/tts.rb
70
72
  - script/console
71
73
  - script/destroy
72
74
  - script/generate
75
+ - test/test_blastr.rb
73
76
  - test/test_git_log_entry.rb
74
77
  - test/test_git_revision.rb
75
78
  - test/test_helper.rb
79
+ - test/test_mercurial_revision.rb
80
+ - test/test_scm_url_matching.rb
76
81
  - test/test_svn_revision.rb
77
82
  - test/test_tts.rb
83
+ - website/index.html
78
84
  has_rdoc: true
79
- homepage: http://blastr.rubyforge.org
85
+ homepage: "Blastr observes a version control repository for commits and makes audible "
80
86
  post_install_message:
81
87
  rdoc_options:
82
88
  - --main
@@ -101,10 +107,13 @@ rubyforge_project: blastr
101
107
  rubygems_version: 1.2.0
102
108
  signing_key:
103
109
  specification_version: 2
104
- summary: Blastr observes a version control repository for commits and makes audible announcements out of the commit messages
110
+ summary: Blastr observes a version control repository for commits and makes audible announcements out of the commit messages
105
111
  test_files:
112
+ - test/test_blastr.rb
106
113
  - test/test_git_log_entry.rb
107
114
  - test/test_git_revision.rb
108
115
  - test/test_helper.rb
116
+ - test/test_mercurial_revision.rb
117
+ - test/test_scm_url_matching.rb
109
118
  - test/test_svn_revision.rb
110
119
  - test/test_tts.rb