git_breeze 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +3 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +6 -0
- data/LICENSE +22 -0
- data/README.md +139 -0
- data/Rakefile +66 -0
- data/bin/git-breeze +4 -0
- data/git_breeze.gemspec +27 -0
- data/lib/git_breeze/branch.rb +24 -0
- data/lib/git_breeze/commit_message.rb +45 -0
- data/lib/git_breeze/hook.rb +38 -0
- data/lib/git_breeze/prepare_commit_message.rb +42 -0
- data/lib/git_breeze/repository.rb +17 -0
- data/lib/git_breeze/runner.rb +39 -0
- data/lib/git_breeze/standalone.rb +70 -0
- data/lib/git_breeze/version.rb +3 -0
- data/lib/git_tracker.rb +7 -0
- data/prepare-commit-msg.example +4 -0
- data/spec/git_breeze/branch_spec.rb +77 -0
- data/spec/git_breeze/commit_message_spec.rb +147 -0
- data/spec/git_breeze/hook_spec.rb +51 -0
- data/spec/git_breeze/prepare_commit_message_spec.rb +100 -0
- data/spec/git_breeze/repository_spec.rb +32 -0
- data/spec/git_breeze/runner_spec.rb +47 -0
- data/spec/git_breeze/standalone_spec.rb +88 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/commit_message_helper.rb +20 -0
- data/spec/support/fake_file.rb +13 -0
- data/spec/support/matchers/exit_code_matchers.rb +37 -0
- data/spec/support/output_helper.rb +12 -0
- metadata +159 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f411ec6aefe6c704aa75132ab0e2ef37aaeaa2d8
|
4
|
+
data.tar.gz: ad02bcd7f002478120db86af40f0a0cd28db8524
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 250c6fa6a18c9eae0c171b13446dc53d25ce36ffbcceedd5ec022d64db6b49e50123114262176be632dd59b7f1b45a9a0834aa21ccac9ff521995de46b75b9a0
|
7
|
+
data.tar.gz: 15d761b82e63553d6c33c16ad22a975db67fb2b7f55c1a907f17e20dceac318976d7c7198bfe05493b9779e4b9045c5a5fe2cf5a256377eec444e8edfec94fb2
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 MobileIgniter
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
# GitBreeze
|
2
|
+
|
3
|
+
*GitBreeze*, or *git-breeze*, is a Git hook that will scan your current
|
4
|
+
branch name looking for something it recognizes as a [Breeze][b]
|
5
|
+
story number. If it finds one, it will automagically add it, in the [special
|
6
|
+
format][pt-format], to your commit message.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
### 1) Install the `git-breeze` binary
|
11
|
+
|
12
|
+
You need to get the `git-breeze` binary onto your system.
|
13
|
+
|
14
|
+
- via [Homebrew][homebrew] :beers: (preferred)
|
15
|
+
|
16
|
+
```bash
|
17
|
+
$ brew install git-breeze
|
18
|
+
```
|
19
|
+
|
20
|
+
- via [RubyGems][rubygems] :pensive: (if you must)
|
21
|
+
|
22
|
+
```bash
|
23
|
+
$ gem install git_breeze
|
24
|
+
```
|
25
|
+
|
26
|
+
### 2) Initialize the hook
|
27
|
+
|
28
|
+
Then you need to initialize the *git hook* into each local Git repository where
|
29
|
+
you want to use it.
|
30
|
+
|
31
|
+
```bash
|
32
|
+
# from inside a local Git repository
|
33
|
+
# for example: /path/to/repo/
|
34
|
+
$ git breeze init
|
35
|
+
```
|
36
|
+
|
37
|
+
This will put the `prepare-commit-msg` hook in the `/path/to/repo/.git/hooks`
|
38
|
+
directory and make it executable.
|
39
|
+
|
40
|
+
**NOTE:** The hook needs to be initialized just once for each repository in
|
41
|
+
which you will use it.
|
42
|
+
|
43
|
+
## Usage
|
44
|
+
|
45
|
+
With the hook initialized in a repository, create branches being sure to include
|
46
|
+
the Breeze story number in the branch name.
|
47
|
+
|
48
|
+
```bash
|
49
|
+
$ git checkout -b a_useful_and_helpful_name_8675309
|
50
|
+
```
|
51
|
+
|
52
|
+
When you commit, Git will fire the hook which will find the story number in the
|
53
|
+
branch name and prepare your commit message so that it includes the story number
|
54
|
+
in the [special Breeze syntax][b-format].
|
55
|
+
|
56
|
+
```bash
|
57
|
+
# on branch named `best_feature_ever-8675309`
|
58
|
+
$ git commit
|
59
|
+
```
|
60
|
+
|
61
|
+
Will result in a commit message something like: *(notice the two empty lines at
|
62
|
+
the top)*
|
63
|
+
|
64
|
+
```diff
|
65
|
+
|
66
|
+
|
67
|
+
#8675309
|
68
|
+
# Please enter the commit message for your changes. Lines starting
|
69
|
+
# with '#' will be ignored, and an empty message aborts the commit.
|
70
|
+
# On branch best_feature_ever-8675309
|
71
|
+
# Changes to be committed:
|
72
|
+
# (use "git reset HEAD <file>..." to unstage)
|
73
|
+
#
|
74
|
+
# new file: feature.rb
|
75
|
+
#
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
You should then add a [useful and responsible commit message][tpope]. :heart:
|
80
|
+
|
81
|
+
### Passing commit messages via command line
|
82
|
+
|
83
|
+
If you pass a commit message on the command line the hook will still add the
|
84
|
+
story number, preceded by an empty line, to the end of your message.
|
85
|
+
|
86
|
+
```bash
|
87
|
+
# on branch named `best_feature_ever-8675309`
|
88
|
+
$ git commit -m'Look at this rad code, yo!'
|
89
|
+
```
|
90
|
+
|
91
|
+
Results in this commit message:
|
92
|
+
|
93
|
+
```
|
94
|
+
Look at this rad code, yo!
|
95
|
+
|
96
|
+
#8675309
|
97
|
+
```
|
98
|
+
|
99
|
+
However, if you include the story number in the Breeze format within
|
100
|
+
your commit message, the hook will do nothing.
|
101
|
+
|
102
|
+
```bash
|
103
|
+
# on branch named `best_feature_ever-8675309`
|
104
|
+
$ git commit -m'#8675309 Look at this rad code, yo!'
|
105
|
+
```
|
106
|
+
|
107
|
+
Results in this commit message:
|
108
|
+
|
109
|
+
|
110
|
+
```
|
111
|
+
#8675309 Look at this rad code, yo!
|
112
|
+
```
|
113
|
+
|
114
|
+
### Valid branch names
|
115
|
+
|
116
|
+
*GitBreeze* allows you to include the story number any where in the branch
|
117
|
+
name, optionally prefixing it with a hash (`#`). Examples:
|
118
|
+
|
119
|
+
- `best_feature_ever_#8675309`
|
120
|
+
- `best-feature-ever-8675309`
|
121
|
+
- `8675309_best_feature_ever`
|
122
|
+
- `#8675309-best-feature-ever`
|
123
|
+
- `your_name/8675309_best_feature_ever`
|
124
|
+
- `your_name/#8675309_best_feature_ever`
|
125
|
+
|
126
|
+
## Contributing :octocat:
|
127
|
+
|
128
|
+
1. Fork it
|
129
|
+
2. Create your feature branch (`git checkout -b my_new_feature`)
|
130
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
131
|
+
4. Push to the branch (`git push origin my_new_feature`)
|
132
|
+
5. Create new Pull Request
|
133
|
+
|
134
|
+
|
135
|
+
[b]: https://www.breeze.pm/
|
136
|
+
[b-format]: http://www.breeze.pm/help/projects/bitbucket-integration
|
137
|
+
[tpope]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
138
|
+
[homebrew]: http://mxcl.github.com/homebrew
|
139
|
+
[rubygems]: http://rubygems.org/gems/git_breeze
|
data/Rakefile
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require File.expand_path('../lib/git_breeze/version', __FILE__)
|
3
|
+
|
4
|
+
# Skip these tasks when being installed by Homebrew
|
5
|
+
unless ENV['HOMEBREW_BREW_FILE']
|
6
|
+
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
RSpec::Core::RakeTask.new(:spec)
|
9
|
+
task :default => :spec
|
10
|
+
|
11
|
+
# Rubygems tasks
|
12
|
+
namespace :gem do
|
13
|
+
require 'bundler/gem_tasks'
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "Create tag v#{GitBreeze::VERSION}, build, and push to GitHub, Rubygems, and Homebrew"
|
17
|
+
task :release => ['gem:release', 'standalone:homebrew']
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
# standalone and Homebrew
|
22
|
+
file 'git-breezer' => FileList.new('lib/git_breeze.rb', 'lib/git_breeze/*.rb') do |task|
|
23
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
24
|
+
require 'git_breeze/standalone'
|
25
|
+
GitBreeze::Standalone.save(task.name)
|
26
|
+
end
|
27
|
+
|
28
|
+
namespace :standalone do
|
29
|
+
|
30
|
+
desc 'Build standalone script'
|
31
|
+
task :build => 'git-breezer'
|
32
|
+
|
33
|
+
desc 'Build and install standalone script'
|
34
|
+
task :install => 'standalone:build' do
|
35
|
+
prefix = ENV['PREFIX'] || ENV['prefix'] || '/usr/local'
|
36
|
+
|
37
|
+
FileUtils.mkdir_p "#{prefix}/bin"
|
38
|
+
FileUtils.cp 'git-breezer', "#{prefix}/bin", :preserve => true
|
39
|
+
end
|
40
|
+
|
41
|
+
task :homebrew do
|
42
|
+
brew_dir = Bundler.with_clean_env { `brew --prefix` }.chomp
|
43
|
+
Dir.chdir brew_dir do
|
44
|
+
sh 'git checkout -q master'
|
45
|
+
sh 'git pull -q origin master'
|
46
|
+
|
47
|
+
formula_file = 'Library/Formula/git-breezer.rb'
|
48
|
+
sha = `curl -#L https://github.com/stevenharman/git_breeze/archive/v#{GitBreeze::VERSION}.tar.gz | shasum`.split(/\s+/).first
|
49
|
+
abort unless $?.success? and sha.length == 40
|
50
|
+
|
51
|
+
formula = File.read formula_file
|
52
|
+
formula.sub! /\bv\d+(\.\d+)*/, "v#{GitBreeze::VERSION}"
|
53
|
+
formula.sub! /\b[0-9a-f]{40}\b/, sha
|
54
|
+
File.open(formula_file, 'w') {|f| f << formula }
|
55
|
+
|
56
|
+
branch = "git_breeze-v#{GitBreeze::VERSION}"
|
57
|
+
sh "git checkout -q -B #{branch}"
|
58
|
+
sh "git commit -m 'git-breezer #{GitBreeze::VERSION}' -- #{formula_file}"
|
59
|
+
sh "git push -u stevenharman #{branch}"
|
60
|
+
sh "hub pull-request -m 'git-breezer #{GitBreeze::VERSION}'"
|
61
|
+
|
62
|
+
sh 'git checkout -q master'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
data/bin/git-breeze
ADDED
data/git_breeze.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/git_breeze/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = 'git_breeze'
|
6
|
+
gem.version = GitBreeze::VERSION
|
7
|
+
gem.authors = ['Timothy Nott']
|
8
|
+
gem.email = ['tim@mobileigniter.com']
|
9
|
+
gem.homepage = 'https://bitbucket.org/mobileigniter/git_breeze'
|
10
|
+
gem.summary = %q{Teaching Git about Breeze.}
|
11
|
+
gem.description = <<-EOF
|
12
|
+
Some simple tricks that make working with Breeze.pm easier
|
13
|
+
EOF
|
14
|
+
|
15
|
+
gem.add_development_dependency 'rspec', '~> 3.2.0'
|
16
|
+
gem.add_development_dependency 'activesupport', '~> 3.2'
|
17
|
+
# Use i18n < 0.7 until we drop Ruby 1.8.7 and 1.9.2 support
|
18
|
+
gem.add_development_dependency 'i18n', '~> 0.6.11'
|
19
|
+
gem.add_development_dependency 'pry', '~> 0.10.1'
|
20
|
+
# Use Rake < 10.2 (requires Ruby 1.9+) until we drop Ruby 1.8.7 support
|
21
|
+
gem.add_development_dependency 'rake', '~> 10.1.1'
|
22
|
+
|
23
|
+
gem.files = `git ls-files`.split("\n")
|
24
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
+
gem.executables = %w(git-breeze)
|
26
|
+
gem.require_paths = ['lib']
|
27
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'English'
|
2
|
+
require 'git_breeze/repository'
|
3
|
+
|
4
|
+
module GitBreeze
|
5
|
+
module Branch
|
6
|
+
def self.story_number
|
7
|
+
current[/#?(\d{6,10})/, 1]
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.current
|
11
|
+
branch_path = `git symbolic-ref HEAD`
|
12
|
+
|
13
|
+
Repository.ensure_exists unless exit_successful?
|
14
|
+
|
15
|
+
branch_path[%r{refs/heads/(.+)}, 1] || ''
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def self.exit_successful?
|
21
|
+
$CHILD_STATUS.exitstatus == 0
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module GitBreeze
|
2
|
+
class CommitMessage
|
3
|
+
|
4
|
+
def initialize(file)
|
5
|
+
@file = file
|
6
|
+
@message = File.read(@file)
|
7
|
+
end
|
8
|
+
|
9
|
+
def mentions_story?(number)
|
10
|
+
@message =~ /^(?!#).*\[(\w+\s)?(#\d+\s)*##{number}(\s#\d+)*(\s\w+)?\]/io
|
11
|
+
end
|
12
|
+
|
13
|
+
# def keyword
|
14
|
+
# @message =~ /\[(fix|fixes|fixed|complete|completes|completed|finish|finishes|finished|deliver|delivers|delivered)\]/io
|
15
|
+
# $1
|
16
|
+
# end
|
17
|
+
|
18
|
+
def append(text)
|
19
|
+
body, postscript = parse(@message)
|
20
|
+
new_message = format_message(body, text, postscript)
|
21
|
+
File.open(@file, 'w') do |f|
|
22
|
+
f.write(new_message)
|
23
|
+
end
|
24
|
+
new_message
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def parse(message)
|
30
|
+
lines = message.split($/)
|
31
|
+
body = lines.take_while { |line| !line.start_with?('#') }
|
32
|
+
postscript = "# testing to see if I can add instructions here\n#\{story number\} should be put in automatically. use @\{username\} to call someone out. use m:\{ListName\} to move an item to a new list\n" + lines.slice(body.length..-1)
|
33
|
+
[body.join("\n"), postscript.join("\n")]
|
34
|
+
end
|
35
|
+
|
36
|
+
def format_message(preamble, text, postscript)
|
37
|
+
return <<-MESSAGE
|
38
|
+
#{preamble.strip}
|
39
|
+
|
40
|
+
#{text}
|
41
|
+
#{postscript}
|
42
|
+
MESSAGE
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'git_breeze/repository'
|
2
|
+
|
3
|
+
module GitBreeze
|
4
|
+
class Hook
|
5
|
+
attr_reader :hook_file
|
6
|
+
|
7
|
+
def self.init
|
8
|
+
init_at(Repository.root)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.init_at(root)
|
12
|
+
new(root).write
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(root)
|
16
|
+
@hook_file = File.join(root, '.git', 'hooks', 'prepare-commit-msg')
|
17
|
+
end
|
18
|
+
|
19
|
+
def write
|
20
|
+
File.open(hook_file, 'w') do |f|
|
21
|
+
f.write(hook_body)
|
22
|
+
f.chmod(0755)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def hook_body
|
29
|
+
return <<-HOOK
|
30
|
+
#!/usr/bin/env bash
|
31
|
+
|
32
|
+
git_breeze prepare-commit-msg "$@"
|
33
|
+
|
34
|
+
HOOK
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'git_breeze/branch'
|
2
|
+
require 'git_breeze/commit_message'
|
3
|
+
|
4
|
+
module GitBreeze
|
5
|
+
class PrepareCommitMessage
|
6
|
+
attr_reader :file, :source, :commit_sha
|
7
|
+
|
8
|
+
def self.run(file, source=nil, commit_sha=nil)
|
9
|
+
new(file, source, commit_sha).run
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(file, source=nil, commit_sha=nil)
|
13
|
+
@file = file
|
14
|
+
@source = source
|
15
|
+
@commit_sha = commit_sha
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
exit_when_commit_exists
|
20
|
+
|
21
|
+
story = story_number_from_branch
|
22
|
+
message = CommitMessage.new(file)
|
23
|
+
exit if message.mentions_story?(story)
|
24
|
+
keyword = message.keyword
|
25
|
+
|
26
|
+
message_addition = [keyword, "##{story}"].compact.join(' ')
|
27
|
+
message.append("[#{message_addition}]")
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def exit_when_commit_exists
|
33
|
+
exit if source == 'commit'
|
34
|
+
end
|
35
|
+
|
36
|
+
def story_number_from_branch
|
37
|
+
story = Branch.story_number
|
38
|
+
exit unless story
|
39
|
+
story
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'git_breeze/prepare_commit_message'
|
2
|
+
require 'git_breeze/hook'
|
3
|
+
require 'git_breeze/version'
|
4
|
+
|
5
|
+
module GitBreeze
|
6
|
+
module Runner
|
7
|
+
|
8
|
+
def self.execute(cmd_arg = 'help', *args)
|
9
|
+
command = cmd_arg.gsub(/-/, '_')
|
10
|
+
abort("[git_breeze] command: '#{cmd_arg}' does not exist.") unless respond_to?(command)
|
11
|
+
send(command, *args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.prepare_commit_msg(*args)
|
15
|
+
PrepareCommitMessage.run(*args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.init
|
19
|
+
Hook.init
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.install
|
23
|
+
puts '`git-breeze install` is deprecated. Please use `git-breeze init`'
|
24
|
+
self.init
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.help
|
28
|
+
puts <<-HELP
|
29
|
+
git-breeze #{VERSION} is installed.
|
30
|
+
|
31
|
+
Remember, git-breeze is a hook which Git interacts with during its normal
|
32
|
+
lifecycle of committing, rebasing, merging, etc. You need to initialize this
|
33
|
+
hook by running `git-breeze init` from each repository in which you wish to
|
34
|
+
use it. Cheers!
|
35
|
+
HELP
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module GitBreeze
|
2
|
+
module Standalone
|
3
|
+
extend self
|
4
|
+
|
5
|
+
GIT_BREEZE_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://bitbucket.org/mobileigniter/git_breeze
|
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 'GitBreeze::Runner.execute(*ARGV)'
|
35
|
+
io
|
36
|
+
end
|
37
|
+
|
38
|
+
def ruby_executable
|
39
|
+
if File.executable? '/usr/bin/ruby' then '/usr/bin/ruby'
|
40
|
+
else
|
41
|
+
require 'rbconfig'
|
42
|
+
File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def inline_source(code, io)
|
49
|
+
code.each_line do |line|
|
50
|
+
io << line unless require_own_file?(line)
|
51
|
+
end
|
52
|
+
io.puts ''
|
53
|
+
end
|
54
|
+
|
55
|
+
def require_own_file?(line)
|
56
|
+
line =~ /^\s*require\s+["']git_breeze\//
|
57
|
+
end
|
58
|
+
|
59
|
+
def each_source_file
|
60
|
+
File.open(File.join(GIT_BREEZE_ROOT, 'lib/git_breeze.rb'), 'r') do |main|
|
61
|
+
main.each_line do |req|
|
62
|
+
if req =~ /^require\s+["'](.+)["']/
|
63
|
+
yield File.join(GIT_BREEZE_ROOT, 'lib', "#{$1}.rb")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
data/lib/git_tracker.rb
ADDED