git_tracker 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/version_tmp
17
17
  tmp
18
18
  tags
19
19
  .rvmrc
20
+ .rbenv-version
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.8.7
3
4
  - 1.9.2
4
5
  - 1.9.3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ### dev
2
2
  [full changelog](https://github.com/highgroove/git_tracker/compare/v1.3.0...master)
3
+ Enhancements
4
+
5
+ * Support Ruby 1.8.7
6
+ * Generate standalone binary via `rake git-tracker`
3
7
 
4
8
  ### 1.3.1 / 2012-04-23
5
9
  [full changelog](https://github.com/highgroove/git_tracker/compare/v1.3.0...v1.3.1)
data/Rakefile CHANGED
@@ -4,3 +4,9 @@ require 'rspec/core/rake_task'
4
4
 
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  task :default => :spec
7
+
8
+ file 'git-tracker' => FileList.new('lib/git_tracker.rb, lib/git_tracker/*.rb') do |task|
9
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
10
+ require 'git_tracker/standalone'
11
+ GitTracker::Standalone.save(task.name)
12
+ end
data/bin/git-tracker CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'git_tracker'
4
- GitTracker.execute(*ARGV)
4
+ GitTracker::Runner.execute(*ARGV)
data/git_tracker.gemspec CHANGED
@@ -13,9 +13,9 @@ Gem::Specification.new do |gem|
13
13
  better... and easier... um, besier!
14
14
  EOF
15
15
 
16
- gem.add_development_dependency "rspec", "~> 2.9.0"
16
+ gem.add_development_dependency "rspec", "~> 2.9"
17
17
  gem.add_development_dependency "rspec-spies", "~> 2.0"
18
- gem.add_development_dependency "pry", "~> 0.9.8"
18
+ gem.add_development_dependency "pry", "~> 0.9"
19
19
  gem.add_development_dependency "activesupport", "~> 3.2"
20
20
  gem.add_development_dependency "rake"
21
21
 
@@ -4,7 +4,7 @@ require 'git_tracker/repository'
4
4
  module GitTracker
5
5
  module Branch
6
6
  def self.story_number
7
- current[/#?(?<number>\d+)/, :number]
7
+ current[/#?(\d+)/, 1]
8
8
  end
9
9
 
10
10
  def self.current
@@ -12,7 +12,7 @@ module GitTracker
12
12
 
13
13
  Repository.ensure_exists unless exit_successful?
14
14
 
15
- branch_path[%r{refs/heads/(?<name>.+)}, :name] || ''
15
+ branch_path[%r{refs/heads/(.+)}, 1] || ''
16
16
  end
17
17
 
18
18
  private
@@ -0,0 +1,22 @@
1
+ require 'git_tracker/prepare_commit_message'
2
+ require 'git_tracker/hook'
3
+
4
+ module GitTracker
5
+ module Runner
6
+
7
+ def self.execute(cmd_arg, *args)
8
+ command = cmd_arg.gsub(/-/, '_')
9
+ abort("[git_tracker] command: '#{cmd_arg}' does not exist.") unless respond_to?(command)
10
+ send(command, *args)
11
+ end
12
+
13
+ def self.prepare_commit_msg(*args)
14
+ PrepareCommitMessage.run(*args)
15
+ end
16
+
17
+ def self.install
18
+ Hook.install
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,72 @@
1
+ module GitTracker
2
+ module Standalone
3
+ extend self
4
+
5
+ GIT_TRACKER_ROOT = File.expand_path('../../..', __FILE__)
6
+ PREAMBLE = <<-preamble
7
+ #
8
+ # This file is generated code. DO NOT send patches for it.
9
+ #
10
+ # Original source files with comments are at:
11
+ # https://github.com/highgroove/git_tracker
12
+ #
13
+
14
+ preamble
15
+
16
+ def save(filename, path = '.')
17
+ dest = File.join(File.expand_path(path), filename)
18
+ File.open(dest, 'w') do |f|
19
+ build(f)
20
+ f.chmod(0755)
21
+ end
22
+ end
23
+
24
+ def build(io)
25
+ io.puts "#!#{ruby_executable}"
26
+ io << PREAMBLE
27
+
28
+ each_source_file do |filename|
29
+ File.open(filename, 'r') do |source|
30
+ inline_source(source, io)
31
+ end
32
+ end
33
+
34
+ io.puts 'GitTracker::Runner.execute(*ARGV)'
35
+ io
36
+ end
37
+
38
+ def inline_source(code, io)
39
+ code.each_line do |line|
40
+ io << line unless comment?(line) || require_own_file?(line)
41
+ end
42
+ io.puts ''
43
+ end
44
+
45
+ def comment?(line)
46
+ line =~ /^\s*#/
47
+ end
48
+
49
+ def require_own_file?(line)
50
+ line =~ /^\s*require\s+["']git_tracker\//
51
+ end
52
+
53
+ def each_source_file
54
+ File.open(File.join(GIT_TRACKER_ROOT, 'lib/git_tracker.rb'), 'r') do |main|
55
+ main.each_line do |req|
56
+ if req =~ /^require\s+["'](.+)["']/
57
+ yield File.join(GIT_TRACKER_ROOT, 'lib', "#{$1}.rb")
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ def ruby_executable
64
+ if File.executable? '/usr/bin/ruby' then '/usr/bin/ruby'
65
+ else
66
+ require 'rbconfig'
67
+ File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
68
+ end
69
+ end
70
+
71
+ end
72
+ end
@@ -1,3 +1,3 @@
1
1
  module GitTracker
2
- VERSION = '1.3.1'
2
+ VERSION = '1.4.0'
3
3
  end
data/lib/git_tracker.rb CHANGED
@@ -1,19 +1,8 @@
1
1
  require 'git_tracker/hook'
2
+ require 'git_tracker/repository'
2
3
  require 'git_tracker/prepare_commit_message'
4
+ require 'git_tracker/runner'
5
+ require 'git_tracker/branch'
6
+ require 'git_tracker/commit_message'
3
7
  require 'git_tracker/version'
4
8
 
5
- module GitTracker
6
- def self.execute(cmd_arg, *args)
7
- command = cmd_arg.gsub(/-/, '_')
8
- abort("[git_tracker] command: '#{cmd_arg}' does not exist.") unless respond_to?(command)
9
- send(command, *args)
10
- end
11
-
12
- def self.prepare_commit_msg(*args)
13
- PrepareCommitMessage.run(*args)
14
- end
15
-
16
- def self.install
17
- Hook.install
18
- end
19
- end
@@ -60,7 +60,7 @@ describe GitTracker::PrepareCommitMessage do
60
60
 
61
61
  context 'branch name with a Pivotal Tracker story number' do
62
62
  let(:story) { '8675309' }
63
- let(:commit_message) { stub('CommitMessage', mentions_story?: false) }
63
+ let(:commit_message) { stub('CommitMessage', :mentions_story? => false) }
64
64
 
65
65
  before do
66
66
  commit_message.stub(:keyword) { nil }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
- require 'git_tracker'
2
+ require 'git_tracker/runner'
3
3
 
4
- describe GitTracker do
4
+ describe GitTracker::Runner do
5
5
  subject { described_class }
6
6
  let(:args) { ['a_file', 'the_source', 'sha1234'] }
7
7
 
@@ -0,0 +1,78 @@
1
+ require 'git_tracker/standalone'
2
+
3
+ describe GitTracker::Standalone do
4
+
5
+ describe '#save' do
6
+ before do
7
+ File.delete 'git-tracker' if File.exists? 'git-tracker'
8
+ end
9
+
10
+ after do
11
+ File.delete 'git-tracker' if File.exists? 'git-tracker'
12
+ end
13
+
14
+ it 'saves to the named file' do
15
+ described_class.save('git-tracker')
16
+ File.size('./git-tracker').should > 100
17
+ end
18
+
19
+ it 'marks the binary as executable' do
20
+ described_class.save('git-tracker')
21
+ File.should be_executable('./git-tracker')
22
+ end
23
+ end
24
+
25
+ describe '#build' do
26
+ subject { standalone }
27
+ let(:io) { StringIO.new }
28
+ let(:standalone) { described_class.build(io).string }
29
+
30
+ it 'declares a shebang' do
31
+ subject.should =~ /#!.+/
32
+ end
33
+
34
+ it 'includes generated code notice' do
35
+ subject.should include('This file is generated')
36
+ end
37
+
38
+ it 'inlines the code' do
39
+ subject.should include('Hook')
40
+ subject.should include('Repository')
41
+ subject.should include('PrepareCommitMessage')
42
+ subject.should include('Runner')
43
+ subject.should include('Branch')
44
+ subject.should include('CommitMessage')
45
+ subject.should include('VERSION')
46
+ end
47
+
48
+ it 'does not inline the standalone code' do
49
+ subject.should_not include('module Standalone')
50
+ end
51
+
52
+ it 'includes the call to execute the hook' do
53
+ subject.should include('GitTracker::Runner.execute(*ARGV)')
54
+ end
55
+
56
+ it 'excludes requiring git_tracker code' do
57
+ subject.should_not =~ /^require\s+["']git_tracker/
58
+ end
59
+ end
60
+
61
+ describe '#ruby_executable' do
62
+ subject { described_class }
63
+ before do
64
+ RbConfig::CONFIG.stub(:[]).with('bindir') { '/some/other/bin' }
65
+ RbConfig::CONFIG.stub(:[]).with('ruby_install_name') { 'ruby' }
66
+ end
67
+
68
+ it 'uses user-level ruby binary when it is executable' do
69
+ File.stub(:executable?).with('/usr/bin/ruby') { true }
70
+ subject.ruby_executable.should == '/usr/bin/ruby'
71
+ end
72
+
73
+ it 'uses rbconfig ruby when user-level ruby binary not executable' do
74
+ File.stub(:executable?).with('/usr/bin/ruby') { false }
75
+ subject.ruby_executable.should == '/some/other/bin/ruby'
76
+ end
77
+ end
78
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'fake_file'
2
2
  require 'commit_message_helper'
3
- require_relative 'support/matchers/exit_code_matchers'
3
+ require 'matchers/exit_code_matchers'
4
4
 
5
5
  RSpec.configure do |config|
6
6
  config.treat_symbols_as_metadata_keys_with_true_values = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-24 00:00:00.000000000 Z
12
+ date: 2012-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 2.9.0
21
+ version: '2.9'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 2.9.0
29
+ version: '2.9'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rspec-spies
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.8
53
+ version: '0.9'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 0.9.8
61
+ version: '0.9'
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: activesupport
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +116,8 @@ files:
116
116
  - lib/git_tracker/hook.rb
117
117
  - lib/git_tracker/prepare_commit_message.rb
118
118
  - lib/git_tracker/repository.rb
119
+ - lib/git_tracker/runner.rb
120
+ - lib/git_tracker/standalone.rb
119
121
  - lib/git_tracker/version.rb
120
122
  - prepare-commit-msg.example
121
123
  - spec/git_tracker/branch_spec.rb
@@ -123,7 +125,8 @@ files:
123
125
  - spec/git_tracker/hook_spec.rb
124
126
  - spec/git_tracker/prepare_commit_message_spec.rb
125
127
  - spec/git_tracker/repository_spec.rb
126
- - spec/git_tracker_spec.rb
128
+ - spec/git_tracker/runner_spec.rb
129
+ - spec/git_tracker/standalone_spec.rb
127
130
  - spec/spec_helper.rb
128
131
  - spec/support/commit_message_helper.rb
129
132
  - spec/support/fake_file.rb
@@ -148,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
151
  version: '0'
149
152
  requirements: []
150
153
  rubyforge_project:
151
- rubygems_version: 1.8.21
154
+ rubygems_version: 1.8.24
152
155
  signing_key:
153
156
  specification_version: 3
154
157
  summary: Teaching Git about Pivotal Tracker.
@@ -158,7 +161,8 @@ test_files:
158
161
  - spec/git_tracker/hook_spec.rb
159
162
  - spec/git_tracker/prepare_commit_message_spec.rb
160
163
  - spec/git_tracker/repository_spec.rb
161
- - spec/git_tracker_spec.rb
164
+ - spec/git_tracker/runner_spec.rb
165
+ - spec/git_tracker/standalone_spec.rb
162
166
  - spec/spec_helper.rb
163
167
  - spec/support/commit_message_helper.rb
164
168
  - spec/support/fake_file.rb