git_breeze 0.1.0
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.
- 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